我有一个 http 守护进程 (yaws),我想让服务器使用 umask 002 写入任何新文件,以便同一组中的另一个用户可以修改、移动或删除守护进程创建的文件。这是在 Ubuntu 10.04 上。
与 Apache 不同,yaws 没有 umask 的配置选项,那么有哪些方法可以设置任何守护进程的 umask?
我发现这个答案关于更改 init 脚本以添加umask 002
。这确实有效,但我不确定编辑 init 脚本是否是使其易于在多台机器上记录和配置的最佳方法。
我还发现了对 pam_umask 模块的引用这里. 看起来这允许在 /etc/passwd 的 GECOS 字段中配置每个用户的 umask 设置。
还有其他方法可以设置守护进程的 umask 吗?推荐的方法是什么?
答案1
.profile
在守护进程的主目录中创建一个文件:
#!/bin/sh
umask 002
您可以通过运行以下命令找到守护进程的主目录:
getent passwd daemon | awk -F':' '{ print $6; }'
如果那不起作用,我能想到的唯一其他解决方案就是编辑/etc/init.d
脚本。
答案2
在 Ubuntu 10.04 上,可以使用 pam_umask 模块控制全局默认 umask 设置。
在这个博客上发现了一些与 Debian 相关的详细信息: http://muzso.hu/2008/01/22/默认权限-带有-libpam-umask
Ubuntu 10.04默认安装pam_umask模块,但需要进行配置。
编辑 /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 手册页。
答案3
如果通过工具“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
调整启动脚本以从配置文件中读取这些详细信息可能比添加基于用户的设置更透明 - 这当然取决于守护进程使用的启动过程。
可以从 man-Page 中检索更多信息:man start-stop-daemon