无法为 Ansible 任务设置 umask

无法为 Ansible 任务设置 umask

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 的默认设置。

相关内容