はじめに
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
バッチリです!