web-dev-qa-db-ja.com

sudoersで単一のコマンドのrequirettyを無効にする方法は?

スクリプト内でSudoを実行できるようにrequirettyを無効にしたいのですが、すべてではなく1つのコマンドに対してのみ無効にしたいと思います。 sudoers構成内でそれは可能ですか?

47
artbristol

特定のユーザーまたは特定のコマンド(または特定のrun-as-userまたはHost)のrequirettyなどのオプションのデフォルト設定をオーバーライドできますが、特定のコマンドを特定のコマンドとして実行する場合はオーバーライドできませんユーザー。

たとえば、requirettyがcompile-defaultオプションで設定されているとすると、次のsudoersファイルにより、artbristolbobの両方が/path/to/programをrootとして実行できるようになりますスクリプト。 artbristolはパスワードを必要としませんが、bobはパスワードを入力する必要があります(おそらくtty_ticketsがオフで、bobが最近一部の端末でパスワードを入力しました)。

artbristol ALL = (root) NOPASSWD: /path/to/program
bob ALL = (root) /path/to/program
Defaults!/path/to/program !requiretty

特定の引数を持つコマンドの設定を変更する場合は、コマンドエイリアスを使用する必要があります(これは構文上の制限です)。たとえば、次のフラグメントでは、artbristolがスクリプトで/path/to/program --optionを実行できるようにしますが、他の引数を指定した/path/to/programは実行できません。

Cmnd_Alias MYPROGRAM = /path/to/program --option  
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty

このようなもの:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty
31
JRFerguson

/etc/sudoers.dのファイルを使用すると、問題なく動作することがわかりました。確認は非常に簡単です。

まず、次の内容で/etc/sudoers.d/01buildを作成しました。

build    ALL=(ALL)    NOPASSWD:/bin/date
Defaults:build !requiretty

次に、それが機能することをテストしました:

ssh Host Sudo -n /bin/date
Mon Nov 16 16:04:27 CST 2015

次に、/etc/sudoers.d/01buildを変更してDefaults:行を削除しました。その後、次のようになります。

ssh Host Sudo -n /bin/date
Sudo: sorry, you must have a tty to run Sudo
4