sudoを学ぶ
rootでの作業とsudoを使っての作業の違い
rootはそのサーバーの管理者という位置づけのユーザーですべての権限を持っているため、sbinのコマンドから各種サービス設定ファイルまで全ての作業を行うことができる。
一方、一般ユーザーは与えられた権限の範囲でのみ作業を行うことができる。そのためファイルによっては書き換えはもちろんのこと、実行すらできない場合もある。どうしても実行したい場合は、sudoというコマンドを使用して一時的にrootユーザーの権限を得てファイルを編集なりなんなりができる。
sudoでの作業の意義
rootで作業せずに、基本は一般ユーザーで作業を行い、必要な際sudoを行うというのが一般的だが、正直sudoを行う意義が分からなかった ため、いちいちsudoするの面倒でrootで作業していた。rootログイン禁止設定もしてみたけど、結局一般ユーザーでログイン直後にsu やってrootになっていた。どうせ自分しかそのサーバーにログインしないし。
と思っていたが、やっと自分なりの意義を見つけられた気がする。
http://ja.wikipedia.org/wiki/Sudo
セキュリティ的なメリットも多くあるが、何よりも大きいのは、sudoでパスワード入力時に自分が何をしようとしているのか、どのコマンドを実行 しようとしているのか再認識し、確認できる点だろう。
精神論的になるけど、かの有名なスパイダーマンおじさんの言葉、「大いなる力には大いなる責任が伴う」があるように、冷静に考えるとrootでの作業はコストの割りに影響力がアホみたいにでかい。趣味のサーバ程度なら屁でもないが、それが企業のサービスをホスティングしてるサーバだったりすると、何か変更を施したときの影響はでかい。
その影響力の大きさを意識するという意味でも、ここぞというときにのみ実行したいコマンドの前にsudoをつける、そしてパスワードを入力して自分が何をしようとしているのかを再確認するというのは重要だと思う。
なんで僕が今日突然こんなことを意識するようになったのかというと、お客さんのサーバにrootログインしてうっかり大事なデータを消してしまったからであります。すぐに復旧できて大事にはならなかったけど、完全自殺マニュアルって経費で落としてもらえるかな?とか真面目に考えちゃうくらい僕にとって衝撃的な出来事でした。
sudoするための設定
useaddして一般ユーザーを作成しただけではsudoは使えない。以下設定手順。
デフォルトでsudoが入っていない場合もあるので、まずはsudoをインストールする。
# yum install sudo
sudo権限を与えたいユーザーを作成する。もちろんパスワードも設定する。
# useradd hoge # passwd hoge
必要ならばグループにも追加する。sudoできるユーザーグループは慣習的にwheelというみたい。wheelという単語には権力者とかって意 味がある。
# usermod -G wheel hoge
ここからやっとsudoの設定。sudoはシステム管理の超大事な部分の関わってくるため、その設定ファイル(/etc/sudoers)は普通 にvimとかではいじれない。vim /etc/sudoers とかやっても読み込み専用で開くようになっている。そのため visudo というコマンドでその設定ファイルをいじる。
# visudo
コマンドのエイリアスをかけてコマンド郡ごとに許可したり、リモートからの
sudo許可などの様々な設定項目があるが、重要なのは以下のような ユーザーま
たはグループのsudoコマンド許可部。
## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL 1. 2. 3. 4.
各記述内容の意味は
1.sudoできるユーザーの指定。頭に「%」をつけると、そのグループに対してsudo
許可するという意味になる。
2.ホストに対する許可。sudoersにホストのエイリアスを設定してなければALLで
かまわない。ホストごとにも設定できるということ。
3.sudoされるユーザー名。ALLを指定した場合は全てのユーザー権限=rootという
ことになる。rootだけでなく、他のユーザーを指定す ることもできる。
4.利用できるコマンドの制限。これまたsudoersでコマンドに対するエイリアスを
設定していて、ここにそのエイリアスを書くと、そのユー ザー(グループ)はそ
のコマンドを指定ユーザー権限で実行できる。もちろんALLなら全コマンド実行
可能。