У меня есть задание 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
setuid
Какие различия существуют между поведением Upstart и sudo
поведением, которое привело бы одного к неудаче, а другого к успеху?
решение1
Строфа setuid
не должна быть в script
блоке, она глобальна. Вероятно, это причина, по которой ваша работа не срабатывает.
Обратите внимание, что использование setuid
сделаетвсеФазы заданий выполняются под указанным пользователем, и нет возможности изменить это. Если вы хотите запустить только демон под другим пользователем, избегайте sudo
и используйте start-stop-daemon
вместо этого. Это особенно важно при разветвлении демонов. Проверьте UbuntuКулинарная книга Upstart, подробности в главе 11.43.2.