У меня возникли проблемы с пониманием всех механизмов управления пользователями с помощью 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
Итак, проблема должна быть между выскочкой и узлом, или как я могу убедиться, что служба выскочки запускает мой скрипт узла как myuser
Я думаю, что нашел решение, не уверен, правильное ли это решение, но все равно публикую его. И я вообще-то не очень хорошо понимаю, что я вообще сделал не так.
Проблема была в сервисе выскочки, вот мой новый, который хорошо работает:
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
вместо использования setuid
выскочки.