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

mp3*_*ley 8 ubuntu daemon umask yaws

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

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

我找到了关于将 init 脚本更改为 add 的答案umask 002。这确实有效,但我不确定编辑 init 脚本是在多台机器上轻松记录和配置的最佳方式。

我还发现参考pam_umask模块这里。看起来这允许在 /etc/passwd 的 GECOS 字段中配置 umask 的每个用户设置。

还有其他方法可以为守护进程设置 umask 吗?推荐的方式是什么?

mp3*_*ley 5

在 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
Run Code Online (Sandbox Code Playgroud)

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

sudo chfn -o "umask=002" daemon_username
Run Code Online (Sandbox Code Playgroud)

将 umask 设置添加到 /etc/passwd 中的 GECOS 字段。

这仅适用于非交互式、非登录 shell,例如在引导时运行守护程序启动脚本时。

对于登录 shell,需要从其他 shell 配置文件(例如 /etc/profile、/etc/login.defs 或用户主目录 .profile、.bashrc 等)中删除 umask 设置。否则 pam_umask 设置将被覆盖。有关配置顺序,请参阅 pam_umask 手册页。


Zaz*_*Zaz 2

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

#!/bin/sh
umask 002
Run Code Online (Sandbox Code Playgroud)

您可以通过运行以下命令找到守护程序的主目录:

getent passwd daemon | awk -F':' '{ print $6; }'
Run Code Online (Sandbox Code Playgroud)

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

  • getent passwd 守护进程 | awk -F':' { 打印 $6; 也有效。 (2认同)