Вопрос или проблема
Итак, у меня есть три файла, которые необходимо открыть для rsyslog, чтобы пересылать записи на другой сервер. SELinux предотвращает это с помощью следующей ошибки:
type=AVC msg=audit(1371186588.768:1324460): avc: denied { open } for pid=3714 comm="rsyslogd" name="named.debug.log" dev=dm-0 ino=1180551 scontext=unconfined_u:system_r:syslogd_t:s0 tcontext=unconfined_u:object_r:named_cache_t:s0 tclass=file
type=SYSCALL msg=audit(1371186588.768:1324460): arch=c000003e syscall=2 success=no exit=-13 a0=7fb254001b30 a1=80100 a2=180 a3=2e67756265642e64 items=0 ppid=1 pid=3714 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=7926 comm="rsyslogd" exe="/sbin/rsyslogd" subj=unconfined_u:system_r:syslogd_t:s0 key=(null)
Запустив это через audit2allow, я получил следующее:
module rsysloglocal 1.0;
require {
type named_cache_t;
type syslogd_t;
class file { read write };
}
#============= syslogd_t ==============
allow syslogd_t named_cache_t:file { read write };
К сожалению, это не работает. Я все еще получаю вышеуказанное сообщение от SELinux.
Файлы, которые я должен отслеживать с помощью rsyslog, находятся в /var/named/data/log/, поэтому SELinux ссылается на named_cache_t (я так думаю).
Есть какие-нибудь мысли?
Редактировать: вывод semodule -l:
abrt 1.2.0
accountsd 1.0.0
ada 1.4.0
afs 1.5.3
aiccu 1.0.0
aide 1.5.0
aisexec 1.0.0
amanda 1.12.0
amavis 1.10.3
amtu 1.2.0
apache 2.1.2
apcupsd 1.6.1
arpwatch 1.8.1
asterisk 1.7.1
audioentropy 1.6.0
automount 1.12.1
avahi 1.11.2
awstats 1.2.0
bind 1.10.2
bitlbee 1.2.1
bluetooth 3.2.2
boinc 1.0.0
bugzilla 1.0
cachefilesd 1.0.17
calamaris 1.5.1
canna 1.10.0
ccs 1.4.1
cdrecord 2.2.1
certmaster 1.0.2
certmonger 1.0.0
certwatch 1.5.0
cfengine 1.0.0
cgroup 1.0.0
chrome 1.0.0
chronyd 1.0.1
cipe 1.5.0
clamav 1.7.1
clogd 1.0.0
cloudform 1.0
cmirrord 1.0.0
cobbler 1.1.0
comsat 1.7.0
condor 1.0.0
consolekit 1.5.1
corosync 1.0.0
courier 1.8.1
cpufreqselector 1.1.0
ctdbd 1.0.0
cups 1.13.0
cvs 1.8.0
cyphesis 1.2.0
cyrus 1.9.1
daemontools 1.2.0
dbskk 1.5.0
dcc 1.8.2
denyhosts 1.0.0
devicekit 1.0.0
dhcp 1.8.1
dictd 1.7.0
dirsrv-admin 1.0.0
dirsrv 1.0.0
dnsmasq 1.8.1
dovecot 1.11.1
drbd 1.0.0
ethereal 2.0.0
execmem 1.0.0
exim 1.4.2
fail2ban 1.3.2
fcoemon 1.0.0
fetchmail 1.9.2
finger 1.9.0
firewallgui 1.0.0
fprintd 1.0.1
ftp 1.11.0
games 2.1.0
git 1.0.3
gitosis 1.0.1
glance 1.0.0
gnome 2.0.0
gnomeclock 1.0.0
gpg 2.2.1
gpm 1.7.1
gpsd 1.0.2
guest 1.0.1
hal 1.12.1
hddtemp 1.0.0
howl 1.8.1
icecast 1.0.0
inn 1.9.0
ipsec 1.10.2
irc 2.1.0
iscsi 1.6.2
jabber 1.8.0
java 2.2.1
kdump 1.0.1
kdumpgui 1.0.0
kerberos 1.10.2
kerneloops 1.3.1
keystone 1.0.0
kismet 1.4.2
ksmtuned 1.0.0
ktalk 1.7.1
ldap 1.10.0
likewise 1.0.0
lircd 1.0.1
livecd 1.0.0
lldpad 1.0.0
lockdev 1.3.0
logadm 1.0.0
lpd 1.12.0
mailman 1.7.2
matahari 1.0.0
mediawiki 1.0.0
memcached 1.1.2
milter 1.1.1
modemmanager 1.0.1
mono 1.6.1
mozilla 2.1.1
mpd 1.0.0
mplayer 2.1.0
mrtg 1.8.0
munin 1.7.0
mysql 1.11.3
nagios 1.8.0
namespace 1.0.0
ncftool 1.0.0
netlabel 1.3.0
nis 1.10.0
nova 1.0.0
nslcd 1.0.1
nsplugin 1.0.0
ntop 1.8.1
ntp 1.9.1
nut 1.0.1
nx 1.4.0
oddjob 1.7.0
openct 1.4.0
openoffice 1.0.0
openvpn 1.9.1
pads 1.0.0
passenger 1.0.0
pcscd 1.5.2
pegasus 1.8.0
permissivedomains 1.0.0
pingd 1.0.0
piranha 1.0.0
plymouthd 1.0.0
podsleuth 1.2.1
policykit 1.1.0
portmap 1.9.0
portreserve 1.1.1
postfix 1.11.0
postgresql 1.12.1
postgrey 1.7.0
ppp 1.11.2
prelude 1.1.2
privoxy 1.9.1
procmail 1.11.0
psad 1.0.0
ptchown 1.0.1
publicfile 1.1.0
pulseaudio 1.1.2
puppet 1.0.0
pyzor 2.1.0
qemu 1.3.2
qmail 1.5.0
qpidd 1.0.0
quantum 1.0.0
radius 1.11.0
radvd 1.11.2
razor 2.1.0
rdisc 1.7.1
remotelogin 1.7.0
rgmanager 1.0.0
rhcs 1.1.0
rhev 1.0
rhgb 1.9.0
rhsmcertd 1.0.0
ricci 1.6.0
rlogin 1.9.0
roundup 1.7.0
rpcbind 1.4.1
rshd 1.7.0
rssh 2.0.0
rsync 1.9.1
rsysloglocal 1.0
rtkit 1.0.1
rwho 1.6.0
samba 1.12.0
sambagui 1.0.0
sandbox 1.0.0
sanlock 1.0.0
sasl 1.12.1
sblim 1.0.0
screen 2.2.2
sectoolm 1.0.0
seunshare 1.1.0
sge 1.0.0
shutdown 1.0.0
slocate 1.9.0
smartmon 1.9.1
smokeping 1.0.0
smoltclient 1.0.0
snmp 1.10.2
snort 1.8.1
sosreport 1.0.0
soundserver 1.8.0
spamassassin 2.2.0
squid 1.9.0
sssd 1.0.2
staff 2.0.1
stunnel 1.9.0
sysadm_secadm 1.0.0
sysstat 1.5.1
tcpd 1.4.0
telepathy 1.0.0
telnet 1.9.1
tftp 1.12.0
tgtd 1.0.1
tmpreaper 1.4.0
tor 1.6.1
tuned 1.0.1
tvtime 2.0.0
ulogd 1.1.0
uml 2.1.0
unconfined 3.1.1
unconfineduser 1.0.0
unlabelednet 1.0
unprivuser 2.0.1
usbmodules 1.2.0
usbmuxd 1.0.0
userhelper 1.5.0
usernetctl 1.5.0
uucp 1.10.2
uuidd 1.0.0
varnishd 1.1.0
vdagent 1.0.0
vhostmd 1.0.0
virt 1.4.0
vmware 2.2.0
vpn 1.12.0
w3c 1.0.0
wdmd 1.0.0
webadm 1.1.0
webalizer 1.10.0
wine 1.6.1
xen 1.9.2
xfs 1.6.0
xguest 1.0.1
zabbix 1.2.0
zarafa 1.0.0
zebra 1.10.1
zosremote 1.1.0
Редактировать 2: Я также пробовал это с только правами на чтение (allow syslogd_t named_cache_t:file read;), а не на чтение / запись. Никакого успеха.
mkdir -p /opt/selinux/rsyslog
cd /opt/selinux/rsyslog
vi rsysloglocal.te
вставьте в rsysloglocal.te :
module rsysloglocal 1.0;
require {
type syslogd_t;
type auditd_log_t;
class dir { getattr open read search };
class file { getattr open read ioctl};
}
#============= syslogd_t ==============
#!!!! Этот avc разрешен в текущей политике
allow syslogd_t auditd_log_t:dir { getattr search open read };
allow syslogd_t auditd_log_t:file { getattr open read ioctl};
выполните команды:
checkmodule -M -m -o rsysloglocal.mod rsysloglocal.te; semodule_package -o rsysloglocal.pp -m rsysloglocal.mod; semodule -i rsysloglocal.pp
service auditd restart
service rsyslog restart
команды
service rsyslog status
и
tail -F /var/log/audit/audit.log
Может быть, без ошибок
Итак, мне наконец удалось устранить ошибки SELinux.
В итоге мне пришлось разрешить следующие атрибуты:
allow syslogd_t named_cache_t:file { read ioctl open getattr };
Я выяснил это, просто передав несколько процедур audit2allow, чтобы получить окончательный модуль. Я переименовал модуль в rsysloglocal.te. Мне пришлось вручную скомпилировать его, сделав следующее:
checkmodule -M -m -o rsysloglocal.mod rsysloglocal.te
semodule_package -o rsysloglocal.pp -m rsysloglocal.mod
semodule -i rsysloglocal.pp
Ответ или решение
Чтобы разрешить rsyslog
доступ к файлам в SELinux, необходимо создать специальный модуль, который позволит сервису rsyslogd
открывать и читать файлы, находящиеся в контексте named_cache_t
. Ваши шаги были почти правильными, но давайте я объясню процесс подробно и с учётом всех нюансов.
Шаги для разрешения доступа rsyslog к файлам
-
Создание каталога для модуля:
mkdir -p /opt/selinux/rsyslog cd /opt/selinux/rsyslog
-
Создание файла модуля:
Создайте файлrsysloglocal.te
и вставьте в него следующий код:module rsysloglocal 1.0; require { type syslogd_t; type named_cache_t; # тип для ваших файлов class file { read ioctl open getattr }; } # Разрешаем syslogd_t доступ к файлам типа named_cache_t allow syslogd_t named_cache_t:file { read ioctl open getattr };
-
Компиляция и установка модуля:
Выполните следующие команды для компиляции и загрузки модуля:checkmodule -M -m -o rsysloglocal.mod rsysloglocal.te semodule_package -o rsysloglocal.pp -m rsysloglocal.mod semodule -i rsysloglocal.pp
-
Перезапуск служб:
После установки модуля необходимо перезапустить службы, которые могут быть затронуты изменениями:service auditd restart service rsyslog restart
-
Проверка статуса rsyslog:
Для убедительности можно проверить статус службы:service rsyslog status
-
Мониторинг журнала аудита:
Чтобы убедиться, что ошибки в журнале аудита больше не появляются, выполните:tail -F /var/log/audit/audit.log
Дополнительные советы
-
Если после выполнения всех вышеописанных шагов ошибки продолжают появляться, убедитесь, что файлы, к которым пытается получить доступ
rsyslog
, действительно имеют правильный контекст SELinux. Вы можете проверить контекст с помощью командыls -Z /var/named/data/log/
. -
В случае необходимости вы можете использовать
restorecon
для восстановления контекста SELinux по умолчанию:restorecon -Rv /var/named/data/log/
-
Регулярно проверяйте журнал SELinux на наличие новых ошибок, чтобы своевременно реагировать на изменения.
Следуя указанным шагам и рекомендациям, вы сможете разрешить rsyslog
доступ к нужным файлам без возникновения ошибок SELinux.