Пользователи Upstart, node и bash

У меня проблемы с пониманием всех механизмов, лежащих в основе управления пользователями с помощью выскочки, узла и 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 : индекс узла. js и сделайте запрос, информация верна:

User that deploys: myuser
UID that deploys: 1001

Итак, проблема должна быть между выскочкой и узлом, или как я могу убедиться, что служба выскочки запускает мой скрипт узла как myuser

1
задан 23 September 2016 в 12:31
1 ответ

Думаю, я нашел решение, не уверен, что это правильное решение, но все равно публикую его. И я вообще-то не очень хорошо понимаю, что я изначально сделал не так.

Проблема была в выскочке, вот мой новый, который работает хорошо:

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 выскочки.

0
ответ дан 4 December 2019 в 05:50

Теги

Похожие вопросы