Я пытаюсь предотвратить запрос пароля в команде, запускающей узел как пользователь www, добавив следующую строку в конец моего файла / etc / sudoers:
gituser ALL=(ALL) NOPASSWD: /usr/bin/sudo -u web-user NODE_ENV=production /path/to/node app.js
Я также попытался поместить команду в сценарий оболочки и запустить ее, но без радости:
gituser ALL=(root) NOPASSWD: /usr/local/sbin/startnode
У кого-нибудь есть идеи, что я делаю не так?
В конечном итоге я буду запускать это как службу-выскочку, поэтому команда будет «sudo service runnode stop / start» и будет запускаться из ловушки git, но я предполагаю, что принцип будет таким же.
К вашему сведению, полное содержимое файла sudoers:
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Defaults
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL) ALL
gituser ALL=(ALL) NOPASSWD: /usr/bin/sudo -u web-user NODE_ENV=production /path/to/node app.js
gituser ALL=(root) NOPASSWD: /usr/local/sbin/startnode
Спасибо всем за ответы. Мне удалось заставить его работать в конце с помощью этого Почта сделав следующее:
Добавьте эту строку в файл sudoers (используя visudo).
gituser ALL=(web-user) NOPASSWD: /usr/local/sbin/startnode
Содержимое файла / usr / local / sbin / startnode изменено на следующее:
#!/bin/bash
cd /var/www/api.vitdsunshine.com/sun-express
########## BEFORE
# sudo -u web-user NODE_ENV=production /path/to/node app.js
########## AFTER
NODE_ENV=production /path/to/node app.js
Теперь это будет работать:
$ sudo -u web-user startnode
Добавьте эту строку в файл sudoers (используя visudo).
gituser ALL=(web-user) NOPASSWD: /path/to/node
Попытка установить переменную env как часть команды приводит к сбою.
$ sudo -u web-user NODE_ENV=production /path/to/node app.js
sudo: sorry, you are not allowed to set the following environment variables: NODE_ENV
Решение: вы должны установить эту переменную env в файле .bashrc веб-пользователя или в / etc / environment.
$ sudo -u web-user /path/to/node app.js
env production
Express server listening on port 9000