Назад | Перейти на главную страницу

Пользователи 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

Итак, проблема должна быть между выскочкой и узлом, или как я могу убедиться, что служба выскочки запускает мой скрипт узла как 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 выскочки.