違い
sudo(substitute user doの略)・・・- スーパーユーザー(root)としてコマンドを実行するためのコマンド。
(オプションをつけると他のユーザーとしてもコマンドを実行できる) - 例えばabcユーザーでsudoコマンドを実行する場合、rootから「abcユーザーでsudoコマンドを使ってええで」みたいな許可をもらっておかないといけない。
- スーパーユーザー(root)としてコマンドを実行するためのコマンド。
su(substitute userの略)・・・- ユーザーを切り替えるコマンド。
- 例えばabcユーザーに切り替えたい場合は、abcユーザーのパスワードが必要だし、
rootに切り替えたい場合は、rootのパスワードが必要。
以下、suの例。
#「abcというユーザーに切り替えろ!」という意味 su abc #「rootに切り替えろ!」という意味 su root #「rootに切り替えろ!」という意味(ユーザー名を省略するとrootのことを指す) su #「rootに切り替えて、さらに環境もrootにしろ!」という意味(環境変数、シェル変数がrootのものになる) su -
以下、sudoの例。
#「root権限で再起動しろ!」という意味 sudo reboot #「abcユーザーの権限で再起動しろ!」という意味 #(実行するにはabcのパスワードが必要だし、再起動できる権限があるかどうかは分からない) sudo -u abc reboot #「root権限でrootになれ!」という意味 sudo su
ちなみにubuntuだとデフォルトでrootのパスワードが設定されていないので
su
と入力してもrootに切り替えることができない。というかsuと入力するとパスワードを設定していないのに「パスワード入力しろ」っと言われ、何を入力しても「間違ってるぞ」と言われる。理不尽。
なのでその場合は
- rootのパスワードの設定してやる(
sudo passwd rootで設定できる) sudo suでrootにログインする
という2通りの方法で解決できるっぽい。
その他
参考になった引用。
sudo は
– root のパスワードでなくてユーザーのパスワードを必要とする
– sudo を許す許さないは管理者 root が決める
– sudo でやったこと/やろうとして失敗したことは、すべてログに残る
su は substitute user ユーザーの置換ですので上記と状況が違い
– root のパスワードを知っている必要がある
– root のパスワードを知っている人が su することを禁じることができない
– su 後はやりたいほうだい(ログが残らない)
UNIX において「システムデバイスは単にファイル」なので、任意のコマンドでシステムを破壊することができます。それこそ rm なら当然ですし dd でも、いや cat でもシステムを破壊することは可能です。知識がある人が権限を得てしまえば内側からはやりたい放題、破壊工作をしたくなったら su でも sudo でも止められません。そういう意味で
– 攻撃者であれ、善意のユーザであれ root のパスワードを教えるってのは論外
– 攻撃者になりそうな人には sudo 権限を与えない
– 悪意の攻撃者でなく無能な味方が不注意でシステムを壊すことは防げない
– が、そもそもそういう無能な味方には sudo 権限を渡さなきゃいい
– sudo ならば、ログが残る
あたりの差は大きくて sudo のほうが安全なのは確かです。
おわり
コメント