我有一个PHP脚本,其中包含一个shell_exec()和它正常执行的命令需要sudo。 我用visudo编辑了sudoers以包含以下内容:
www-data ALL = NOPASSWD: /var/root/node/npm/node_modules/less/ %users ALL = NOPASSWD: /var/root/node/npm/node_modules/less/
我怀疑要么应该工作,但我肯定与腰带和吊带方法。
我正在用vim编辑etc / sudoers,所以在添加这些行之后,我会这样做:x和一切正常。 我的PHP脚本做了它应该…约10-15分钟。 然后脚本停止工作。 具体来说, shell_exec()停止工作。
如果我再做一次,我的新路线还在那里。 但是,只有当我再次保存时,脚本才能重新开始工作。
谁能告诉我为什么这可能会发生? 我有两个不是很好的猜测:
sudo visudo ,这是什么让我的脚本工作(但直到它到期)。 编辑:
我想我使用了错误的用户名…看起来像MAMP,Apache用户实际上是我的用户(而不是www数据)。 我知道这是因为我把它添加到我的PHP脚本: echo = shell_exec("whoami"); 我的用户名出现了: Emerson 。 那么这是否意味着我应该将Emerson ALL = NOPASSWD: /var/root/note/npm/node_modules/less/bin/lessc到我的sudoers文件中?
编辑:
我已经在我的sudoers文件中使用了它。 Emerson ALL=(ALL) NOPASSWD: ALL它有效,但我不认为它应该是这样。 除了一堆冗余之外,它也是宽容的。 我已经把所有的废话都留下了,所以你可以看到我目前得到的东西。
# # Host alias specification # User alias specification # Cmnd alias specification # Defaults specification Defaults env_reset Defaults env_keep += "BLOCKSIZE" Defaults env_keep += "COLORFGBG COLORTERM" Defaults env_keep += "__CF_USER_TEXT_ENCODING" Defaults env_keep += "CHARSET LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE" Defaults env_keep += "LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME" Defaults env_keep += "LINES COLUMNS" Defaults env_keep += "LSCOLORS" Defaults env_keep += "SSH_AUTH_SOCK" Defaults env_keep += "TZ" Defaults env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" Defaults env_keep += "EDITOR VISUAL" Defaults !requiretty # Runas alias specification # User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL Emerson ALL=(ALL) NOPASSWD: ALL # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now #Allow PHP to compile .less files www-data ALL = NOPASSWD: /var/root/node/npm/node_modules/less/bin/lessc %users ALL = NOPASSWD: /var/root/node/npm/node_modules/less/bin/lessc Emerson ALL =(ALL) NOPASSWD: /var/root/node/npm/node_modules/less/bin/lessc apache ALL =(ALL) NOPASSWD: /var/root/node/npm/node_modules/less/bin/lessc
这两件事都不是你提出的问题。
你的sudoers文件中有requiretty行吗? 这将解释为什么它适合你,但不是你的PHP脚本。 删除将解决这个问题。
Sudo可能已经被configuration为caching你的密码15分钟,检查你的sudoers文件中的'Defaults timestamp_timeout = XXXX'这样的行。
build议一句话,考虑限制sudo只有它所需要的文件。 如果攻击者设法将恶意文件放入node_modules / less /目录下怎么办?
您应该禁用Web用户的requiretty
这是/ etc / sudoers的语法
Defaults:username !requiretty
不要使用visudo命令编辑/ etc / sudo
您必须授权用户在sudoers文件中允许提升特权。 如果你的networking服务器是作为Emerson那么运行
Emerson ALL = NOPASSWD: /var/root/note/npm/node_modules/less/bin/lessc
应该解决你的问题。