一時的にrootになる - さくらのVPSを使ってみた

たまにrootで作業

普段は一般ユーザーでログインして作業しますが、OSやミドルウェアの設定を変更したり、モジュールをインストールする時にはrootになる必要があります。rootで接続し直すという方法もありますが、もう少し楽な方法があるのでそれを紹介します。

旧来からの方法(suコマンド)

ひとつ目の方法はsuコマンドを使う方法です。これはずっと前から使われてきた方法で、以前はこの方法が一般的でした。現在は後述するsudoコマンドを使う方が一般的だと思います。

コマンドは次のように実行します。

$ su -
Password: (rootのパスワードを入力する)

これでrootになることができます。exitコマンドで元に戻ります。

suコマンドの問題点その1

suコマンドは便利なのですが、運用上の問題点があります。

ひとつ目の問題点は、rootになるためにrootのパスワードが必要という点です。「rootになるのにrootのパスワードが必要で何が悪いのか?」と思うかもしれませんが、ちゃんと運用しようとすると結構面倒なのですよ。

ある程度の集まりや組織でサーバーを利用する場合、何かあった時のために管理者は複数の人が担当すると思います。そうすると管理担当の人全員がrootパスワードを知っていることになります。ずっと同じ人が管理者をやり続けていれば良いのですが、そうもいかなくて異動や退職などで管理者をやめるケースが発生します。管理者ではない人がrootのパスワードを知っているというのはセキュリティ上好ましくありませんので、rootのパスワードを変更しなくてはいけません。

rootのパスワード変更を適切にやるというのが結構難しいのです。変更すべきタイミングで変更しなくてはいけませんし、変更後のパスワードを管理者に適切に通知する必要もあります。

suコマンドの問題点その2

ふたつ目の問題はsuコマンドが全権委譲になるという点です。

たとえばAさんにマシンのシャットダウンやリブートを定期的にお願いしたいとなった場合、rootの権限が必要なのでrootのパスワードを教えることになります。Aさんが真面目でかつ作業も正確だったらよいのですが、そうではなくて悪さをしようとしたり、ついうっかり操作を間違えてしまったりすると大変なことになってしまいます。suコマンドだとこれを防ぐ方法がありません。

新しい方法(sudoコマンド)

もうひとつの方法はsudoコマンドを使う方法です。今ではsuよりもsudoが一般的なので、sudoしか使ったことがないという人も多いと思います。

コマンドは次のように実行します。

$ sudo コマンド
[sudo] password for ユーザーID: (ユーザーのパスワードを入力する)

root権限で実行したいコマンドを指定する使い方が多いです。

コマンドをひとつ実行するだけではなくて、しばらくrootになりたい場合は次のようにします。

$ sudo -s
[sudo] password for ユーザーID: (ユーザーのパスワードを入力する)

いずれの場合も要求されるパスワードはrootのパスワードではなく、ユーザーのパスワードになっています。

sudoコマンドの利点

suコマンドの問題点の裏返しで、rootのパスワードを知る必要がないことと、実行できるコマンドを制限できるということになります。

sudoコマンドの利用者を指定する

sudoコマンドは自分のパスワードで利用できるので、利用できる人を限定する必要があります。

今回は「wheelグループに属するユーザーがすべてのコマンドに対してsudoコマンドを実行できる」という指定のしかたを紹介します。

設定の変更はvisudoコマンドを利用します。

# visudo

エディタが起動して設定ファイルを読み込んだ状態になるので「# %wheel ALL=(ALL) ALL」と書いてある行の先頭の#を外してください。そういう行がなければ次のように書いてください。

%wheel  ALL=(ALL) ALL

次に、sudoを利用するユーザーをwheelグループに追加してください。グループへの追加はusermodコマンドを利用します。

# usermod -G wheel ユーザーID

これで指定したユーザーがsudoコマンドを使えるようになります。指定したユーザーであれば、例えば次のようにrootでしか読めないファイルをsudoコマンドを使って読むことができます。

$ cat /var/log/messages
cat: /var/log/messages: Permission denied
$ sudo cat /var/log/messages
[sudo] password for ユーザーID: 
(ファイルの内容が出力される)