Мне нужно отредактировать строки в /etc/fstab и добавить/изменить fsoptions в строки, где найден соответствующий том. Я пытался использовать sed и помещать найденные блоки в регистры, чтобы поместить их обратно, но нахожу это проблемой. Возможно, sed — не лучший инструмент — я пробовал augeas, и пока он добавляется, он не заменялся, а также терпел неудачу, если совпадающая строка не была найдена, но ее нужно было добавить (например, была видна только с помощью команды «mount», такой как / dev /шм).
например, если в /etc/fstab есть строка:
/dev/mapper/VolGroup1-tmp /tmp xfs dev,nosuid 0 0
я хочу сделать это
/dev/mapper/VolGroup1-tmp /tmp xfs nodev,nosuid,noexec 0 0
- Обратите внимание, что группа томов в первом блоке может иметь любое имя.
- КЛЮЧЕВОЕ СЛОВО в строке (в этом примере) будет /tmp (но будьте осторожны, чтобы не совпадать с /var/tmp, если не указано иное)
- Файловая система может быть любой (не обязательно xfs).
- Любой присутствующий «exec» или «suid» (например) необходимо заменить, если он присутствует, и даже если нет, вставить «noexec» или «nosuid».
- Конечный «0 0» необходимо сохранить.
Я уверен, что мне не хватает простого способа сделать это. Использование 'mount -o remount,noexec /tmp' не записывает в /etc/fstab, поэтому я думаю, что единственный способ сделать изменения постоянными - это напрямую отредактировать /etc/fstab?
На самом деле я собираюсь обернуть решение в Puppet. Приведенный ниже пример augeas терпит неудачу в двух отношениях:
если строка (например, /dev/shm) не существует в /etc/fstab, она не работает
если строка существует и имеет «exec», она добавляет «noexec», но также оставляет exec
augeas{ "/etc/fstab - ${opt} on ${mount}": context => '/files/etc/fstab', changes => [ "ins opt after /files/etc/fstab/*[file = '${mount}']/opt[last()]", "set *[file = '${mount}']/opt[last()] ${opt}", ], onlyif => "match *[file = '${mount}']/opt[. = '${opt}'] size == 0", notify => Exec["remount_${mount}_${opt}"],
}
Mount
вместо Augeas или странныхExec
. Конечно, это следует другой парадигме: предписывающей вместо реактивной. Первый тип гораздо лучше подходит для централизованного управления инфраструктурой, такой как Puppet. - person John Bollinger   schedule 04.10.2019sed
должно быть возможным. Я посмотрю что я могу сделать. - person John Bollinger   schedule 05.10.2019