我有一些使用setuid
作为非特权用户运行的upstart
脚本。 应该在/var/run/my-service
: /var/run/my-service/v1.pid
创buildPid文件。
新贵脚本是由一个脚本创build的,脚本也创build了/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
被使用。
如何在服务启动之前创build文件夹并设置权限?
sudo不是任何有关init系统的正确工具。 请尽量避免使用它。
setuid和setgid会影响所有新贵的工作,包括开工前的工作。
这可以很容易地解决以下工作,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,而不会遇到任何权限错误。