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

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

ただし、rootユーザーの役割を担うシステム管理者は、sudoコマンドといくつかの設定を使用して、他の通常のシステムユーザーにも一部のコマンドを実行させ、上記で言及された重要なシステム操作を含む多くの操作を実行させることができます。

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

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

  1. sudoは/etc/sudoersを読み込み、呼び出し元のユーザーとその権限を調べ、
  2. その後、呼び出し元のユーザーにパスワードを要求します(通常はユーザーのパスワードですが、対象ユーザーのパスワードでもかまいません。またはNOPASSWDタグでスキップすることもできます)。
  3. その後、sudoはターゲットユーザーに切り替えるためにsetuid()を呼び出す子プロセスを作成します。
  4. 次に、上記の子プロセスでシェルまたは引数として与えられたコマンドを実行します。

以下は、/etc/sudoersファイルの構成を変更してsudoコマンドの動作を変更するための10の設定です。

$ sudo cat /etc/sudoers
/etc/sudoers File
#
# 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エントリの種類

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

このガイドの範囲では、以下の形式の最初のDefaultsに絞り込みます。パラメータはフラグ、整数値、文字列、またはリストである可能性があります。

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

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

1. セキュアPATHを設定

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

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

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

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

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

実際のttyからsudoを呼び出すことを有効にするには、croncgi-binスクリプトなどの方法ではなく、次の行を追加します:

Defaults  requiretty   

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

A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.

このようなシナリオを回避するために、I/Oログ記録がオンまたはオフであっても、use_ptyパラメータを使用してsudoを他のコマンドからのみ疑似ptyで実行するように構成できます。次のように:

Defaults  use_pty

4. Sudoログファイルの作成

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

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

ホスト名と四桁の年をカスタムログファイルに記録するには、それぞれ以下のようにlog_hostlog_yearパラメータを使用します:

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

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

Create Custom Sudo Log File

5. Sudoコマンドの入出力を記録

log_inputおよびlog_outputパラメータを使用すると、sudoは疑似ttyでコマンドを実行し、すべてのユーザー入力および画面に送信されたすべての出力を記録します。

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

Defaults   log_input, log_output

次のようなエスケープシーケンスがサポートされています。%{seq}は、毎回の二桁が新しいディレクトリを形成するために使用される、000001などの単調に増加する基数36のシーケンス番号に展開されます。例えば、以下のように00/00/01です:

$ cd /var/log/sudo-io/
$ ls
$ cd  00/00/01
$ ls
$ cat log
Log sudo Input Output

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

6. Sudoユーザーへの講義

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

それには3つの可能な値があります:

  1. always – ユーザーに常に講義します。
  2. 一度 – ユーザーがsudoコマンドを実行する最初のときにのみ講義する(値が指定されていない場合に使用される)
  3. 決して – ユーザーに講義を行わない。
 
Defaults  lecture="always"

さらに、lecture_fileパラメータを使用してカスタム講義ファイルを設定できます。適切なメッセージをファイルに入力してください:

Defaults  lecture_file="/path/to/file"
Lecture Sudo Users

7. sudoパスワードが間違って入力された場合にカスタムメッセージを表示

ユーザーが間違ったパスワードを入力すると、コマンドラインに特定のメッセージが表示されます。デフォルトのメッセージは「すみません、もう一度お試しください」ですが、badpass_messageパラメータを使用してメッセージを変更できます:

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

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

passwd_triesパラメータは、ユーザーがパスワードを入力しようとする回数を指定するために使用されます。

デフォルト値は3です:

Defaults   passwd_tries=5 
Increase Sudo Password Attempts

passwd_timeoutパラメータを使用してパスワードのタイムアウトを設定する場合(デフォルトは5分)、次の行を追加してください:

Defaults   passwd_timeout=2

9. パスワードが間違って入力された場合にsudoが侮辱する設定

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

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

もっと詳しくパスワードが間違って入力された場合にsudoが侮辱する設定

10. さらにsudo設定を学ぶ

以下のテキストを日本語に翻訳します。

さらに、sudoコマンドの設定についての詳細は、suとsudoの違いとLinuxでsudoを設定する方法を読むことで学ぶことができます。

以上です!他の有用なsudoコマンドの設定やLinuxのヒントやトリックを、コメント欄で共有してください。

Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/