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 のパスワードを要求するようにする方法について書いた。