sudoers nopasswd 切换用户和运行节点不起作用

sudoers nopasswd 切换用户和运行节点不起作用

我试图通过在 /etc/sudoers 文件底部添加以下行来阻止以 www 用户身份运行节点的命令上的密码提示:

gituser ALL=(ALL) NOPASSWD: /usr/bin/sudo -u web-user NODE_ENV=production /path/to/node app.js

我也尝试将命令放入 shell 脚本中并运行它,但仍然没有任何效果:

gituser ALL=(root) NOPASSWD: /usr/local/sbin/startnode

有人知道我做错了什么吗?

最终,我将把它作为 upstart 服务运行,因此命令将是“sudo service runnode stop/start”并从 git hook 触发,但我想原理将是相同的。

仅供参考,sudoers 文件的完整内容:

Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Defaults
root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL) ALL

gituser ALL=(ALL) NOPASSWD: /usr/bin/sudo -u web-user NODE_ENV=production /path/to/node app.js
gituser ALL=(root) NOPASSWD: /usr/local/sbin/startnode

答案1

感谢大家的回答。我最终在这篇文章的帮助下成功解决了这个问题邮政执行以下操作:

1. 使用单独的脚本

将此行添加到 sudoers 文件(使用 visudo)。

gituser ALL=(web-user) NOPASSWD: /usr/local/sbin/startnode

文件 /usr/local/sbin/startnode 的内容更改如下:

#!/bin/bash

cd /var/www/api.vitdsunshine.com/sun-express

########## BEFORE
# sudo -u web-user NODE_ENV=production /path/to/node app.js

########## AFTER
NODE_ENV=production /path/to/node app.js

现在可以正常工作了:

$ sudo -u web-user startnode

2. 使用完整命令

将此行添加到 sudoers 文件(使用 visudo)。

gituser ALL=(web-user) NOPASSWD: /path/to/node

尝试将环境变量设置为命令的一部分会导致命令失败。

$ sudo -u web-user NODE_ENV=production /path/to/node app.js
sudo: sorry, you are not allowed to set the following environment variables: NODE_ENV

解决方案:您必须在 web-user 的 .bashrc 文件或 /etc/environment 中设置此环境变量。

$ sudo -u web-user /path/to/node app.js
env production
Express server listening on port 9000

相关内容