Почему моя задача Upstart работает с sudo, но не с setuid?

Почему моя задача Upstart работает с sudo, но не с setuid?

У меня есть задание 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.

Связанный контент