我的问题是,当使用 Daemontools 启动时,OpenOffice(以服务器模式运行)创建的文件归 root 所有(并属于 root 组)。当我手动启动 Daemontools“运行”脚本时,OpenOffice 会正确创建具有我想要的权限的文件(在本例中即“oinstall”组)。
我有一个名为“oracle”的 unix 用户,他是“oinstall”组的成员。oracle 用户可以启动/停止 OpenOffice 服务器,该服务器由 Daemontools 服务控制。该服务的权限如下所示:
[oracle@try1 pdf]$ ls -l /service/
drwxrwsr-x 3 root oinstall 4096 Dec 3 2012 OpenOfficePROD
[oracle@try1 pdf]$ ls -l /service/OpenOfficePROD/
-r--rws--- 1 root oinstall 175 Dec 3 2012 run
drwxrws--- 2 root oinstall 4096 Sep 2 15:31 supervise
[oracle@try1 pdf]$ ls -l /service/OpenOfficePROD/supervise/
prw-rws--- 1 root oinstall 0 Sep 2 15:31 control
-rw-rws--- 1 root oinstall 0 Sep 4 2012 lock
prw-rws--- 1 root oinstall 0 Sep 4 2012 ok
-rw-r--r-- 1 root oinstall 18 Sep 2 15:31 status
当我手动启动 OpenOffice 服务器时,通过以 oracle 用户身份运行“运行”脚本,我得到了具有所需权限的文件,例如
-rw-r----- 1 oracle oinstall 20956 9 月 2 日 15:48 myfile.pdf
但是当我使用 daemontools 启动 OpenOffice 服务器(即使以 Oracle 用户身份)时,文件会像这样创建:
-rw-r----- 1 root root 20956 9月 2 15:28 myfile.pdf
这是我的运行脚本:
#!/bin/sh
exec 2>&1
export HOME=/home/oracle
exec /usr/bin/soffice -invisible -nologo -headless -nofirststartwizard -accept="socket,port=8099;urp;StarOffice.ServiceManager"
答案1
你可能想要使用setuidgid
在/service/OpenOfficePROD/run
脚本中让 daemontools 以正确的用户身份启动您的服务。
#!/bin/sh
exec 2>&1
export HOME=/home/oracle
exec setuidgid oracle /usr/bin/soffice -invisible -nologo -headless -nofirststartwizard -accept="socket,port=8099;urp;StarOffice.ServiceManager