我正在尝试将nodev添加到我的/etc/fstab
文件中。我正在使用下面的Ansible命令,但没有运气。我的问题在于正则表达式,我不是正则表达式的专业人士。
- name: Add nodev to /etc/fstab
lineinfile:
dest=/etc/fstab
backup=yes
backrefs=yes
state=present
regexp='(^/dev[\w/_-]+(\s+(?!nodev)[\w,]+)*)'
line='\1,nodev'
我要添加/etc/fstab
的{{1}}其中一行是:
nodev
答案 0 :(得分:15)
虽然这可能不是最优雅的答案,但它对我有用。
- name: Ensure fstab uses nodev
mount:
name: "{{ item.mount }}"
src: "{{ item.device }}"
fstype: "{{ item.fstype }}"
opts: "{{ item.options }},nodev"
state: present
with_items: ansible_mounts
when: item.options.find(",") >= 0 and item.options.find("nodev") == -1
答案 1 :(得分:3)
受Joe的回答启发我制作了这个版本,如果它已经存在,我会在/etc/fstab
的特定行添加一个选项。这也将保留该行已有的任何其他选项。
main.yml
- import_tasks: fstab-opt-present.yml point=/home opt=nodev
的fstab-OPT-present.yml
- name: '/etc/fstab: Set opt "{{ opt }}" for mount point {{ point }}'
lineinfile:
path: /etc/fstab
backup: yes
backrefs: yes
regexp: '^(\S+\s+{{ point }}\s+\S+\s+)(?!(?:\S*,)?{{ opt }}(?:,\S*)?\s+)(\S+)(\s+.+)$'
line: '\1{{ opt }},\2\3'
register: fstab
- name: 'If {{ point }} changed, remount'
command: 'mount {{ point }} -o remount'
when: fstab.changed
https://regex101.com/是构建和测试这类regexp的非常有用的工具。只需启用"多线"在那里选择并打开" Substitution"小组,您甚至可以粘贴到/etc/fstab
,看看你的正则表达式将匹配哪些行以及它们将对它们做什么。只需记住在测试时使用实际值而不是Ansible变量{{ point }}
等
答案 2 :(得分:2)
我们开发了第三方ansible模块来添加,设置或删除挂载选项。看看吧!
- mountopts:
name: /
option: nodev
答案 3 :(得分:0)
登陆这里寻找答案,为我的用例滚动自己:
main.yml
- include: fstab-opts.yml point=/tmp opts=noexec,nodev,nosuid,noatime
- include: fstab-opts.yml point=/backup opts=noatime
的fstab-opts.yml
---
- name: 'Ensure {{ point }} flags'
lineinfile:
path: /etc/fstab
# uses "(not-spaces spaces /tmp spaces )(not-spaces)(the rest)" pattern to match column content and capture args
regexp: '^([^ ]+[ ]+\{{ point }}[ ]+[^ ]+[ ]+)([^ ]+)(.*)'
line: '\1{{ opts }}\3'
backrefs: yes
register: fstab
- name: 'If {{ point }} changed, remount'
command: mount -o remount {{ point }}
when: fstab.changed
答案 4 :(得分:0)
经过测试并可以正常工作
它不包括将nodev添加到/(root),仅设置为ext4和xfs文件系统。不会添加到临时文件系统中。
注意:在测试regexp101时,请确保选择python
答案 5 :(得分:0)
我想指出的是,似乎有一个新的ansible模块,可以更轻松地覆盖所有内容: https://docs.ansible.com/ansible/latest/modules/mount_module.html
答案 6 :(得分:0)
我在 /etc/fstab 中为 /var/tmp 挂载点添加了 noexec,nodev,nosuid 选项。
要求是:
如果需要,使用下面的命令安装 ansible.posix.mount 模块。
# ansible-galaxy collection install ansible.posix
剧本:
---
- name: "STEP 1: Get /var/tmp mounted SRC device"
shell: mount | grep -E '\s/var/tmp\s' | awk '{print $1}'
register: "vartmpsrc"
- debug:
msg: "Validated the /var/tmp mount output: {{ vartmpsrc.stdout }}"
- name: "Add mount noexec,nodev,nosuid options for /var/tmp"
mount:
path: "/var/tmp"
src: "{{ vartmpsrc.stdout }}"
fstype: "tmpfs"
opts: "nosuid,nodev,noexec"
state: "present"
when: vartmpsrc.stdout == "/var/tmp"
- name: 'Remount /var/tmp mounted volume with mount options noexec,nodev,nosuid"
ansible.posix.mount:
path: /var/tmp
state: remounted
when: vartmpsrc.stdout == "/var/tmp"
- name: 'STEP 2: Validate noexec,nodev,nosuid option set on /var/tmp partition'
shell: mount | grep -E '\s/var/tmp\s' | grep -v {{ item }}
loop:
- noexec
- nodev
- nosuid
register: vartmp_exists
ignore_errors: yes
when: vartmpsrc.stdout == "/var/tmp"