У меня есть некоторые upstart
скрипты, которые запущены как non-priviledged пользователь, использующий setuid
. Изодромные с предварением файлы должны быть созданы в /var/run/my-service
: /var/run/my-service/v1.pid
, /var/run/my-service/v2.pid
и так далее.
Новомодные сценарии создаются сценарием, который также создает /var/run/my-service
и устанавливает полномочия, таким образом, все работает первоначально. Но за этой папкой будут следовать перезагрузка, и сервисы перестанут работать.
Я попробовал это:
pre-start script
[ -n $PID_DIR ] && [ ! -d $PID_DIR ] && mkdir $PID_DIR
sudo chown my-user:my-group $PID_DIR
end script
setuid my-user
Но это не работает:
sudo: no tty present and no askpass program specified
my-user is not in the sudoers file. This incident will be reported.
Я предполагаю, что это потому что setuid
влияние все процессы, даже при том, что это после pre-start
и sudo start my-service
использовался.
Как я могу создать папку и установить полномочия, прежде чем сервис будет запущен?
sudo не подходит ни для каких систем init. пожалуйста по возможности избегайте его использования.
setuid и setgid влияют на все строфы задания upstart, включая pre-start.
Это можно легко обработать со следующим заданием, my-service-prep.conf:
start on starting my service
задача
PIDDIR=/var/run/my-service
выполнить установку -o my-user -g my-group -d $PIDDIR
С его помощью можно использовать setuid и setgid в главном задании на запуск и не сталкиваться с ошибками разрешений.
.