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


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

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

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

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

  1. It reads and parses /etc/sudoers, looks up the invoking user and its permissions,
  2. then prompts the invoking user for a password (normally the user’s password, but it can as well be the target user’s password. Or it can be skipped with NOPASSWD tag),
  3. after that, sudo creates a child process in which it calls setuid() to switch to the target user
  4. next, it executes a shell or the command given as arguments in the child process above.

以下は、Defaultsエントリを使用して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
[email protected]_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

このガイドの範囲では、以下のフォームで最初のタイプのデフォルトにゼロを設定します。パラメータは、フラグ、整数値、文字列、またはリストです。

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

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

1.セキュアパスを設定します

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

  1. Used when a system administrator does not trust sudo users to have a secure PATH environment variable
  2. To separate “root path” and “user path”, only users defined by exempt_group are not affected by this setting.

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

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

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

sudoを実際のttyから呼び出すことができるが、cronやcgi-binスクリプトなどのメソッドを介して呼び出されないようにするには、次の行を追加します。

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はpseudo-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ユーザーに講義するには、以下の講義パラメーターを使用します。

3つの可能な値があります。

  1. always – always lecture a user.
  2. once – only lecture a user the first time they execute sudo command (this is used when no value is specified)
  3. never – never lecture the user.
 
Defaults  lecture="always"

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

Defaults  lecture_file="/path/to/file"

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

ユーザーが間違ったパスワードを入力すると、コマンドラインに特定のメッセージが表示されます。デフォルトのメッセージは「申し訳ありませんが、再試行してください」です。次のように、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ユーザーと共有できます。