Upstart、node 和 bash 用户

Upstart、node 和 bash 用户

我无法理解 upstart、node 和 bash 的用户管理背后的所有机制。

我想做的事:

我想要一个执行节点脚本的服务。此节点脚本打开一个端口和服务器,当它收到请求时,它会通过子进程执行 bash 文件。

我有一个名为myuser具有 sudo 权限的用户。

这是我的服务描述:

description "Some Service"
author "My User"

start on filesystem runlevel [2345]
stop on shutdown
respawn
setuid myuser

exec /usr/bin/node /home/myuser/deploy/index.js

然后,这是我的节点文件:

app.post('/deploy', function (req, res) {
    ...
    var child = execFile('/home/myuser/deploy/deploy.sh', execOptions, function(error, stdout, stderr) {
        ...
    });
    res.send('ok');
});

接下来,这是我的 bash 文件的一部分:

LOG_FILE="/home/myuser/bash_deployer.log"

echo "User that deploys: $USER" >> $LOG_FILE;
echo "UID that deploys: $UID" >> $LOG_FILE;

以下是该文件的结果bash_deployer.log

User that deploys:
UID that deploys: 1001

所以我不明白为什么我的$USER变量保持为空,而它$UID是好的。

我想确保我的 bash 脚本中的所有命令都由用户运行myuser。我该怎么做?

附加信息:

当我从命令行运行我的节点脚本(记录为myuser:)node index.js并发出请求时,信息是好的:

User that deploys: myuser
UID that deploys: 1001

因此问题一定出在 upstart 和 node 之间,或者我如何确保 upstart 服务按如下方式运行我的 node 脚本myuser

答案1

我想我找到了一个解决方案,不确定它是否正确,但我还是发布了它。而且我实际上并不太明白我一开始做错了什么。

问题出在 upstart 服务中,下面是我的新服务,运行良好:

description "Some Service"
author "My User"

start on filesystem runlevel [2345]
stop on shutdown
respawn

exec sudo -u myuser /usr/bin/node /home/myuser/deploy/index.js

如您所见,我执行命令本身,而myuser不是使用setuidupstart。

相关内容