在 Amazon Linux 2018.03 上,我有一个进程以非特权用户身份运行,并调用 sudo 来运行命令。我收到消息:
sudo: sorry, you must have a tty to run sudo
允许非特权用户 (xymon) 无需密码即可运行相关命令
Cmnd_Alias YUM = /usr/bin/yum
xymon ALL=(ALL) NOPASSWD: YUM
该命令是从本地 xymon 客户端进程通过以下行执行的 perl 脚本调用的:
my $YumCmd = 'sudo yum check-update 2>&1' ;
@Lines = `$YumCmd` ;
在 /etc/sudoers 中,我应该禁用了 tty 要求:
Defaults !requiretty
没有运气。没有一个包含设置要求。
作为 xymon 用户的 sudo -ll 如下:
Matching Defaults entries for xymon on this host:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS
_XKB_CHARSET XAUTHORITY", !requiretty, secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, requiretty, !visiblepw, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME
LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", !authenticate
User xymon may run the following commands on this host:
Sudoers entry:
RunAsUsers: ALL
Commands:
NOPASSWD: /usr/bin/yum
我注意到它requiretty
确实出现在输出中,但似乎没有被我的Defaults !requiretty
指令覆盖。将指令放置Defaults !requiretty
在 sudoers 文件的最末尾,将其放置requiretty
在sudo -ll
.不知道这是从哪里来的。
使用带有 ssh 的伪 tty 可以使用以下命令:
my $YumCmd = 'ssh -tt -i ~/.ssh/id_rsa localhost sudo yum check-update 2>&1' ;
鉴于许多服务器运行此脚本(Xymon 脚本)需要大量设置,这不是一个好的选择。有什么建议可以让它与 sudo 一起使用吗?或者这是一个错误?
答案1
问题解决了。我已将其包含requiretty
在我的 LDAP 中。
cn=defaults,OU=SUDOers
sudoOptionrequiretty
更改为!requiretty
并且一切正常。
我现在将仅限!requiretty
于受影响的用户。