如何为系统用户设置umask?

如何为系统用户设置umask?

umask是否可以为系统用户(使用 创建)设置useradd --system username

答案1

设置用户 umask 的常用方法有三种。

  1. 设置UMASK/etc/login.defs
  2. 添加pam_umask.so到您的 PAM 配置中/etc/pam.d
  3. 在shell启动文件中设置它,例如/etc/profile

在这方面,系统用户和普通用户没有区别。

但我假设您正在尝试使用自定义 umask 启动守护进程?

问题是:当用户登录时,上述所有选项都会发生。如果您正在运行守护程序,它永远不会登录。它由 init 启动,然后以 root 身份运行,或者调用setuid以您指定的系统用户身份运行。

您的主要选择是:

  1. 放入umask您的初始化脚本(grep umask /etc/init.d/*例如执行 a )
  2. 配置 init 以使用自定义 umask 启动程序(系统执行程序 新贵umask
  3. 如果使用start-stop-daemon,则传递掩码选项
  4. 修改程序本身来调用掩码函数或系统调用

答案2

系统用户在三个方面与“普通”用户不同:密码过期、主目录(系统用户没有主目录)和 UID(系统用户通常低于某个任意阈值)。

在一般情况下,你几乎完全不走运。您可以使用 PAM 来设置 umask,但 PAM 根据这三个差异之外的其他因素来选择行为。

换句话说,您无法让 PAM 区分“系统”用户和“非系统”用户。这给您留下了两个选择:

  • 要么使用 PAM 为每个人设置 umask(例如 check in /etc/login.defs),然后为非系统用户显式设置 umask /etc/bash.bashrc(或类似);

  • 或者您编写自己的 PAM 模块来执行此操作。我认为这会受到很多人的欢迎,因为设置 umask 是一个常见的请求。

请对这个答案持保留态度。这种请求很常见,如果现在存在更好/正确的方法,我不会感到惊讶。

答案3

正如@Mikel建议的那样,如果您尝试配置作为守护进程的系统帐户,请尝试配置守护进程本身。

我遇到这个问题是想了解如何在 MacOS 上为 _www 帐户设置 umask。虽然正如上面的答案所暗示的那样,这很困难,但我发现可以通过将 apache 服务配置为(在本例中)用户 == 守护进程来解决它。

奇怪的是,我找不到启动脚本(通常在 /etc/init.d/ 中,但在 Mac 上的 Library/LaunchDaemons/ 中),但在以下人员的帮助下:http://krypted.com/mac-security/apache2-umasks/发现apache有自己特定的环境脚本。

$ sudo vim /usr/sbin/envvars
    umask 002

其他守护进程可能也有类似的方法,这在特定情况下可能会有所帮助。

相关内容