Назад | Перейти на главную страницу

Почему моя работа 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

Какие различия есть между Upstart's setuid поведение и sudo поведение, из-за которого один потерпит неудачу, а другой добьется успеха?

В setuid строфы не должно быть в script блок, это глобально. Вероятно, это причина того, что ваша работа терпит неудачу.

Обратите внимание, что использование setuid сделаю все фазы задания выполняются так, как указал пользователь, и изменить это невозможно. Если вы хотите запустить только демон от имени другого пользователя, избегайте sudo и пойти с start-stop-daemon вместо. Это особенно важно при разветвлении демонов. Проверьте Ubuntu Поваренная книга Upstartв главе 11.43.2.