sudo
sudo = superuser do
コマンドの概要
一時的にコマンド単位で root 権限を取得する。
要求するコマンドは root ユーザのパスワードではなく、今のユーザのパスワードを要求することに注意。
ただし、 root 権限を取得するだけでなく、「一時的に誰かに成り代わる」というだけなので、別のユーザも指定できる。
たとえば、 hoge ユーザが fuga ユーザになりかわることも可能である。
あるユーザが sudo を実行できるか?は /etc/sudoers に設定されており、 sudo を実行したときにこのファイルが読み込まれてそのユーザが root 権限を取得できるか?を判定する。
ただし、実行中は完全に root ユーザに成り代わっている.
code: sh
echo "Current user: $(whoami)"
echo "Process user for cat: $(ps -o user= -p $$ | head -1)"
上記のようなテストスクリプトファイルを用意すると、 sudo をつけると両方 root と表示される。
/etc/sudoers
code:sh
root ALL=(ALL) ALL
# aaa ユーザが bbb ユーザに成り代わって、 httpd を再起動できる
# sudo -u bbb systemctl restart httpd.service
aaa ALL=(bbb) /usr/bin/systemctl restart httpd.service
sudo su -
root アカウントのパスワードでログインできないとき、上記のコマンドが利用できる。
sudo によって、一時的に root 権限になり、その状態で su - を実行するため、ルートユーザになってログインできる。
sudo によるシェルスクリプト
code:bash
echo hello > /etc/config/hello
上記のような tesh.sh スクリプトがあったとする。
このとき、 test.sh のようにそのまま実行すると当然だが失敗する。 /etc/config/hello への書き込み権限をユーザがもっていないためである。
ただ、 sudo tesh.sh のようにすると、 tesh.sh 内がすべて root 権限で実行されるためうまく動く。