CUBE SUGAR CONTAINER

技術系のこと書きます。

sudo 時に root のパスワードを使う

sudo は一般ユーザが一時的に root 権限を得るためのコマンドだけど、デフォルトでは実行したユーザのパスワードを要求する場合がある。 ただ、実際には root のパスワードを要求させたいシチュエーションも多くありそう。 今回はそれを実現する方法を試してみる。

環境には CentOS7 を使った。

$ cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
$ uname -r
3.10.0-229.11.1.el7.x86_64

設定ファイルを用意する

早速本題だけど、sudo 時に root パスワードを要求させたいときは設定ファイルで Defaults rootpw を有効にする。 :(コロン) の後にユーザ名を付ければ、そのユーザだけに設定が反映される。 CentOS6 以降で sudo 関連の設定を追加するには /etc/sudoers のファイルを直接編集するよりも /etc/sudoers.d 以下にファイルを新たに作った方がよさそう。

$ cat << EOF | sudo tee /etc/sudoers.d/vagrant
vagrant ALL=(ALL) ALL
Defaults:vagrant  rootpw
EOF

ちなみに上記はユーザ名から分かる通り vagrant で検証してるんだけど、デフォルトではノーパスワードで sudo できるようになっているはず。 (これは Vagrant Box を作る際の決まり事になっている) もし、既存の Vagrant Box を使っていて root のパスワードが分からない場合には、あらかじめ sudo su - した上で passwd コマンドを使って root のパスワードを変更しておくと良い。

動作を確認する

上記の設定が終われば vagrant ユーザで sudo するとパスワードを聞かれるようになる。 あとは root パスワードを入力して正しくコマンドが実行されることを確認するだけだ。

$ sudo cat /etc/sudoers.d/vagrant

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for root:
vagrant ALL=(ALL) ALL
Defaults:vagrant  rootpw

めでたしめでたし。

まとめ

今回は sudo コマンドを実行した際に root のパスワードを要求するようにする方法について書いた。