Linuxおよびその他のUnix系オペレーティングシステムでは、rootユーザーのみがすべてのコマンドを実行し、インストールやアップデート、パッケージの削除、ユーザーとグループの作成、重要なシステム構成ファイルの変更など、システム上で特定の重要な操作を行うことができます。
ただし、rootユーザーの役割を担うシステム管理者は、sudoコマンドといくつかの設定を使用して、他の通常のシステムユーザーにも一部のコマンドを実行させ、上記で言及された重要なシステム操作を含む多くの操作を実行させることができます。
また、システム管理者は、通常のシステムユーザーがsuコマンドを介してrootユーザーアカウントにアクセスできるように、rootユーザーパスワードを共有することもできます(これは推奨されない方法です)。
sudoは、許可されたユーザーがセキュリティポリシーで指定されたようにroot(または他のユーザー)としてコマンドを実行できるようにします。
- sudoは/etc/sudoersを読み込み、呼び出し元のユーザーとその権限を調べ、
- その後、呼び出し元のユーザーにパスワードを要求します(通常はユーザーのパスワードですが、対象ユーザーのパスワードでもかまいません。またはNOPASSWDタグでスキップすることもできます)。
- その後、sudoはターゲットユーザーに切り替えるためにsetuid()を呼び出す子プロセスを作成します。
- 次に、上記の子プロセスでシェルまたは引数として与えられたコマンドを実行します。
以下は、/etc/sudoersファイルの構成を変更してsudoコマンドの動作を変更するための10の設定です。
$ 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エントリの種類
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つの重要な点があります:
- システム管理者がsudoユーザーにセキュアなPATH環境変数を持っていないと信頼していない場合に使用されます
- 「ルートパス」と「ユーザーパス」を区別するために、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コマンドを実行する
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_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
次のようなエスケープシーケンスがサポートされています。%{seq}
は、毎回の二桁が新しいディレクトリを形成するために使用される、000001などの単調に増加する基数36のシーケンス番号に展開されます。例えば、以下のように00/00/01です:
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log

そのディレクトリの残りのファイルは、catコマンドを使用して表示できます。
6. Sudoユーザーへの講義
システムでのパスワードの使用についてsudoユーザーに講義するには、以下のようにlectureパラメータを使用します。
それには3つの可能な値があります:
- always – ユーザーに常に講義します。
- 一度 – ユーザーがsudoコマンドを実行する最初のときにのみ講義する(値が指定されていない場合に使用される)
- 決して – ユーザーに講義を行わない。
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は侮辱を端末に表示します。これにより、badpass_messageパラメータが自動的にオフになります。
Defaults insults

もっと詳しく:パスワードが間違って入力された場合にsudoが侮辱する設定
10. さらにsudo設定を学ぶ
以下のテキストを日本語に翻訳します。
さらに、sudoコマンドの設定についての詳細は、suとsudoの違いとLinuxでsudoを設定する方法を読むことで学ぶことができます。
以上です!他の有用なsudoコマンドの設定やLinuxのヒントやトリックを、コメント欄で共有してください。
Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/