sudo apt update と打つと、自分のパスワードを聞かれるsu - と打つと、root のパスワードを聞かれる。どっちも root になるのに、なんで違うん
【疑問】sudo と su、どっちも root になるやつちゃうの?聞かれるパスワードも違う【LPICレベル1】
>>1
前提から。root は何でもできる管理者のユーザーで、ユーザーID(UID)が
su は「別のユーザーに切り替える」コマンド。切り替え先のユーザー本人のパスワードが要る。ユーザー名を省くと root
>>2
sudo は?
>>3
sudo は「許可された人が、決められたコマンドを、別のユーザー(ふつうは root)として実行する」コマンド
誰に何を許すかは /etc/sudoers に書いてあって、本人確認のために聞かれるのは自分のパスワード
>>4
自分のパスワードで root の権限が使えるって、危なくない?
>>5
sudoers で許された人しか使えない。許されてない人が打つと拒否されて、そのことも記録に残る
逆に su は、root のパスワードを知ってる人なら誰でも root になれる。管理者が何人もいると、全員に root のパスワードを配ることになる
>>6
sudo なら root のパスワードを配らんでええんか
>>7
そう。人ごとに許可を出して、担当を外れた人は sudoers から消すだけで済む
誰がいつ何を実行したかもログに残る(Debian 系なら /var/log/auth.log、Red Hat 系なら /var/log/secure が多い)
sudoers の書き方は?
>>9
1行の基本形は「誰が どのホストで=(誰として) 何を」alice ALL=(ALL) ALL で、alice はどのホストでも、どのユーザーとしても、どのコマンドでも実行できる%wheel ALL=(ALL) ALL のように % をつけるとグループ。Debian 系では sudo グループ、Red Hat 系では wheel グループに入れるのが定番
>>10
特定のコマンドだけ許すこともできる?
>>11
できる。bob ALL=(root) /usr/bin/systemctl restart nginx なら、bob はこのコマンドだけを root として実行できる
自分に何が許されてるかは sudo -l で確認できる
sudoers は、vi で直接開いて編集してええの
>>13visudo を使う。保存するときに書式をチェックしてくれる
書き間違えたまま保存すると sudo 自体が動かなくなって、直すための root 権限も取れなくなることがある
sudo echo hello > /root/test.txt が Permission denied になった。sudo つけてるのに
>>15> のリダイレクトは、sudo が動く前に、自分のシェル(一般ユーザーの権限)が処理してる
root として動いてるのは echo だけで、ファイルを開くのは自分。echo hello | sudo tee /root/test.txt のように、書き込む側を sudo で動かす
>>2
su と su - は何が違うん
>>17- をつけると、そのユーザーとしてログインし直したのと同じ環境になる。ホームディレクトリに移って、ログイン時の設定ファイルも読みこまれる- なしだと、カレントディレクトリや多くの環境変数が元のユーザーのまま残る
sudo で root のシェルに入る方法もあるん?
>>19sudo -i で root のログインシェル、sudo -s でシェルが起動する。どっちも聞かれるのは自分のパスワード
ただ、シェルに入ると、そこから先の1つ1つのコマンドは sudo のログに残らない。必要なコマンドだけ sudo で打つほうが安全
sudo は毎回パスワードを聞いてくるん?
>>21
一度入力すると、しばらくは聞かれない。sudo の既定値では 分( 秒)で、sudoers の timestamp_timeout で変えられる(ディストリビューションが変えてることもある)
すぐに忘れさせたいなら sudo -k
su は切り替え先のパスワード、sudo は自分のパスワード。sudo は許可と記録を人ごとに管理できる、やな
管理人のひとこと
- root は UID の管理者。su は切り替え先ユーザーのパスワードで切り替え、sudo は sudoers で許された人が自分のパスワードで、決められたコマンドを別ユーザーとして実行する。
- sudo なら root のパスワードを配らずに人ごとに許可を出せ、実行の記録も残る。sudoers は「誰が ホスト=(誰として) 何を」の形で、
%はグループ。編集は visudo で。 sudo echo ... > fileのリダイレクトは自分のシェルが処理するので、| sudo tee fileを使う。su -はログインし直した環境になる。sudo -lで許可の確認、sudo -iで root のログインシェル、sudo -kで入力の記憶を消す。