違い
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
のほうが安全なのは確かです。
おわり
コメント