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