LINUX.ORG.RU
ФорумAdmin

Управление iptables из скрипта apache. Проблемы с SELinux


0

1

Здравтвуйте. Написал простенький скрипт execipt.sh, вот кусочек из него:
-------------------------------------------
#!/bin/sh
sudo /sbin/iptables -I INPUT -s $REMOTE_ADDR -p tcp --match multiport --dports 1\:65535 -j DROP
-------------------------------------------

Его права и SELinux:
$ ls -alrZ execipt.sh
-rwxr-xr-x root root system_u:object_r:httpd_sys_content_t execipt.sh

В файле /etc/sudoers есть запись
apache ALL=(ALL) NOPASSWD: /sbin/iptables -I INPUT -s * -p tcp --match multiport --dports 1\:65535 -j DROP

До этого момента все работает. Апач запускает скрипт, команда из скрипта разрешена на выполнение в sudoers, срабатывает без ошибок

Все работает при условии если SELinux в файле /etc/sysconfig/selinux стоит как permissive. Само собой выключать SELinux не есть гуд

Вопрос: как запустить всю эту кухню с включенным (enforcing) SELinux
Да, еще, когда он включен, вылетает ошибка:
sudo: unable to change to sudoers gid: Operation not permitted

Буду рад услышать любые идеи
CentOS 5.4 iptables v1.3.5


Ответ на: комментарий от nnz

grep AVC /var/log/audit/audit.log | tail

type=AVC msg=audit(1292015114.844:13): avc: denied { read write } for pid=3078 comm=«iptables» path=«socket:[13162]» dev=sockfs ino=13162 scontext=system_u:system_r:iptables_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=unix_stream_socket
type=AVC msg=audit(1292015114.881:14): avc: denied { read write } for pid=3091 comm=«iptables» path=«socket:[13072]» dev=sockfs ino=13072 scontext=system_u:system_r:iptables_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=unix_stream_socket

dromer
() автор топика
Ответ на: комментарий от nnz

Не знаю, но думаю мне надо объяснить SELinux-су что этому скрипту разрешено управлять iptables. Потому что без SELinux, я имею свое ожидаемое срабатывание - бан ip в iptables

dromer
() автор топика
Ответ на: grep AVC /var/log/audit/audit.log | tail от dromer
cat << EOF
module iptsocket 1.0;
require {
        type iptables_t;
        type initrc_t;
        class unix_stream_socket { read write };
}
allow iptables_t initrc_t:unix_stream_socket { read write };
EOF > iptsocket.te
checkmodule -M -m -o iptsocket.mod iptsocket.te
semodule_package -o iptsocket.pp -m iptsocket.mod
semodule -i iptsocket.pp

После этого должно заработать.

nnz ★★★★
()
Ответ на: комментарий от nnz

Спасибо nnz!

Я погружаюсь в гугл и в теорию. Ибо этим модулем ты меня сильно напугал. Почувствовал себя блондинкой. Что это такое вкратце, если не трудно?

dromer
() автор топика
Ответ на: Спасибо nnz! от dromer

Это просто правило, разрешающее iptables работать с сокетами из контекста initrc_t (из которого, видимо, запускается твой бан-скрипт).

Так как у selinux правила поодиночке не ходят, пришлось оформлять в модуль, компилировать и подгружать его.

nnz ★★★★
()
Ответ на: комментарий от nnz

ох, вспомню как писал подобные модули на генту... нехорошо становится мне )

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.