sudo

我使用反引号操作从一个PHP脚本运行rsync。 它以apache用户身份运行。

在/ etc / sudoers中,我设置了

#Defaults requiretty Cmnd_Alias REPORTS = /usr/bin/rsync apache ALL = NOPASSWD: REPORTS 

在错误日志中,我收到这些错误

 sudo: can't stat /var/run/sudo: Permission denied sudo: no tty present and no askpass program specified 

另外,不是说rsyncpath是正确的,在php中的rsync命令也是如此。 我可以作为root运行该命令,如果我添加NOPASSWD给另一个用户,我可以sudo并运行相同的命令。

这可能是因为sudo需要运行一个TTY会话。 您可以强制sudo通过传递-t参数来承担/使用TTY,即:

 sudo -tt /usr/bin/rsync 

禁用SELINUX(/ etc / selinux / config SELINUX =禁用并重新启动)。