Демон rsync с применением политики selinux rsync _export _all _ro по-прежнему запрещает доступ к файлам в /var/spool/postfix/private/

Вы спрашиваете о «страхе и презрении к сценариям». Это происходит из-за ситуации Q+A, где ответ часто говорит:Требуется этот шаг и это, но я также могу поместить его в одну строку (, чтобы вы могли скопировать его и использовать как длинный простая команда ).

Иногда вы можете только догадываться, лучше ли Q обслуживает быстрое и грязное решение для копирования и вставки, или «хороший» сценарий — это именно то, что Q должен понять.

Многие плюсы и минусы здесь верны, но все же они упускают суть. Я бы даже сказал, что определения в Q бесполезны.

Файлы оболочки истории являются "однострочными", но тем не менее сохраняются. Функция bash operate-and-get-next (C-o)даже позволяет вам автоматически повторять их наполовину -.

Я почти не вижу упоминания слова функция . Таким образом можно хранить как «скрипты», так и «один лайнер». И с помощью нескольких нажатий клавиш вы можете переключаться между обоими форматами. Составная команда часто может соответствовать обоим.

history -r file— это способ чтения одной или нескольких командных строк (и комментариев )из любого файла, а не только из файла истории по умолчанию. Это просто требует некоторой минимальной организации. Вы не должны полагаться на большой размер файла истории и поиск по истории для извлечения (некоторой )версии командной строки.

Функции должны быть определены аналогичным образом. Для начала поместите thisfunc() {...}в файл «функции» в вашем домашнем каталоге и загрузите его. Да, это некоторые накладные расходы, но это общее решение.

Если вы храните каждую командную строку и каждый вариант скрипта в отдельном файле, это (теоретическая, но объективная )трата блоков файловой системы.

Один -лайнер сам по себе не имеет ничего быстрого и грязного. Это скорее часть копирования -вставки, которая немного не одобряется, и то, как мы просто полагаемся на историю команд, чтобы сохранить ее для нас.


@sitaram :ваш один лайнер действительно имеет un -onelinerish функции :строка shebang, новая строка, четыре служебных вызова -два из них sed "программы". Я думаю, что исходный сценарий perl выглядел лучше, работал быстрее и не терял ни одного байта, растянувшись на 60 строк. И Perl также позволяет вам немного сжимать.

Для меня это именно тот вкладыш, которого следует избегать. Хотели бы вы, чтобы (вставили )в вашу командную строку? Нет, и затем, если вы все равно сохраните его в файле (независимо от сценария или функции ), вы можете вложить два или три байта новой строки -, чтобы он выглядел ---красиво.


10 мин. позже :Я просто хотел проверить, могу ли я сказать "две программы sed" или это "две подстановки/вызова sed". Но ответа ситарама больше нет. Надеюсь, мой ответ все еще имеет смысл.

3
06.08.2019, 22:18
1 ответ

Вы правы, не желая отключать SELinux для домена rsync_t. К сожалению, несмотря на то, что возможности настройки реализации SELinux для rsync довольно обширны, существуют пограничные случаи, когда установка rsync_export_all_roлогического значения по-прежнему не разрешает демону rsync доступ к определенным файлам. Существует одна запись Bugzilla , которая очень похожа на ваши проблемы. Приведенное там предложение состоит в том, чтобы использовать rsync_full_accessдля преодоления проблемы, хотя и с нарушением безопасности (все же лучше, чем semanage permissive -a rsync_t, хотя ).

Создание пользовательского модуля политики

Итак, чтобы ответить на ваш вопрос, если вы хотите использовать более безопасный вариантrsync_export_all_roи иметь возможность разрешить демону rsync доступ к файлам/каталогам «пограничного случая», вам нужно создать свой собственный модуль политики..

Это достигается за счет того, что демон rsync выполняет свою работу в разрешительном режиме, перехватывая отказы AVC по мере их продвижения, а затем преобразовывая отказы AVC в политику, например:

# put SELinux in permissive mode
setenforce 0

# --- do your rsync stuff ---

# get related AVC denials
# I'm using 'recent' here, depending on the rsync run time please adjust accordingly
ausearch -m avc -ts recent --subject rsync_t

# go through the output. If you're satisfied, create the module
ausearch -m avc -ts recent --subject rsync_t | audit2allow -m roaima-rsync-custom-1 > roaima-rsync-custom-1.te
checkmodule -M -m -o roaima-rsync-custom-1.mod roaima-rsync-custom-1.te
semodule_package -o roaima-rsync-custom-1.pp -m roaima-rsync-custom-1.mod

# load the policy module
semodule -i roaima-rsync-custom-1.pp

# disable permissive mode
setenforce 1

# --- do your rsync stuff again --

Перехват отказов AVC, которые не проверены ("dontaudit")

Если по какой-то причине файлы «пограничного случая» по-прежнему недоступны, а команда ausearchне дает результатов, возможно, вы сталкиваетесь с правилом «не проводить аудит».

Чтобы перестроить политику SELinux, игнорирующую все правила «dontaudit» -, запустите semodule -DB. Опция -Dотключает правила «dontaudit»; опция -Bперестраивает политику.

Затем попробуйте инициировать события журнала аудита. Если это так, захватите их, как показано выше, создайте модуль SELinux,а затем снова -включите правила «dontaudit», выполнив:semodule -B.

Чтобы просмотреть полный список правил «dontaudit», введите команду sesearch --dontaudit. Сузьте поиск, используя параметр домена -sи команду grep. Например :sesearch --dontaudit -s rsync_t.

4
27.01.2020, 21:29

Теги

Похожие вопросы