У меня есть задание Upstart для приложения Node.js, и я хочу, чтобы оно запускало Node как node
пользователь, а не root
. Когда я использую setuid
в конфигурации задания, когда я пытаюсь запустить задание, он говорит my-app stop/waiting
. Однако, если я опущу setuid
но используйте exec
с участием sudo
, это работает, как я ожидал.
Я создал node
как системный пользователь. Насколько мне известно, этому пользователю доступны все соответствующие файлы и каталоги. Я использую версию Upstart 1.12.1.
Конфиг с setuid
:
script
setuid node
chdir /var/app/my-app
exec nodejs server.js
end script
по сравнению с конфигурацией с sudo
:
script
chdir /var/app/my-app
exec sudo -u node nodejs server.js
end script
Какие различия есть между Upstart's setuid
поведение и sudo
поведение, из-за которого один потерпит неудачу, а другой добьется успеха?
В setuid
строфы не должно быть в script
блок, это глобально. Вероятно, это причина того, что ваша работа терпит неудачу.
Обратите внимание, что использование setuid
сделаю все фазы задания выполняются так, как указал пользователь, и изменить это невозможно. Если вы хотите запустить только демон от имени другого пользователя, избегайте sudo
и пойти с start-stop-daemon
вместо. Это особенно важно при разветвлении демонов. Проверьте Ubuntu Поваренная книга Upstartв главе 11.43.2.