sudo
は、一時的に権限を昇格させて別ユーザー(既定は root)としてコマンドを実行するためのコマンドです。
パスワード確認や実行履歴の記録、権限の細かな制御を sudoers
設定で行えます。
実務では、設定ファイルの編集やサービスの再起動など、管理権限が必要な操作を安全に実行する際に使います。
構文(Syntax)
sudo [OPTION...] COMMAND [ARG...]
sudo -u USER [OPTION...] COMMAND [ARG...]
sudo -g GROUP [OPTION...] COMMAND [ARG...]
# シェルを起動
sudo -i # 対象ユーザーの「ログインシェル」環境で起動
sudo -s # シェルを起動(SHELL 変数優先、なければ /bin/sh)
# 編集モード(sudoedit)
sudo -e FILE... # 環境変数 VISUAL/EDITOR を使って安全に編集
# 権限や認証の確認・管理
sudo -l [COMMAND] # 自分に許可された操作の一覧
sudo -v # 認証キャッシュを延長
sudo -k | -K # 認証キャッシュを失効(-K は完全削除)
主なオプション一覧
オプション | 説明 | 使用例 |
---|---|---|
-u USER | 実行ユーザーを指定(既定は root ) | sudo -u www-data whoami |
-g GROUP | 実行グループを指定(sudoers で許可されている場合) | sudo -g nginx id |
-i | 対象ユーザーのログインシェルで起動(環境も切替) | sudo -i |
-s | シェルを起動(最小限の環境で) | sudo -s |
-e | sudoedit モードでファイルを安全に編集 | sudo -e /etc/hosts |
-l | 許可されたコマンドを表示 | sudo -l |
-v | 認証の有効期限を延長(パスワード入力を求められることあり) | sudo -v |
-k / -K | 認証キャッシュを失効 / 完全削除 | sudo -k |
-E | 環境変数を保持(sudoers の env_keep 設定が必要) | sudo -E mycmd |
-H | HOME を対象ユーザーのものに設定 | sudo -H pip install ... |
-b | バックグラウンドで実行 | sudo -b long-task |
-n | 非対話(パスワード要求が出たら即失敗) | sudo -n systemctl status |
-A | askpass プログラム経由でパスワード取得 | sudo -A cmd |
-p PROMPT | パスワードプロンプトを変更 | sudo -p 'Password: ' cmd |
-S | 標準入力からパスワードを読む(スクリプト用、要注意) | `echo pass |
-C NUM | closefrom() の下限 FD を指定(高度な用途) | sudo -C 3 cmd |
-- , -h , -V | 引数終端 / ヘルプ / バージョン表示 | sudo -V |
重要: 実際に使えるオプションはバージョンやディストリによって差異があります。
man sudo
を参照してください。
実行例
基本:root 権限でコマンドを 1 回だけ実行
説明: 現在のユーザーと、root での id
を比較します。
コマンド:
id
sudo id
出力例(例):
uid=1000(user) gid=1000(user) groups=1000(user)
uid=0(root) gid=0(root) groups=0(root)
別ユーザーとして実行(-u)
説明: Web サービス用ユーザー www-data
として whoami
を実行します。
コマンド:
sudo -u www-data whoami
出力例(例):
www-data
管理作業:安全に設定ファイルを編集(sudoedit / -e)
説明: 直接 vim /etc/hosts
ではなく、sudoedit を使うと権限分離で安全です。
コマンド:
sudo -e /etc/hosts
出力例:
# エディタが起動し、保存すると安全に反映されます
権限の確認(-l)
説明: 自分に許可されているコマンドを一覧表示します。
コマンド:
sudo -l
出力例(例):
User user may run the following commands on host:
(root) NOPASSWD: /usr/bin/systemctl restart nginx
エラー例:sudoers に未登録
説明: sudo
権限がないユーザーが実行するとエラーになります。
コマンド:
sudo ls /root
出力例(例):
user is not in the sudoers file. This incident will be reported.
関連コマンド
su
: 別ユーザーのシェルに切り替える(パスワードが必要)。visudo
:/etc/sudoers
を安全に編集(構文チェック付き)。sudoedit
: 権限分離でファイルを編集するためのフロントエンド(sudo -e
と同等)。pkexec
: polkit 経由で権限昇格(ディストリによって無効化/推奨されない場合あり)。doas
: OpenBSD 由来の軽量代替。Linux 用パッケージも存在。
備考
- 設定ファイル:
sudo
の権限は/etc/sudoers
と/etc/sudoers.d/
で管理します。必ずvisudo
を使って編集し、直接編集は避けます。代表的な記述例:user ALL=(root) /usr/bin/systemctl
。 - パスワードとキャッシュ: 成功後は一定時間(
timestamp_timeout
)は再入力不要です。sudo -k
で失効、sudo -v
で延長できます。端末ごとに管理するtty_tickets
設定もあります。 - 環境変数と PATH: 既定では環境はリセットされます(
env_reset
)。PATH はsecure_path
に上書きされることがあります。必要な変数を保持したい場合は-E
とenv_keep
を併用。 - スクリプトでの利用: 対話不要で失敗させたい場合は
-n
を使います。スクリプト中で都度sudo
を付けるより、最初に root で実行するほうが安全なことが多いです([ $(id -u) -eq 0 ] || { echo "Run as root"; exit 1; }
など)。 - 監査: 実行コマンドはログに記録されます(
/var/log/auth.log
など、環境により異なる)。sudoers
のlog_input
/log_output
で I/O ログを有効化できる実装もあります。 - 互換性: 最小コンテナには
sudo
が入っていない場合があるため、必要ならsu
や root での実行に切り替えるか、パッケージを導入してください。 - セキュリティ注意:
NOPASSWD
は利便性が高い反面、リスクも増します。コマンド単位で絞る・Cmnd_Alias
を活用するなど、最小権限を徹底してください。
参考
man 8 sudo
(コマンド本体)man 5 sudoers
(設定ファイル仕様)man 8 visudo
(安全な編集方法)- 公式ドキュメント(sudo.ws)
コメント