umask
我正在尝试运行具有特定(0002)的任意 Ansible 模块。
一些 Ansible 模块(如git
)支持umask
参数(或mode
直接设置权限的参数),但许多模块不支持。
据我所知,Ansible 不会调用 shell(除非您使用该shell
模块),因此更改 shell 配置文件中的 umask 是无用的。
我的方法是更改UMASK
中的行/etc/login.defs
,但这对 Ansible 没有任何影响。umask
剩余的行位于 0022。PAM
似乎配置为包含pam_umask.so
。
我知道我可以使用该shell
模块作为一种解决方法(shell: umask 0002; some_command
),但这似乎是一个丑陋的黑客攻击。
我如何让 Ansible 尊重我的umask
?
这是针对 CentOS 8 系统的 Ansible 2.9.9。
答案1
可以更改远程主机的 umask,最简单的方法是编辑,~/.bash_profile
例如remote_user
:
umask 0002
要使用该设置,您需要更改可执行文件在你的ansible,cfg 复制代码或使用ansible_shell_executable
在你的存货:
[demo]
example.com ansible_shell_executable='/bin/bash -l'
为什么这有效?该-l
参数强制 bash 充当登录 shell,并提供配置文件。
确认在运行 ansible 或 ansible-playbook 时使用详细程度-vvv
,您将看到任何 Ansible 模块都在从带有executable
参数-l
(和-c
添加)运行,您将看到类似以下内容:
EXEC /bin/bash -l -c '/usr/libexec/platform-python /home/demo/.ansible/tmp/ansible-tmp-1706875415.3499873-5842-271431387344170/AnsiballZ_command.py && sleep 0'
答案2
SSH rc 文件~/.ssh/rc
与 shell 启动文件非常相似(例如~/.bash_profile
),但它仅在您的帐户通过 SSH 访问时执行。它既可用于交互式登录,也可用于远程命令。将您希望在通过 SSH 访问您的帐户时执行的任何命令(而不是普通登录)放入此脚本中。
您需要PermitUserRC yes
/etc/sshd_config,但这是 OpenSSH 的默认设置。