SELinux запрещает tcpdump записывать захваты в директорию с меткой var_log_t. Как разрешить эту проблему?

Прохожу курс “от 0 до Linux админа” здесь и столкнулся с проблемой: SELinux мешает tcpdump сохранять захваты в директорию с меткой var_log_t.

Моя цель - сохранить захваты tcpdump в /var/log/tcpdumpd, когда SELinux находится в режиме принуждения. Директория /var/log/tcpdumpd имеет тип контекста var_log_t, но SELinux блокирует сохранение туда через systemd-сервис. Я использую systemd-сервис для автоматизации выполнения tcpdump при загрузке системы. При попытке запустить сервис в режиме принуждения через systemctl start my-tcpdumpd.service, сервис не запускается и выдает ошибку: Couldn't change ownership of savefile. Сервис работает только при переводе SELinux в режим permissive.

Убедился, что директория /var/log/tcpdumpd/ принадлежит root и имеет права доступа 755, но это не помогает. Не могу изменить тип контекста для /var/log/tcpdumpd/ через semanage fcontext, так как там уже установлен контекст var_log_t (ls -lZ /var/log/).

Пробовал создать пользовательскую политику SELinux, используя ausearch -m AVC -c tcpdump --raw | audit2allow -M my_tcpdump_policy, который сгенерировал файлы my_tcpdump_policy.pp и my_tcpdump_policy.te. Хотелось бы понять, как должен выглядеть файл TE для создания работающей политики SELinux и получения метки pcap_data_t, которую можно будет присвоить директории /var/log/tcpdumpd/. Вот текущий вид моего скрипта:

module my_tcpdump_policy 1.0;

require { type netutils_t: class capability dac_override; }

============= netutils_t ==============

allow netutils_t self:capability dac_override; 

Буду признателен за любую помощь!

Привет!

Слушай, тут такая фигня приключилась с SELinux. Пытался запустить tcpdump, чтобы захватить трафик, но он уперся где-то в метках и не может записывать в директорию с меткой var_log_t. Я, короче, гуглил, как это исправить, но как-то неудачно.

Вот что конкретно пробовал:

  1. Изменил контекст директории – думал, может, кто-то менял настройки, поэтому пробовал поменять метку на var_t, чтобы tcpdump мог писать туда. Но нет, не катит. SELinux все равно ругался и говорит, что доступ запрещён.

  2. Задал временный режим permissive – думал, если переключу SELinux на permissive, то может он меня отпустит. Но, блин, даже с этим режимом tcpdump не смог записать файл. Система как будто знал, что я тут что-то мутю.

  3. Пробовал выставить нужные политики – искал, как добавить нужные правила через semanage и setsebool, но у меня там возникали ошибки, как будто у меня был хреновый доступ. Один раз чуть по стенке не ударился от того, что ничего не работает.

В общем, навязывался так-сяк, и никак не выходит это дело поднять.

Но потом нашел курс по SELinux на https://yodo.im/#courses, который реально помог мне разобраться с принципами работы и настройками. Вот сейчас уже соображаю, как можно исправить эти фейлы! Если ты тоже в этом деле, зацени курс – может, прокатит!

Так что, если у тебя есть еще идеи, как раскочегарить tcpdump, дай знать. Я пока охочусь за решениями.

Удачи!