【问题标题】:Restore Selinux file context in ansible on multiple directories在多个目录的ansible中恢复Selinux文件上下文
【发布时间】:2017-07-16 19:38:14
【问题描述】:

我目前正在使用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' }

知道如何在保持幂等性的同时恢复多个目录上的文件标签吗?

【问题讨论】:

    标签: ansible yaml


    【解决方案1】:

    好吧,终于想出了一个可行的逻辑。希望这对有类似问题的人有所帮助。

    - 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' }
    

    【讨论】:

    • 我预计第一场比赛中的“重新加载:真”会与下一场比赛做同样的事情。这不是真的吗?
    • 不,重新加载:True 做了一些非常不同的事情。来自 ansible 文档:“提交后重新加载 SELinux 策略。请注意,这不会将 SELinux 文件上下文应用于现有文件。”
    【解决方案2】:

    解决这个问题的最简单方法可能是使用处理程序:

    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'
    

    使用处理程序和使用早期解决方案中的文件上下文都有一个缺点,即它们不是真正的幂等,因为如果之前已经设置了 sefcontext,它们将不会被调用。

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多