Linuxで「sudo」を設定するための10個便利なsudoers構成
Linux やその他の Unix ライクなオペレーティング システムでは、rootユーザーのみがすべてのコマンドを実行し、インストールと更新、パッケージの削除、ユーザーとグループの作成、重要なシステム構成ファイルの変更など、システム上で特定の重要な操作を実行できます。
ただし、root ユーザーの役割を引き受けるシステム管理者は、sudo コマンドといくつかの構成を使用して、他の通常のシステム ユーザーがいくつかのコマンドを実行し、上記のものを含む多くの重要なシステム操作を実行することを許可できます。
または、システム管理者が root ユーザーのパスワードを共有することもできます (これは推奨される方法ではありません)。これにより、通常のシステム ユーザーがsuコマンドを介して root ユーザー アカウントにアクセスできるようになります。
sudoは、セキュリティ ポリシーで指定されているように、許可されたユーザーが root (または別のユーザー) としてコマンドを実行できるようにします。
/etc/sudoersを読み取って解析し、呼び出し元のユーザーとその権限を調べます。
次に、呼び出し元のユーザーにパスワードの入力を求めます (通常はユーザーのパスワードですが、ターゲット ユーザーのパスワードでもかまいません。または、NOPASSWD タグでスキップできます)。
その後、sudo はsetuid()を呼び出してターゲット ユーザーに切り替える子プロセスを作成します。
次に、上記の子プロセスで引数として指定されたシェルまたはコマンドを実行します。
以下は、デフォルトエントリを使用してsudoコマンドの動作を変更するための10 個の/etc/sudoersファイル構成です。
$ sudo cat /etc/sudoers
/etc/sudoers Fil
#
# 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
Types of Defaults Entries
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 つの重要性があります。
システム管理者が、sudo ユーザーが安全な PATH 環境変数を持つことを信頼していない場合に使用されます。
「ルート パス」と「ユーザー パス」を分離するために、免除グループで定義されたユーザーのみがこの設定の影響を受けません。
設定するには、次の行を追加します。
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. TTY ユーザー ログイン セッションで sudo を有効にする
cronやcgi-binスクリプトなどの方法ではなく、実際のttyから sudo を呼び出せるようにするには、次の行を追加します。
Defaults requiretty
3. pty を使用して Sudo コマンドを実行する
場合によっては、攻撃者が sudo を使用して悪意のあるプログラム (ウイルスやマルウェアなど) を実行することができます。これにより、メイン プログラムの実行が終了した後でも、ユーザーの端末デバイスに残るバックグラウンド プロセスが再びフォークされます。
このようなシナリオを回避するには、次のように、I/O ロギングがオンになっているかどうかに関係なく、use_pty パラメーターを使用して、疑似 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
000001 のような単調に増加するベース 36 シーケンス番号に展開される %{seq} など、いくつかのエスケープ シーケンスがサポートされています。 以下の例のように 00/00/01:
$ cd /var/log/sudo-io/
$ ls
$ cd 00/00/01
$ ls
$ cat log
cat コマンドを使用して、そのディレクトリ内の残りのファイルを表示できます。
6. Sudo ユーザーへのレクチャー
システムでのパスワードの使用法について sudo ユーザーに説明するには、以下のようにレクチャーパラメーターを使用します。
可能な値は 3 つあります。
always – 常にユーザーに説明します。
once – ユーザーが最初に sudo コマンドを実行したときにのみレクチャーします (これは、値が指定されていない場合に使用されます)
never – ユーザーに教えることはありません。
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 パラメータを使用して端末に insult を表示します。
そのため、 badpass_messageパラメータが自動的にオフになります。
Defaults insults
続きを読む:間違ったパスワードを入力すると、Sudoがあなたをいられます
10. Sudo 設定の詳細
sudoコマンドの構成については、「su と sudo の違い」および「Linux で sudo を構成する方法」を参照してください。
That it!
以下のコメントセクションを介して、他の便利な sudo コマンド構成またはトリックとヒントを Linuxユーザーと共有できます。