Dockerで一般ユーザにsudoをさせようと思ったらパスワードが必要だったので、パスワードなしsudoを許可させる方法

はじめに

DockerとDockerfileを編集していて、一般ユーザにsudoを与える必要がありました。
基本的にDockerではrootで作業をしますが、今回は一般ユーザで作業を行わせようとしました。
その中で一般ユーザではsudoを使わせようと思いましたが、sudoではパスワード設定が必要でした。
Dockerfileにパスワードを書く訳には行きませんので、パスワードなしsudoを許可させることにしました。

sudoers

sudoについての制御は/etc/sudoersで行われています。このファイルを変更します。
ところでsudoersは「スードゥアーズ」って読んでます。みんなどう読んでいるんでしょうね😲

下記の辺り付近でsudoを実行できる権限が設定されています。

## Allow root to run any commands anywhere
root    ALL=(ALL)   ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL

## Same thing without a password
# %wheel    ALL=(ALL)   NOPASSWD: ALL

このうち、%wheelの行をコメントアウトします。これでwheelグループに属しているユーザはパスワードなしでsudoを実行できるようになります。

# sed -i -e 's/# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/' /etc/sudoers

ファイルを確認するとコメントアウトが取れていることがわかります。

sudoersファイルやpasswd、crontabファイルなどは編集にミスがあると動かなくなるため、visudoを使ってチェックしておきます。

# visudo -c

もう一点、今行った設定と相反する、「wheelグループに所属するユーザのsudoをパスワード付きで許可する」設定を無効化しておきます。
パスワード付きについてはパスワードなしを許可していれば無視されるようですが、二重定義になってしまってファイルを見た時に少し混乱するので不許可にしておきます。

# sed -i -e 's/%wheel\tALL=(ALL)\tALL/# %wheel\tALL=(ALL)\tALL/' /etc/sudoers

この設定を全て流すとこんな感じになります。

# sed -i -e 's/# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/' /etc/sudoers
# sed -i -e 's/%wheel\tALL=(ALL)\tALL/# %wheel\tALL=(ALL)\tALL/' /etc/sudoers
# visudo -c

Dockerfileではこんな感じになりました。

RUN sed -i -e 's/# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/' /etc/sudoers
RUN sed -i -e 's/%wheel\tALL=(ALL)\tALL/# %wheel\tALL=(ALL)\tALL/' /etc/sudoers
RUN visudo -c
USER yousan

バッチリです!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする