suがパスワードを求めるのを防ぐ

suがパスワードを求めるのを防ぐ

deployJava(ユーザーとして実行されるJVM tomcat)で次のコマンドを実行しようとしています。

sudo -u deploy /path/to/my/bash/script.sh PARAM1 PARAM2

私のsudoersファイルには次のものが含まれています。

tomcat ALL=(deploy) NOPASSWD: /path/to/my/bash/script.sh *

しかし、私はsorry, you must have a tty to run sudoJavaアプリケーションに入りました。そのため、呼び出しを次のように変更しました。

su --session-command="/path/to/my/bash/script.sh PARAM1 PARAM2" deploy

しかし、今はJavaに陥っていますstandard in must be a tty

確認して次の操作を行うと、sudoパスワードの入力を求められませんが、suパスワードの入力を求められます。

[root@mybox bin]# sudo su tomcat
[tomcat@mybox bin]$ sudo -u deploy /path/to/my/bash/script.sh PARAM1 PARAM2
output of script with PARAM1 PARAM2
[tomcat@mybox bin]$ su --session-command="/path/to/my/bash/script.sh PARAM1 PARAM2" deploy
Password:
su: incorrect password

明らかにsudoersそれのためですsudo(したがって名前)。deployパスワードプロンプトなしでコマンドを実行する他の方法はありますか?

Centos 6.3で開発中ですが、最終的にはRHEL5で動作します。

答え1

requirettyでリラックスできます/etc/sudoer

sudoersのマニュアルページから

requiretty      If set, sudo will only run when the user is logged in to a real 
                tty. When this flag is set, sudo can only be run from a login
                session and not via other means such as cron(8) or cgi-bin 
                scripts.  This flag is off by default.

デフォルトでは、この行は、次を使用するときに誰もがttyアクセス権を持っている必要があることを意味しますsudo

Defaults requiretty

次のようにユーザーおよび/またはグループごとに軽減できます。

$ sudo visudo
# group
Defaults:%group !requiretty
# user
Defaults:user   !requiretty

メモ:方法!not

よりSudo&Sudoers詳しくはマニュアルページをご覧ください。

関連情報