utte

sudo 別のユーザー(通常は root)の権限でコマンドを実行する

sudo [オプション] コマンド

試してみる

主なオプション

-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 で実行されます。

このコマンドを使う問題

  1. chownでディレクトリ以下の所有者とグループを一括変更する
  2. スティッキービットで共有ディレクトリを安全にする
  3. aptでパッケージをインストールする
  4. aptでインストール済みのパッケージを削除する
  5. dpkgで.debファイルからインストールする
  6. systemdのデフォルトターゲットをテキストモードにする
  7. modprobeでカーネルモジュールを読み込む
  8. rmmodでカーネルモジュールを取り除く
  9. ループバックでファイルシステムをマウントする
  10. /etc/fstabにファイルシステムのマウント設定を書く

関連するコマンド