我正在尝试在Ubuntu 14.04服务器上的CIS强化脚本中运行2个ansible任务。
第一项任务是
- name: 8.1.12 Collect Use of Privileged Commands (Scored)
shell: /usr/bin/find {/usr/local/sbin,/usr/local/bin,/sbin,/bin,/usr/sbin,/usr/bin} -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 -k privileged" }'
register: privileged_programs
tags:
- scored
- section8.1.12
这应该注册要在下一个任务中使用的特权程序列表。如果我将上面的命令复制到Ubuntu VM并运行它,我会得到一个很长的程序列表,就像我应该的那样。
第二项任务是:
- name: 8.1.12 Collect Use of Privileged Commands (Scored)
lineinfile: dest=/etc/audit/audit.rules line="{{item}}" insertafter=EOF state=present
with_items: privileged_programs.stdout_lines
when: privileged_programs is defined and privileged_programs.stdout_lines|length > 0
notify: restart auditd
tags:
- scored
- section8.1.12
如果注册了任何结果,它应该触发,但到目前为止我还没能让它运行。每次我尝试运行2个任务时都会跳过它。我假设没有正确存储或传递privileged_programs变量。
注意:我尝试将第一个任务从shell更改为命令但是我得到了一个错误" stderr:/ usr / bin / find:paths必须在表达式之前"
注2:我还检查了etc / audit / audit.rules,并确认其中尚未包含特权程序。
编辑:我在两个任务之间添加了一个调试来输出var = privileged_programs。以下是我认为可能表明问题的一部分的部分内容:
"stderr": "/usr/bin/find: `{/usr/local/sbin,/usr/local/bin,/sbin,/bin,/usr/sbin,/usr/bin}': No such file or directory",
"stdout": "",
"stdout_lines": [],
"warnings": []
任何人都知道为什么会这样?
提前致谢!
答案 0 :(得分:1)
Bourne shell在语法方面存在一些问题。在Bash中工作正常。
我让它发挥作用。请尝试以下语法。
shell: /usr/bin/find /usr/local/sbin /usr/local/bin /sbin /bin /usr/sbin /usr/bin
答案 1 :(得分:0)
我不确定是否是这种情况,但是ansible文档说明:如果两个处理程序任务具有相同的名称,则只运行一个。 * 尝试更改第二个任务名称。
答案 2 :(得分:0)
我的 ansible 跳过与“when:”状态不匹配主机名有关。
例如
- set_fact:
efs_mount_target: "10.10.10.1"
when: ansible_hostname == 'server-01'