SaltStack - 更改文件权限

SaltStack - change file permissions

我需要使用 SaltStack 在 Linux 中更改文件权限。

对于目录我可以使用file.directory函数,例如:

file.directory:
  - user: root
  - group: root
  - mode: 400

但是我应该为文件使用什么?

我可以使用:

  file.managed:
    - user: root
    - group: root
    - mode: 444

它有效,但我有一条警告消息:

[WARNING ] State for file: /boot/grub/grub.cfg - Neither 'source' nor 'contents' nor 'contents_pillar' nor 'contents_grains' was defined, yet 'replace' was set to 'True'. As there is no source to replace the file with, 'replace' has been set to 'False' to avoid reading the file unnecessarily.

它需要一个 source 指令,但我不想将文件下载到 minion,我只需要更改文件权限。

file.exists 函数没有 usergroupmode 指令。

我有什么选择?

如果文件不是由 salt 管理的,您可能想使用 cmd.run 并直接调用 unix 命令:

chown root:root /path/to/file:
  cmd.run

chmod 444 /path/to/file:
  cmd.run

您收到的警告消息几乎说明了一切。如果您指定 replace: False 消息将消失:

file.managed:
- user: root
- group: root
- mode: 444
- replace: False

cmd.run 显然会删除此消息,但它太笼统了,更像是一种解决方法。更多 salty 方法是使用 file.managed 状态,因为这是它的设计目的。

状态 file.directory 仅在一种状态下递归设置文件的 and/or 目录权限。优于即使没有任何更改也会执行的 cmd.run(将与 'states' 的理念相悖)。请注意,file.managed 在这种情况下是不够的。

otrs_enforce_perms:
  file.directory:
    - name: /opt/otrs
    - user: otrs
    - group: otrs
    - dir_mode: 770
    - file_mode: 660
    - follow_symlinks: True
    - recurse:
      - user
      - group
      - mode

如果递归选项下包含ignore_files或ignore_dirs,则文件或目录将分别保持不变。