阻止 su 询问密码

阻止 su 询问密码

我正在尝试从 Java 运行以下命令deploy(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 sudo了我的 Java 应用程序。因此,我将调用更改为:

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

但现在我进入standard in must be a tty了Java。

我已经检查过,通过执行以下操作,我可以看到它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

请参阅须藤&苏多尔斯手册页了解更多详细信息。

相关内容