我想根据这个答案更改sudo会话超时.我可以编辑普通文件:
lineinfile:
path: /etc/sudoers
regexp: ^Defaults env_reset
line: Defaults env_reset,timestamp_timeout=60
Run Code Online (Sandbox Code Playgroud)
但在我/etc/sudoers写的第一行:# This file MUST be edited with the 'visudo' command as root.如何处理它?
PS
虽然简短的答案是肯定的,但必须阅读康斯坦丁·苏沃罗夫关于正确方法的回答,lineinfile以及非常有趣的技术回答关于这种方式可能存在的陷阱
Kon*_*rov 20
这种情况有一个safenet选项:validate.
要在复制到位之前运行的验证命令.要验证的文件的路径是通过'%s'传递的,必须存在,如下例所示.该命令安全地传递,因此扩展和管道等shell功能将无法正常工作.
如果你看一下lineinfile模块的examples部分,你会看到你需要的确切内容:
# Validate the sudoers file before saving
- lineinfile:
path: /etc/sudoers
state: present
regexp: '^%ADMIN ALL='
line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
validate: '/usr/sbin/visudo -cf %s'
Run Code Online (Sandbox Code Playgroud)
如果您已经测试了正确的语法,那么它是安全的.
令人鼓舞的visudo是,通过创建无效/etc/sudoers,无论是通过拼写错误还是思考,都可以阻止某人将自己锁定在管理系统之外.
当您使用Ansible执行编辑时,您可以测试执行该编辑的代码,以便sudo在您推出之前使用您的实际配置文件,环境和版本做正确的事情.因此,人们对手写拼写错误或语法错误的担忧并不是立即相关的.
虽然这个答案正确定义的东西,这一次提供了一个缓解潜在的问题,让我们来看看你的代码。
您要求 Ansible(可能)按以下方式替换定义的行:
regexp: ^Defaults env_reset
Run Code Online (Sandbox Code Playgroud)
这显然是一个不好的做法,如果重复以外的参数Defaults中sudoers的文件,它可能导致一个严重的问题。
通常Defaults是配置参数,env_reset是可能的值之一。
您不能假设实际的配置文件将始终包含^Defaults env_reset字符串。
如果设置了不同的值,则正则表达式将不匹配,您最终会添加以Defaults.
所以正确的使用方法lineinfile是使用regexp参数只匹配配置参数,而不是它的值。在你的情况下:
regexp: ^Defaults
line: Defaults env_reset,timestamp_timeout
Run Code Online (Sandbox Code Playgroud)
另一个潜在的陷阱是sudoers包含应按正确顺序编写的部分。如果您修改的文件不包含正则表达式指定的行,lineinfile则会在文件末尾添加一个新行,该行可能会被忽略或导致错误(但应通过验证发现),以及如果人们稍后查看文件,很可能会引起混淆。所以指定insertafteror可能是明智的insertbefore。
| 归档时间: |
|
| 查看次数: |
5147 次 |
| 最近记录: |