SUDO.CONF(5) | File Formats Manual | SUDO.CONF(5) |
sudo.conf - sudo フロントエンドの設定
sudo.conf ファイルは、sudo フロントエンドの設定に使用される。 セキュリティポリシー・プラグイン、入出力ロギング・プラグイン、 デバッグ・フラグの指定をはじめ、 プラグインが何かにはかかわりののない (プログラムやライブラリの) パス名や、 sudo フロントエンドのその他の設定も、ここで指定することができる。
sudo.conf では、次の命令 (directive) が使用できる。各命令については、 以下で詳しく説明する。
パウンド記号 ('#') は、コメントであることを示すために使用される。 コメントを示す記号とそれに続くテキストは、行末に至るまで無視される。
長い行は、行末にバックスラッシュ ('\') を置くことで、継続することができる。 行頭にあるホワイト・スペースは、行の継続を示す記号が使われている場合でも、 行頭から取り除かれることに注意していただきたい。
コメント行以外でも、Plugin, Path, Debug, Set で始まっていない行は、無視される。 エラーや警告メッセージを出すこともない。
sudo.conf ファイルの解析は、常に "C" ロケールで行われる。
sudo はセキュリティポリシーと入出力のロギングについて、プラグイン方式をサポートしている。 従って、サードパーティは、sudo のフロントエンドとシームレスに協働するポリシー・プラグインや、 入出力ロギング・プラグインを独自に開発して、配布することができる。 プラグインは、sudo.conf の記述に基づいて、動的にロードされる。
Plugin 行は、キーワード Plugin に始まり、symbol_name と path が続く。 path は、プラグインを含む動的共有オブジェクトへのパスである。 symbol_name は、プラグインに含まれる policy_plugin 構造体や io_plugin 構造体のシンボル名である。path は絶対パスでも相対パスでもよい。 相対パスの場合は、Path 命令の plugin_dir で指定したディレクトリを基点とする相対パスであり、 デフォルトの基点は /usr/local/libexec/sudo である。すなわち、
Plugin sudoers_policy sudoers.so
は、次のものと同じだということだ。
Plugin sudoers_policy /usr/local/libexec/sudo/sudoers.so
プラグインが動的な共有オブジェクトとしてインストールされているのではなく、 sudo のバイナリに静的に組み込まれている場合は、 path にディレクトリまで指定してはいけない。 ファイルシステム中に実際に存在するわけではないからだ。 すなわち、こんなふうに指定する。
Plugin sudoers_policy sudoers.so
sudo 1.8.5 以降では、path の後ろにパラメータを付けると、それは、 プラグインの open 関数に引き数として渡されるようになっている。たとえば、 コンパイル時に指定した sudoers ファイルのデフォルトのモードを変更するには、 次のようにする。
Plugin sudoers_policy sudoers.so sudoers_mode=0440
使用できる引き数のリストについては、sudoers(5) のマニュアルをご覧いただきたい。
一つの動的な共有オブジェクトが、 それぞれ違ったシンボル名を持つ複数のプラグインを含んでいても構わない。 共有オブジェクト・ファイルは、uid 0 の所有でなければならず、 また、所有者のみ書き込み可能でなければならない。 同時に複数のポリシーがあると、曖昧さが生じるので、 ポリシー・プラグインは一つしか指定できない。 この制限は 入出力プラグインには当てはまらない。
sudo.conf ファイルが存在しない場合や、存在しても Plugin 行を含まない場合は、 デフォルトのセキュリティポリシーとして sudoers プラグインが使用されることになる。 入出力ロギングにも (ポリシーによって有効になっていれば)、 sudoers プラグインが使用される。これは次の記述と同じことである。
Plugin sudoers_policy sudoers.so Plugin sudoers_io sudoers.so
sudo プラグインの仕組みについてもっと詳しい情報が必要なら、 sudo_plugin(5) のマニュアルをご覧になっていただきたい。
Path 行は、キーワード Path に始まり、設定するパスの名称とその値が続く。 たとえば、次のようにだ。
Path noexec /usr/local/libexec/sudo/sudo_noexec.so Path askpass /usr/X11R6/bin/ssh-askpass
パス名が (訳注: パスの名称ではなく、パスの値が) 指定されていない場合は、 その設定に依存する機能を無効化することになる。 パス設定の無効化をサポートしているのは、バージョン 1.8.16 以上の sudo だけである。
以下に挙げるような、 プラグインが何かにはかかわりのない (プログラムやライブラリの) パスを /etc/sudo.conf で設定することができる。
sudo.conf ファイルでは、以下に挙げるフロントエンドの設定も行うことができる。
Set disable_coredump false
最近のオペレーティング・システムでは、どのシステムでも、 sudo のような setuid プロセスのコアダンプについて各種の制限を設けているので、 このオプションを有効にしても、セキュリティが弱体化することはない。 sudo のコアファイルを実際に得るためには、 たぶん setuid プロセスに対するコアダンプを有効にする必要があるだろう。 BSD や Linux のシステムでは、それは sysctl コマンドで行われる。 Solaris では、coreadm コマンドがコアダンプの動作設定に使用される。
この設定は、バージョン 1.8.4 以降の sudo でしか使用できない。
しかしながら、ユーザが上限を越える数のグループのメンバーになることも可能である -- 上限を越えた分は、そのユーザについてカーネルが返すグループのリストに含まれないだけのことだ。 バージョン 1.8.7 以降の sudo では、 ユーザについてカーネルが返すグループのリストが所属グループの最大数に達しているときは、 sudo はグループ・データベースを直接調べて、グループのリストを決定するようになっている。 そうすることによって、ユーザが所属グループの最大数よりも多くのグループのメンバーであるときも、 セキュリティポリシーがグループ名によるマッチングを行うことができるようにしているのである。
group_source の設定によって、管理者がこのデフォルトの動作を変更することができる。 group_source に対して使用できる値は以下のものである。
たとえば、sudo が、ユーザについてカーネルが返す static なグループのリストのみを使うようにしたかったら、以下のように指定する。
Set group_source static
この設定は、バージョン 1.8.7 以降の sudo でしか使用できない。
この設定は、バージョン 1.8.7 以降の sudo でしか使用できない。
Set probe_interfaces false
この設定は、バージョン 1.8.10 以降の sudo でしか使用できない。
バージョン 1.8.4 以上の sudo は、デバッグのための柔軟な枠組みに対応しており、 問題が生じたときに、sudo の内部で何が起きているかを突き止めるために、 それを利用することができる。
デバッグ行の構成は、Debug というキーワードに始まり、 デバッグ対象 (sudo, visudo, sudoreplay, sudoers) のプログラム名、またはプラグイン名と、デバッグファイル名がそれに続き、 最後にコンマで区切ったデバッグ・フラグのリストが来るという形になっている。 デバッグ・フラグのシンタクスは、sudo と sudoers プラグインでは、 subsystem@priority という書式を用いるが、コンマ (',') を含まないかぎり、別の書式を使用するプラグインがあっても構わない。
一例を挙げよう。
Debug sudo /var/log/sudo_debug all@warn,plugin@info
上記のように指定すると、warn レベル以上のすべてのデバッグ情報に加えて、 プラグイン・サブシステムについては、info レベル以上の情報もログに記録することになる。
sudo 1.8.12 以来、一つのプログラムについて複数の Debug 行が指定できるようになっている。 sudo のそれ以前のバージョンでは、1 プログラムにつき 1 行の Debug 行しかサポートしていなかった。sudo 1.8.12 からは、 プラグイン独自の Debug 行もサポートされるようになり、そうした行のマッチングは、 ロードされているプラグインのベースネーム (たとえば、sudoers.so)、 またはプラグインの絶対パス名によって行われる (訳注: 言い換えれば、 プラグイン独自の Debug 行では、プログラム名/プラグイン名の位置に Plugin 行における path の部分を指定するということだろう)。以前のバージョンでは、 sudoers プラグインは、sudo フロントエンドと同じ Debug 行を共有しており、別の設定をすることができなかった。
次の priority (重大度) が使用できる。深刻なものから挙げると、 crit, err, warn, notice, diag, info, trace, debug である。 ある priority を指定すると、それよりも深刻なすべての priority も指定したことになる。 たとえば、notice という priority を指定すれば、 notice レベル以上のデバッグ情報がログに記録されるわけである。
trace と debug の priority では、ファンクション・コールのトレースも行われ、 関数に入ったときと関数から戻ったときのログも記録される。たとえば、 次のトレースは、src/sudo.c にある get_user_groups() 関数に対するものである。
sudo[123] -> get_user_groups @ src/sudo.c:385 sudo[123] <- get_user_groups @ src/sudo.c:429 := groups=10,0,5
関数に入ったときは、右矢印 '->' で示され、プログラム名、プロセス ID、 関数名、ソースファイルと行番号が記録される。 関数から戻ったときは、左矢印 '<-' で示され、同じ情報に加えて、 返り値が記録される。上記の場合、返り値は文字列である。
sudo フロントエンドでは、以下のサブシステムが使用できる。
sudoers(5) プラグインがサポートしているサブシステムには、これ以外のものもある。
# # Default /etc/sudo.conf file # # Format: # Plugin plugin_name plugin_path plugin_options ... # Path askpass /path/to/askpass # Path noexec /path/to/sudo_noexec.so # Debug sudo /var/log/sudo_debug all@warn # Set disable_coredump true # # plugin_path が絶対パスでない場合は、/usr/local/libexec/sudo からの # 相対パスである。 # plugin_name は、プラグイン中の、プラグインのインターフェース構造を # 含むグローバル・シンボルと同じものである。 # plugin_options を指定するかしないかは、任意である。 # # Plugin 行が存在しない場合、デフォルトの sudoers プラグインが # 使用される。 Plugin sudoers_policy sudoers.so Plugin sudoers_io sudoers.so # # Sudo askpass: # # askpass ヘルパー・プログラムを指定すると、sudo の "-A" オプションで # 使用できるように、グラフィカルなパスワード・プロンプトを用意する # ことができる。sudo は、自前の askpass プログラムを配布していないが、 # たとえば、OpenSSH の askpass を使用することが可能だ。 # # OpenSSH askpass を使用する。 #Path askpass /usr/X11R6/bin/ssh-askpass # # Gnome の OpenSSH askpass を使用する。 #Path askpass /usr/libexec/openssh/gnome-ssh-askpass # # Sudo noexec: # # ライブラリ関数 execv(), execve(), fexecve() のダミー版 (単にエラー # を返すだけの関数) が入っている共有ライブラリのパス。この指定は、 # <LD_PRELOAD> やそれに相当するものをサポートしているシステムで # "noexec" 機能を実現するために使用される。たいていの場合、 # コンパイル時に組み込まれた値で十分であり、変更するのは、 # sudo_noexec.so ファイルをリネームしたり、移動したりしたときのみに # するべきである。 # #Path noexec /usr/local/libexec/sudo/sudo_noexec.so # # Core dumps: # # sudo はデフォルトでは、自己を実行中のコアダンプを抑止している # (指定されたコマンドを実行するときに、コアダンプを有効にし直す # のだ)。sudo 自体の問題をデバッグするために、コアダンプを有効に # 戻したいならば、"disable_coredump" を false にすればよい。 # #Set disable_coredump false # # User groups: # # sudo は、ユーザが属するグループのリストをポリシー・プラグインに # 引き渡す。ユーザの所属グループが、所属グループの最大数 (たいていは # 16) に達している場合は、sudo は、そのユーザが所属するグループを # すべて取得するため、直接グループ・データベースに問い合わせを行う。 # # システムによっては、この動作は負担がかかることがあるので、設定に # よって変更できるようになっている。"group_source" で設定できる # 値には、三つのものがある。 # static - ユーザが属するグループのリストにカーネルが返したものを # 使用する。 # dynamic - グループのリストを知るために、グループ・データベースに # 問い合わせる。 # adaptive - ユーザの所属グループが、所属グループの最大数より少ない # ときは、カーネルの返すリストを使う。さもなければ、 # グループ・データベースに問い合わせる。 # #Set group_source static
sudo の簡単な履歴については、sudo の配布に含まれている HISTORY ファイルをご覧いただきたい。 (https://www.sudo.ws/history.html)
多数の人々が長年に渡って sudo の開発に携わってきた。 当バージョンは主として次の者が書いたコードからできている。
sudo の開発に貢献してくださった方々の詳細なリストについては、 配布物中の CONTRIBUTORS ファイルをご覧になっていただきたい。 (https://www.sudo.ws/contributors.html)
sudo にバグを発見したと思ったら、https://www.sudo.ws/ にアクセスして、バグレポートを提出していただきたい。
ある程度の無料サポートが sudo-users メーリングリストを通して利用できる。 購読やアーカイブの検索には、次の URL を御覧になるとよい。 https://www.sudo.ws/mailman/listinfo/sudo-users
sudo は「現状のまま」提供される。 明示的な、あるいは黙示的ないかなる保証も、 商品性や特定目的への適合性についての黙示的な保証を含め、 またそれのみに止まらず、これを否認する。詳細な全文については、 sudo と一緒に配布されている LICENSE ファイルや、 次の Web ページをご覧いただきたい。 https://www.sudo.ws/license.html
June 15, 2016 | Sudo 1.8.17 |