CentOSを含む、Linuxディストリビューション(あるいはUNIX系全般)で、rootというアカウントは特別で、一般的な使用方法では常用すべきではない、というのは多少なりともLinux/UNIXに触れた事がある人なら、上司や先輩から教わったことだろう。
まあ、そのとおりなのだが、なぜ常用すべきでないのか、どういう時に使うのか、備忘録として整理しておきたいと思う。
1.root はどんなユーザーか
スーパーユーザーと呼ばれることもある特別なユーザーで、全てのコマンドが実行でき、全てのファイル/ディレクトリにアクセスできる。
これが何を指すかというと、メールサーバーを運用しているサーバーなら、root権限で、そのサーバーに保存されているメールの内容が全て見える。
データベースを運用していて、そこに個人情報が記入されていれば、不可逆の暗号で書き込まれていない限り、それも見える。
アクセス権の制限や許可も自由自在。
まさしく、そのサーバー内の独裁者とも言えるほどの権限を持っている。
だからこそ、rootにはモラルが必要と言われるわけだ。
また、どんなプログラムも実行できるわけだから、誤ったコマンドの実行や設定ファイルのミスで、システムを破壊してしまうことだってある。
rm -rf *
実行するディレクトリにもよるが、こんな簡単なコマンドで、サーバー内の全ファイルを消すことだって出来てしまう。
なので、通常の仕様はもちろん、管理作業のためであっても、いきなりrootでログインせず、一旦は一般ユーザーとしてログインし、なおかつそのユーザーでないと、rootになれないような設定も施し、どうしてもroot権限が必要なときだけ、su コマンドでroot権限を取得するのが慣例とされている。
2.root権限が必要なケース
そうは言っても、サーバーを管理していると、root権限が必要なケースは結構多い。
- サーバーのシャットダウン/再起動
- (特にサーバー向け)ソフトウェアの実行時
- ソフトウェアのインストール作業
- システムのアップデート
- ソフトウェアの設定更新
- ハードウェアの増設/変更時
- アカウント管理時
- ログの閲覧時
- データのバックアップ時
- 障害の修復時
などなど。
まあ、仮想環境作って、自分だけしか操作しないんであれば、rootだけでも良さげなもんだが、不必要なrootの利用が習慣づいてしまうので、おすすめは出来ない。
学習目的であっても、rootと一般ユーザーの違いを肌で感じるためにも通常の慣例通り、普段は一般ユーザーで利用すべきだろう。
3.できるだけsudoコマンドを使う
普段は一般ユーザーを使い、必要なときだけ su コマンドでroot権限を使う・・・といっても、su コマンドはrootのパスワードが必要で、なおかつ、一旦 su でログインしていると、rootを常用しているのと大差ない。
そこで、一般ユーザーの一部に、root権限の必要なコマンドを実行できるようにし、sudoコマンド経由で実行できるようにするという方法も推奨されている。
そのためには、以前の記事で触れた設定(wheelグループへの追加&に加え、/etc/pam.d/suの編集)に加えて、”/etc/sudoers”ファイルに所定の設定を行い、sudoコマンドの実行権限を与える。
なお、”/etc/sudoers”ファイルはパーミッションも440で、所有者&グループ限定の読み取り専用のファイル。
これを直接編集するのではなく、”visudo”というコマンドが用意されているので、それを使って編集する。
*visudoコマンドはrootでしか実行できないため、このコマンド使用時は、su コマンドでrootになっておく必要がある。
操作自体は、viで”/etc/sudoers”ファイルを直接編集するのと、さほど変わりはない。
違うのは、一旦一時ファイルとして編集し、文法チェックの上反映するという仕組みになっている点。

上の画像は、設定の一例だが、この場合、wheelグループに対して、sudo経由でのコマンドの実行権限を与えている。
なおかつ、このパターンだと、コマンド実行時にパスワードを尋ねるようになっている。その際、入力するパスワードは、”root”のパスワードではなく、sudoコマンドを実行しようとしているユーザーのパスワードになる。
この方法を使って、sudoコマンド経由でroot権限の必要なコマンドを実行させるようにしておくと、”root”のパスワードを知らなくてもコマンドが実行できる。
言い方を変えれば、root権限の必要なコマンドを実行する機会があるからといって、むやみに”root”のパスワードを教えなくても良い、ということになるのが安全上のメリットとなる。

コメント