Создание папки в '/var/run', когда задание выполняется как непривилегированный пользователь

У меня есть некоторые 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 использовался.

Как я могу создать папку и установить полномочия, прежде чем сервис будет запущен?

1
задан 24 July 2014 в 12:07
1 ответ
  1. sudo не подходит ни для каких систем init. пожалуйста по возможности избегайте его использования.

  2. setuid и setgid влияют на все строфы задания upstart, включая pre-start.

  3. Это можно легко обработать со следующим заданием, my-service-prep.conf:

    start on starting my service
    
    задача
    
    PIDDIR=/var/run/my-service
    
    выполнить установку -o my-user -g my-group -d $PIDDIR
    

С его помощью можно использовать setuid и setgid в главном задании на запуск и не сталкиваться с ошибками разрешений.

.
3
ответ дан 3 December 2019 в 18:44

Теги

Похожие вопросы