Mac OS X/suとsudoの違い

rootになってなにやらしたいときって、unixコマンドのsuとかsudoを使いますよね。私もよく仕組みが分からないまま、使ってました。使いつつ、suとsudoの違いって一体なんだ?って思ってた。調べた結果、分かったsuとsudoの違いは以下。

●su(Switch User)=>他のユーザーに変身する。
〜使い方〜
su 変身したいユーザー

〜特記事項〜
・変身したいユーザーを指定しない場合は、rootユーザーになる。
・変身しようとするユーザーのパスワードが必要。
・rootユーザーから他のユーザーに変身する際は、パスワード不要。


●sudo=>sudo以降に打った、通常だと実行権限のないコマンドを、特別に実行する。
〜使い方〜
sudo 実行したいコマンド

〜特記事項〜
・sudoを実行するユーザーのパスワードが必要

つまりは、suもsudoも、「root権限でなにかしらのコマンドを実行できる」機能は同じな訳です。これだけじゃ、なんでこんな似たような機能のコマンドが2つ存在してるのか、そのメリットがいまいち分からない。ってことで以下。

●まず、suが存在する理由
rootは何でもできちゃうスーパーユーザー。サーバーなんかにrootでいきなりログインしようとすると、パスワードが読み取られちゃう危険があるそうな。つまりは、知らない人がrootで入ってきてぐちゃぐちゃにする危険性がある。そこで、suの存在意義が発揮される。

まず、一般ユーザーで接続・ログイン後、suをつかってrootになれば、接続時にrootのパスが漏れるという上記の危険を防ぐことができる。

じゃあ、suだけでいいじゃん。なんでsudoがあるのよ。ってことで、以下。

●suの問題点
(A)rootに変身するときに、rootのパスワードを入力する必要がある。
=>rootのパスワードをいろんな人に教えなきゃいけない。

(B)suした後に実行されたコマンドのログが残らない。
=>いつ、誰がどのコマンドを実行したのか分からず、なにか問題が起こったときに原因が分からない。

(C)コマンド単位で権限を制限できない。
=>詳しくない人が、root権限でしかできない重要な設定なんかを変えてしまうなどの危険がある。

suも完璧ではないんですねー。特に(a)なんか、suを使用するメリットを消してしまうような致命的な問題ではないですかねー、と私は感じましたよー。ま、上記のような問題点を解決してくれるのが、sudoだそうな。というわけで、以下。
(Aとa、Bとb、Cとcを対応させて書いています。)

●sudoの存在理由
(a)sudoを実行するユーザーのパスワードがあればよい。
=>rootのパスワードを他の人に教える必要がない。

(b)ログが記録される。(記録されるファイルは、syslogっていうファイルらしい。)
※「sudo -s」や「sudo su -」を使うとログは、残らないらしい。

(c)コマンド単位で実行できる人を指定できる。
=>他の人に余計な処理をされる危険性が減る。

なるほどね〜、と感心しちゃいましたよ、私は。こんなの考えた人ってすごい。頭いいなー。


あと、関係ないけど、以下、ちょっと思ったことがあったので。
mixiアプリにどんなものがあるか、いろいろ見ていたらなんと、自分が欲しいなー、作りたいなーと思っていた物があった!その名も、「ソーシャルライブラリー」。WEBの世界は、やりたいなーとか欲しいなーとか思ったら、すぐ作っちゃった方がいいのね。その方がアイディアも無駄にならないし、ニーズがなくても自分で開発スキルがあれば、また作ればいいだけの話だけなんだし。即実行が大事なのねー、と思った次第です。