sudo コマンド

別のユーザー(通常は特権を持つユーザー)としてコマンドを実行します。

概要

sudo(superuser do)は、デフォルトではスーパーユーザー(root)として、別のユーザーのセキュリティ特権でプログラムを実行することをユーザーに許可します。rootパスワードを共有せずに、/etc/sudoersファイルにリストされているユーザーに限定的なroot権限を付与する方法を提供します。

オプション

-b, --background

コマンドをバックグラウンドで実行します。

$ sudo -b apt update
[1] 12345

-u, --user

デフォルトのターゲットユーザー(root)以外のユーザーとしてコマンドを実行します。

$ sudo -u postgres psql
psql (14.5)
Type "help" for help.

postgres=#

-s, --shell

ユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。

$ sudo -s
root@hostname:~#

-i, --login

ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。

$ sudo -i
root@hostname:~#

-k, --reset-timestamp

ユーザーのキャッシュされた認証情報を無効にします。

$ sudo -k
[sudo] password for user:

-v, --validate

ユーザーのキャッシュされた認証情報を更新し、タイムアウトを延長します。

$ sudo -v
[sudo] password for user:

-l, --list

現在のユーザーに許可された(および禁止された)コマンドを一覧表示します。

$ sudo -l
User user may run the following commands on hostname:
    (ALL : ALL) ALL

使用例

特権を持ってソフトウェアをインストールする

$ sudo apt install nginx
[sudo] password for user: 
Reading package lists... Done
Building dependency tree... Done
...

システム設定ファイルを編集する

$ sudo nano /etc/hosts
[sudo] password for user:

別のユーザーとしてコマンドを実行する

$ sudo -u www-data php /var/www/html/script.php
[sudo] password for user:
Script output...

rootシェルを取得する

$ sudo -i
[sudo] password for user:
root@hostname:~#

ヒント:

sudo !!を使用して前のコマンドをsudoで繰り返す

sudoが必要なコマンドでsudoを使用し忘れた場合は、sudo !!と入力して前のコマンドをsudo特権で繰り返すことができます。

パスワードなしでsudoを設定する

sudo visudoでsudoersファイルを編集し、username ALL=(ALL) NOPASSWD: ALLのような行を追加すると、ユーザーはパスワードを入力せずにsudoコマンドを実行できます。

sudo -Eを使用して環境変数を保持する

sudoでコマンドを実行する必要があるが、現在の環境変数を保持したい場合は、-Eフラグを使用します。

セキュリティの影響を理解する

信頼できるユーザーにのみsudoアクセスを許可し、実行を許可するコマンドには注意してください。無制限のsudoアクセスを持つユーザーは、実質的にシステムを完全に制御できます。

よくある質問

Q1. sudo -ssudo -iの違いは何ですか?

A. sudo -sはroot権限でシェルを起動しますが、現在の環境を維持します。sudo -iはrootとしての完全なログインをシミュレートし、rootの環境を使用します。

Q2. sudo認証はどれくらい持続しますか?

A. デフォルトでは、sudoは認証情報を15分間キャッシュします。その後、再度パスワードを入力する必要があります。

Q3. sudo設定を安全に編集するにはどうすればよいですか?

A. 常にsudo visudoを使用してsudoersファイルを編集してください。このコマンドは保存前に構文エラーをチェックし、自分自身をロックアウトすることを防ぎます。

Q4. 他のユーザーがsudoで実行したコマンドを確認できますか?

A. はい、sudoはすべてのコマンドをシステムログに記録します。通常は/var/log/auth.logまたは/var/log/secureに記録されます。

Q5. パスワードの入力を求められずにrootとしてコマンドを実行するにはどうすればよいですか?

A. 特定のコマンドまたはすべてのコマンドに対してNOPASSWDオプションでsudoersファイルを設定する必要があります。

参考文献

https://www.sudo.ws/docs/man/sudo.man/

改訂履歴