umask
是否可以为系统用户(使用 创建)设置useradd --system username
?
答案1
设置用户 umask 的常用方法有三种。
- 设置
UMASK
于/etc/login.defs
- 添加
pam_umask.so
到您的 PAM 配置中/etc/pam.d
- 在shell启动文件中设置它,例如
/etc/profile
在这方面,系统用户和普通用户没有区别。
但我假设您正在尝试使用自定义 umask 启动守护进程?
问题是:当用户登录时,上述所有选项都会发生。如果您正在运行守护程序,它永远不会登录。它由 init 启动,然后以 root 身份运行,或者调用setuid
以您指定的系统用户身份运行。
您的主要选择是:
答案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
其他守护进程可能也有类似的方法,这在特定情况下可能会有所帮助。