Permissions當作業以非特權使用者身份執行時,在
當作業以非特權使用者身份執行時,在 /var/run
中創建文件夾
我有一些
upstart
腳本作為非特權使用者使用setuid
. Pid 文件應在/var/run/my-service
:中創建/var/run/my-service/v1.pid
,/var/run/my-service/v2.pid
依此類推。upstart 腳本由腳本創建,該腳本還創建
/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
and之後sudo start my-service
。如何在服務啟動之前創建文件夾並設置權限?
- sudo 不是任何有關 init 系統的正確工具。如果可能,請避免使用它。
- setuid 和 setgid 影響 upstart 作業的所有節,包括預啟動。
- 這可以通過以下工作輕鬆解決,my-service-prep.conf:
start on starting my-service task PIDDIR=/var/run/my-service exec install -o my-user -g my-group -d $PIDDIR
有了這個,您可以在主要的 upstart 作業中使用 setuid 和 setgid 而不會遇到任何權限錯誤。