私のスクリプトでsudoを使用できるようにrequirettyを無効にしたいのですが、すべてのコマンドに対して無効にするよりも、単一のコマンドに対して無効にすることをお勧めします。 sudoers設定でこれは可能ですか?
答え1
特定のユーザーや特定のコマンド(または特定の実行中のユーザーまたはホスト)などのオプションのデフォルト設定を上書きできますが、特定のユーザーとして実行される特定のrequiretty
コマンドについては上書きできません。
たとえば、次のファイルはrequiretty
コンパイルのデフォルトオプションに設定されていると仮定してスクリプトでrootとしてsudoers
許可され実行されます。パスワードは必要なく、むしろパスワードを入力する必要があります(おそらく一部の端末で閉じられ、最近入力された可能性があります)。artbristol
bob
/path/to/program
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
答え2
このような:
myuser ALL=(ALL) NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser !requiretty
答え3
私はそれが私にとって効果的であることを知りました/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