问题描述
我有一个http守护进程服务器进程(偏航),我希望服务器写入umask为002的任何新文件,以便同一组中的另一个用户可以修改,移动或删除该守护进程创建的文件。这是在Ubuntu 10.04上。
与Apache不同,Yaws没有umask的配置选项,那么有什么方法可以设置任何守护进程的umask?
我发现this answer关于更改初始化脚本以添加umask 002
。这确实有效,但是我不确定编辑init脚本是否是使此文档易于记录和在多台计算机上配置的最佳方法。
我还找到了对pam_umask模块here的引用。看起来这允许在/etc /passwd的GECOS字段中配置每个用户的umask设置。
还有其他方法可以为守护进程设置umask吗?推荐的方法是什么?
最佳方案
在守护程序的主目录中创建一个.profile
文件:
#!/bin/sh
umask 002
您可以通过运行以下命令找到守护程序的主目录:
getent passwd daemon | awk -F':' '{ print $6; }'
如果那不起作用,我能想到的唯一其他解决方案是编辑/etc/init.d
脚本。
次佳方案
在Ubuntu 10.04上,可以使用pam_umask模块控制全局默认umask设置。
在此博客上通常可以找到与Debian有关的一些详细信息:http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask
pam_umask模块默认安装在Ubuntu 10.04上,但需要进行配置。
编辑/etc/pam.d/common-session,添加以下行:
session optional pam_umask.so umask=022
然后可以通过运行以下命令来更改每个用户的设置:
sudo chfn -o "umask=002" daemon_username
在/etc /passwd中的GECOS字段中添加umask设置。
这仅适用于非交互式,非登录 shell 程序,例如在引导时运行守护程序启动脚本时。
对于登录 shell ,需要从其他 shell 配置文件(例如/etc/profile、/etc/login.defs或用户主目录.profile,.bashrc等)中删除umask设置。否则,将覆盖pam_umask设置。有关配置顺序,请参见pam_umask手册页。