sudo 別のユーザー(通常は root)の権限でコマンドを実行する
sudo [オプション] コマンド試してみる
id -unまず、今のユーザー名を確認します。
sudo id -unsudo を付けると、root として実行されます。
sudo -u nobody id -un-u で、root 以外の別のユーザーとして実行します。
sudo -l自分が sudo で実行できる内容を表示します。
sudo visudo -c設定ファイル(/etc/sudoers)の文法を確認します。編集はせずに、確認だけです。
sudo -ksudo が覚えているパスワード認証の記録を消します。次回は、またパスワードを聞かれます。
主なオプション
-u ユーザー | 指定したユーザーとして実行する(省略すると root) |
|---|---|
-l | 実行を許可されているコマンドを表示する |
-i | 対象ユーザーのログインシェルを、ログインしたときと同じ環境で起動する |
-s | シェルを起動する |
-k | 認証の記録を消す |
-v | 認証の記録の有効期間を延ばす |
-E | 環境変数を引き継ぐ |
解説
一時的に root になる
sudo は、コマンドを1つだけ、root(または別のユーザー)の権限で実行します。普段は一般ユーザーで作業し、管理が必要なときだけ sudo を付けるので、誤って重要なファイルを壊すことが減ります。誰がいつ何を実行したかも、ログに残ります。
パスワードは自分のもの
sudo が聞くのは、root のパスワードではなく、自分自身のパスワードです。一度入力すると、しばらく(既定では 15分ほど)は、再入力が不要になります。このページのターミナルでは、パスワードなしで使えるように設定されています。
su との違い
su は、別のユーザーに切り替えるコマンドで、そのユーザーのパスワードが必要です。su - root では、root のパスワードを知っている必要があります。sudo は、自分のパスワードで、許可されたコマンドだけを実行します。
設定ファイル
誰が何を実行できるかは、/etc/sudoers と /etc/sudoers.d/ に書きます。編集するときは、文法のミスを検査してくれる visudo を使います。書き方は「誰が 場所=(誰として) コマンド」です。
user ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
% で始まる名前は、グループです。Debian では sudo グループに入っているユーザーが管理者として使えます。Red Hat 系では wheel グループです。
リダイレクトの落とし穴
sudo echo hello > /root/a.txt は失敗します。リダイレクトを行うのは、sudo ではなく、自分のシェルだからです。echo hello | sudo tee /root/a.txt のようにすると、書き込みの部分が root で実行されます。