ウェブサイト検索

Linuxにおける'sudo'設定のための10個の便利なsudoers設定


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

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

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

sudo は、許可されたユーザーがセキュリティポリシーによって指定されたように、ルート(または別のユーザー)としてコマンドを実行することを許可します:

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

以下は、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
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. 安全な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を呼び出せるようにし、cronやcgi-binスクリプトなどの方法からは呼び出せないようにするには、以下の行を追加します:

Defaults  requiretty   

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

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

このようなシナリオを避けるために、use_pty パラメーターを使用して、I/O ロギングがオンまたはオフであっても、他のコマンドを擬似 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がコマンドを擬似端末で実行し、ユーザーの入力と画面に送信されたすべての出力を順次ログに記録できるようにします。

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

Defaults   log_input, log_output

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

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

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

6. 講義 スードユーザー

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

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

  1. 常にユーザーに講義を行う。
  2. 一度 - ユーザーがsudoコマンドを初めて実行したときにのみ講義を行います(これは値が指定されていない場合に使用されます)
  3. 決してユーザーに講義をしてはいけません。
 
Defaults  lecture="always"

さらに、lecture_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ユーザーと共有することができます。

関連記事: