我目前正在使用sefcontext模块来管理我的服务器SeLinux文件上下文
以下是用于管理某些目录的任务示例。
name: Set selinux policy for directories
sefcontext:
target: '{{ item.target }}(/.*)?'
setype: "{{ item.setype }}"
reload: True
register: "{{item.register}}"
state: present
with_items:
- { target: '/var/lib/dir1', setype: 'public_content_rw_t', register: 'dir1' }
- { target: '/var/lib/dir2', setype: 'public_content_rw_t', register: 'dir2' }
我现在遇到的问题是,做这样的事情并不是为了恢复文件标签以及幂等性
name: Run restore context to reload selinux
shell: restorecon -Rv /var/lib/{{ item.shell }}
when: "{{ item.when }}"
with_items:
- { shell: 'dir1', when: 'dir1|changed' }
- { shell: 'dir2', when: 'dir2|changed' }
知道如何在保留幂等性的同时恢复多个目录上的文件标签吗?
答案 0 :(得分:5)
好吧终于想出了一个有效的逻辑。希望这有助于有类似问题的人。
- name: Set selinux policy for directories
sefcontext:
target: '{{ item.target }}(/.*)?'
setype: "{{ item.setype }}"
reload: True
state: present
register: filecontext
with_items:
- { target: '/var/lib/dir1', setype: 'public_content_rw_t' }
- { target: '/var/lib/dir2', setype: 'public_content_rw_t' }
- name: Run restore context to reload selinux
shell: restorecon -R -v /var/lib/{{ item.target }}
when: filecontext.results[item.index]|changed
with_items:
- { index: 0, target: 'dir1' }
- { index: 1, target: 'dir2' }
答案 1 :(得分:0)
解决此问题的最简单方法可能是使用处理程序:
name: Set selinux policy for directories
sefcontext:
target: '{{ item.target }}(/.*)?'
setype: "{{ item.setype }}"
reload: True
state: present
with_items:
- { target: '/var/lib/dir1', setype: 'public_content_rw_t' }
- { target: '/var/lib/dir2', setype: 'public_content_rw_t' }
notifies:
- Run restore context to reload selinux
然后在您的handlers / main.yaml中执行以下任务:
name: Run restore context to reload selinux
shell: restorecon -Rv /var/lib/{{ item }}
with_items:
- 'dir1'
- 'dir2'
既使用处理程序,又使用早期解决方案中的filecontext,它们的缺点是它们不会真正等幂,因为如果先前已设置sefcontext,它们将不会被调用。