在Ubuntu上为守护进程设置umask的方法

我有一个http守护进程服务器进程(yaws),我想让服务器写入任何具有002的umask的新文件,以便同一组中的另一个用户可以修改,移动或删除由守护进程创build的文件。 这是在Ubuntu 10.04。

与Apache不同的是,yaws没有umask的configuration选项,那么有什么方法可以设置任何守护进程的umask?

我find了有关更改init脚本添加umask 002 答案 。 这确实奏效,但我不确定编辑初始化脚本是使这个在多台机器上进行文档和configuration变得容易的最佳方式。

我也在这里find了对pam_umask模块的引用。 看起来像这样允许每个用户在/ etc / passwd的GECOS字段中configurationumask的设置。

有没有其他方法来设置守护进程的umask? 那么推荐的方法是什么?

在守护进程的主目录中创build一个.profile文件:

 #!/bin/sh umask 002 

您可以运行以下命令find守护程序的主目录:

 getent passwd daemon | awk -F':' '{ print $6; }' 

如果这不起作用,我能想到的唯一的其他解决scheme是编辑/etc/init.d脚本。

在Ubuntu 10.04上,全局默认的umask设置可以通过pam_umask模块来控制。

在这个博客上发现了一些与Debian相关的细节: http : //muzso.hu/2008/01/22/default-permissions-with-libpam-umask

Ubuntu 10.04默认安装了pam_umask模块,但需要进行configuration。

编辑/etc/pam.d/common-session,添加行:

 session optional pam_umask.so umask=022 

然后可以通过运行命令来更改每个用户的设置:

 sudo chfn -o "umask=002" daemon_username 

在/ etc / passwd的GECOS字段添加一个umask设置。

这仅适用于非交互式非loginshell,例如在启动时运行守护程序启动脚本。

对于loginshell,需要从/ etc / profile,/etc/login.defs或用户主目录.profile,.bashrc等其他shellconfiguration文件中删除umask设置。否则,将会覆盖pam_umask设置。 请参阅pam_umask手册页以了解configuration顺序。

如果通过工具“start-stop-daemon”启动服务,则可以在命令行级别使用参数“–umask”指定umask,例如:

 log_daemon_msg "Starting $DESC" "$NAME" if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion --umask 002 ; then log_end_msg 0 else log_end_msg 1 RET=1 fi 

调整启动脚本以从configuration文件中读取这些细节可能比添加基于用户的设置更为透明 – 这当然取决于守护进程使用的启动过程。

更多的信息可以从man-Page:man start-stop-daemon获取