読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】sudo と su、どっちも root になるやつちゃうの?聞かれるパスワードも違う【LPICレベル1】

23レスカテゴリ:Linux
1: 名無しさん

sudo apt update と打つと、自分のパスワードを聞かれる
su - と打つと、root のパスワードを聞かれる。どっちも root になるのに、なんで違うん

2: 名無しさん

>>1
前提から。root は何でもできる管理者のユーザーで、ユーザーID(UID)が
su は「別のユーザーに切り替える」コマンド。切り替え先のユーザー本人のパスワードが要る。ユーザー名を省くと root

3: 名無しさん

>>2
sudo は?

4: 名無しさん

>>3
sudo は「許可された人が、決められたコマンドを、別のユーザー(ふつうは root)として実行する」コマンド
誰に何を許すかは /etc/sudoers に書いてあって、本人確認のために聞かれるのは自分のパスワード

5: 名無しさん

>>4
自分のパスワードで root の権限が使えるって、危なくない?

6: 名無しさん

>>5
sudoers で許された人しか使えない。許されてない人が打つと拒否されて、そのことも記録に残る
逆に su は、root のパスワードを知ってる人なら誰でも root になれる。管理者が何人もいると、全員に root のパスワードを配ることになる

7: 名無しさん

>>6
sudo なら root のパスワードを配らんでええんか

8: 名無しさん

>>7
そう。人ごとに許可を出して、担当を外れた人は sudoers から消すだけで済む
誰がいつ何を実行したかもログに残る(Debian 系なら /var/log/auth.log、Red Hat 系なら /var/log/secure が多い)

9: 名無しさん

sudoers の書き方は?

10: 名無しさん

>>9
1行の基本形は「誰が どのホストで=(誰として) 何を」
alice ALL=(ALL) ALL で、alice はどのホストでも、どのユーザーとしても、どのコマンドでも実行できる
%wheel ALL=(ALL) ALL のように % をつけるとグループ。Debian 系では sudo グループ、Red Hat 系では wheel グループに入れるのが定番

11: 名無しさん

>>10
特定のコマンドだけ許すこともできる?

12: 名無しさん

>>11
できる。bob ALL=(root) /usr/bin/systemctl restart nginx なら、bob はこのコマンドだけを root として実行できる
自分に何が許されてるかは sudo -l で確認できる

13: 名無しさん

sudoers は、vi で直接開いて編集してええの

14: 名無しさん

>>13
visudo を使う。保存するときに書式をチェックしてくれる
書き間違えたまま保存すると sudo 自体が動かなくなって、直すための root 権限も取れなくなることがある

15: 名無しさん

sudo echo hello > /root/test.txt が Permission denied になった。sudo つけてるのに

16: 名無しさん

>>15
> のリダイレクトは、sudo が動く前に、自分のシェル(一般ユーザーの権限)が処理してる
root として動いてるのは echo だけで、ファイルを開くのは自分。echo hello | sudo tee /root/test.txt のように、書き込む側を sudo で動かす

17: 名無しさん

>>2
su と su - は何が違うん

18: 名無しさん

>>17
- をつけると、そのユーザーとしてログインし直したのと同じ環境になる。ホームディレクトリに移って、ログイン時の設定ファイルも読みこまれる
- なしだと、カレントディレクトリや多くの環境変数が元のユーザーのまま残る

19: 名無しさん

sudo で root のシェルに入る方法もあるん?

20: 名無しさん

>>19
sudo -i で root のログインシェル、sudo -s でシェルが起動する。どっちも聞かれるのは自分のパスワード
ただ、シェルに入ると、そこから先の1つ1つのコマンドは sudo のログに残らない。必要なコマンドだけ sudo で打つほうが安全

21: 名無しさん

sudo は毎回パスワードを聞いてくるん?

22: 名無しさん

>>21
一度入力すると、しばらくは聞かれない。sudo の既定値では 分( 秒)で、sudoers の timestamp_timeout で変えられる(ディストリビューションが変えてることもある)
すぐに忘れさせたいなら sudo -k

23: 名無しさん

su は切り替え先のパスワード、sudo は自分のパスワード。sudo は許可と記録を人ごとに管理できる、やな

管理人のひとこと