ウェブサイト検索

Linux で「sudo」を設定するための 10 の便利な Sudoers 構成


Linux およびその他の Unix 系オペレーティング システムでは、root ユーザーのみがすべてのコマンドを実行し、インストールと更新、パッケージの削除、ユーザーとグループの作成、重要なシステムの変更など、システム上で特定の重要な操作を実行できます。設定ファイルなど。

ただし、root ユーザーの役割を引き受けるシステム管理者は、sudo コマンドといくつかの設定を使用して、他の通常のシステム ユーザーがいくつかのコマンドを実行したり、上記の操作を含む多くの重要なシステム操作を実行したりすることを許可できます。

あるいは、システム管理者が root ユーザーのパスワードを共有し (これは推奨される方法ではありません)、通常のシステム ユーザーが su コマンドを介して root ユーザー アカウントにアクセスできるようにすることもできます。

sudo を使用すると、セキュリティ ポリシーで指定されているように、許可されたユーザーが root (または別のユーザー) としてコマンドを実行できます。

  1. /etc/sudoers を読み取って解析し、呼び出し元のユーザーとその権限を調べます。
  2. 次に、呼び出し元のユーザーにパスワードの入力を求めます (通常はユーザーのパスワードですが、ターゲット ユーザーのパスワードでも構いません。または、NOPASSWD タグを使用してスキップできます)。
  3. その後、sudo は子プロセスを作成し、その中で setuid() を呼び出してターゲット ユーザーに切り替えます。
  4. 次に、シェルまたは上記の子プロセスで引数として指定されたコマンドを実行します。

以下は、デフォルトエントリを使用して sudo コマンドの動作を変更するための 10 個の /etc/sudoers ファイル構成です。

sudo cat /etc/sudoers
#
This file MUST be edited with the 'visudo' command as root.
#
Please consider adding local content in /etc/sudoers.d/ instead of
directly modifying this file.
#
See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults	logfile="/var/log/sudo.log"
Defaults	lecture="always"
Defaults	badpass_message="Password is wrong, please try again"
Defaults	passwd_tries=5
Defaults	insults
Defaults	log_input,log_output

デフォルトエントリの種類

Defaults                parameter,   parameter_list     #affect all users on any host
Defaults@Host_List      parameter,   parameter_list     #affects all users on a specific host
Defaults:User_List      parameter,   parameter_list     #affects a specific user
Defaults!Cmnd_List      parameter,   parameter_list     #affects  a specific command 
Defaults>Runas_List     parameter,   parameter_list     #affects commands being run as a specific user

このガイドの範囲では、以下の形式の最初のタイプのデフォルトに絞り込みます。パラメータは、フラグ、整数値、文字列、リストのいずれかです。

フラグは暗黙的にブール値であり、'!' 演算子を使用してオフにすることができ、リストには 2 つの追加の代入演算子、+= (リストに追加) と += (リストに追加) があることに注意してください。 -= (リストから削除)。

Defaults     parameter
OR
Defaults     parameter=value
OR
Defaults     parameter -=value   
Defaults     parameter +=value  
OR
Defaults     !parameter       

1. 安全なパスを設定する

これは sudo で実行されるすべてのコマンドに使用されるパスであり、次の 2 つの重要性があります。

  1. システム管理者が sudo ユーザーが安全な PATH 環境変数を持っていることを信頼していない場合に使用されます。
  2. 「root path 」と「user path 」を分けるため、exempt_group で定義されたユーザーのみがこの設定の影響を受けません。

これを設定するには、次の行を追加します。

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2. TTY ユーザーログインセッションで sudo を有効にする

croncgi-bin スクリプトなどのメソッドではなく、実際の tty から sudo を呼び出せるようにするには、次の行を追加します。

Defaults  requiretty   

3. pty を使用して Sudo コマンドを実行する

攻撃者が sudo を使用して悪意のあるプログラム (ウイルスやマルウェアなど) を実行することが何度かあります。これにより、メイン プログラムの実行が終了してもユーザーの端末デバイスに残るバックグラウンド プロセスが再びフォークされます。

このようなシナリオを回避するには、I/O ログがオンになっているかどうかに関係なく、use_pty パラメータを使用して、psuedo-pty からのみ他のコマンドを実行するように sudo を設定できます。以下に続きます:

Defaults  use_pty

4. Sudo ログ ファイルを作成する

デフォルトでは、sudo は syslog(3) を通じてログを記録します。ただし、カスタム ログ ファイルを指定するには、次のように logfile パラメーターを使用します。

Defaults  logfile="/var/log/sudo.log"

ホスト名と 4 桁の年をカスタム ログ ファイルに記録するには、次のように log_host パラメータと log_year パラメータをそれぞれ使用します。

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

以下はカスタム sudo ログ ファイルの例です。

5. Sudo コマンドの入出力をログに記録する

log_input パラメータと log_output パラメータを使用すると、sudo が擬似 tty でコマンドを実行し、すべてのユーザー入力と画面に送信されたすべての出力をログに記録できるようになります。

デフォルトの I/O ログ ディレクトリは /var/log/sudo-io で、セッション シーケンス番号がある場合は、このディレクトリに保存されます。 iolog_dir パラメータを通じてカスタム ディレクトリを指定できます。

Defaults   log_input, log_output

%{seq} など、いくつかのエスケープ シーケンスがサポートされています。これは、000001 などの単調増加する Base-36 シーケンス番号に展開され、2 桁ごとに新しいディレクトリが形成されます。以下の例のように、00/00/01:

cd /var/log/sudo-io/
ls
cd  00/00/01
ls
cat log

cat コマンドを使用して、そのディレクトリ内の残りのファイルを表示できます。

6. Sudo ユーザーをレクチャーする

システムでのパスワードの使用法について sudo ユーザーにレクチャーするには、以下のように lecture パラメータを使用します。

可能な値は 3 つあります。

  1. 常に – 常にユーザーに説教します。
  2. 1 回 – 初めて sudo コマンドを実行するときにのみユーザーにレクチャーします (値が指定されていない場合に使用されます)
  3. 決して – ユーザーに説教をしないでください。
 
Defaults  lecture="always"

さらに、lecture_file パラメータを使用してカスタムのレクチャー ファイルを設定し、ファイルに適切なメッセージを入力することもできます。

Defaults  lecture_file="/path/to/file"

7. 間違った sudo パスワードを入力したときにカスタム メッセージを表示する

ユーザーが間違ったパスワードを入力すると、コマンド ラインに特定のメッセージが表示されます。デフォルトのメッセージは「sorry, try again」ですが、次のように badpass_message パラメータを使用してメッセージを変更できます。

Defaults  badpass_message="Password is wrong, please try again"

8. sudo パスワード試行制限を増やす

パラメータ passwd_tries は、ユーザーがパスワードの入力を試行できる回数を指定するために使用されます。

デフォルト値は 3 です。

Defaults   passwd_tries=5 

passwd_timeout パラメータを使用してパスワードのタイムアウト (デフォルトは 5 分) を設定するには、以下の行を追加します。

Defaults   passwd_timeout=2

9. 間違ったパスワードを入力すると Sudo に侮辱される

ユーザーが間違ったパスワードを入力した場合、sudo は insults パラメーターを使用して端末に侮辱を表示します。これにより、badpass_message パラメータが自動的にオフになります。

Defaults  insults 

詳細: 間違ったパスワードを入力すると Sudo があなたを侮辱します

10. Sudo 設定の詳細

さらに、sudo コマンドの設定について詳しくは、「su と sudo の違い」および「Linux で sudo を設定する方法」を参照してください。

それでおしまい!以下のコメントセクションを通じて、他の便利な sudo コマンド設定やトリックやヒントを Linux ユーザーと共有できます。