SUDO 需要 tty

SUDO 需要 tty

在 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 文件的最末尾,将其放置requirettysudo -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=SUDOerssudoOptionrequiretty更改为!requiretty并且一切正常。

我现在将仅限!requiretty于受影响的用户。

相关内容