如何将 umask 设置应用于未登录的帐户?

nfa*_*rar 5 linux services umask

在我的 Ubuntu 11.04x64 服务器上,我运行的服务帐户没有登录也没有主目录。这些服务帐户负责运行作为服务调用的进程。

当这些服务创建新文件时,我需要使用权限 664 (UMASK 002) 创建它们。

我编辑了 /etc/profile umask 设置以反映这一点。我看到现在我的用户帐户创建了反映这个新 umask 设置的文件,但是当我使用他们的帐户(sudo -u serviceaccount touch newfile)手动创建文件时,服务帐户不会。

有什么建议?

use*_*686 3

如果服务是通过 Upstart 或 /etc/init.d 启动的,请编辑相应的初始化脚本。

  • init.d:umask 02位于脚本的顶部(它们是普通sh脚本)
  • 新贵umask 02任何地方

Linux 没有严格的“登录”定义,帐户只是一个可以(或不能)与名称/homedir/等关联的 UID。

当您在控制台/通过 SSH 登录时,登录程序(或 SSH 守护进程)使用 PAM 来设置环境(可能pam_umask),然后使用“login”标志启动您的 shell。该/etc/profile脚本属于shbash shell,它们仅在“登录”调用时读取它。

当您使用sudo touch ...或时sudo /etc/init.d/foo startsudo仍然调用 PAM 进行身份验证/帐户/会话设置,但根本不启动 shell,这意味着所有“profile”或“bashrc”文件将被忽略。(也就是说,除非您使用sudo -i ...。)

当 Upstart 运行服务时,它只是将 UID 切换为您的服务的 UID,跳过任何“配置文件”脚本或 PAM 配置。读取的唯一配置是 中的服务文件/etc/init,您应该在其中放置 umask 设置。

  • 实际上,我们的实验表明,它也是新贵的 umask 002。[upstart 文档](http://upstart.ubuntu.com/wiki/Stanzas#umask) 有一个误导性的示例。 (3认同)