Permissions

當作業以非特權使用者身份執行時,在 /var/run 中創建文件夾

  • July 24, 2014

我有一些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-startand之後sudo start my-service

如何在服務啟動之前創建文件夾並設置權限?

  1. sudo 不是任何有關 init 系統的正確工具。如果可能,請避免使用它。
  2. setuid 和 setgid 影響 upstart 作業的所有節,包括預啟動。
  3. 這可以通過以下工作輕鬆解決,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 而不會遇到任何權限錯誤。

引用自:https://serverfault.com/questions/615088