見出し画像

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

/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 つの重要性があります。

  1. システム管理者が、sudo ユーザーが安全な PATH 環境変数を持つことを信頼していない場合に使用されます。

  2. 「ルート パス」と「ユーザー パス」を分離するために、免除グループで定義されたユーザーのみがこの設定の影響を受けません。

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

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 パラメーターを使用して、疑似 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 ログ ファイルの例です。

カスタム 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 つあります。

  1. always – 常にユーザーに説明します。

  2. once – ユーザーが最初に sudo コマンドを実行したときにのみレクチャーします (これは、値が指定されていない場合に使用されます)

  3. 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 
Sudo パスワードの試行回数を増やす

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

Defaults   passwd_timeout=2

9. 間違ったパスワードを入力すると Sudo にいじられる

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

Defaults  insults 
Let’s Sudo Insult You When Enter Wrong Password

続きを読む間違ったパスワードを入力すると、Sudoがあなたをいられます

10. Sudo 設定の詳細

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

That it!
以下のコメントセクションを介して、他の便利な sudo コマンド構成またはトリックとヒントを Linuxユーザーと共有できます。

2022/08/31 IT情報&技術アウトプット
エンジニアファーストの会社
株式会社CRE-CO

この記事が気に入ったらサポートをしてみませんか?