Centos 8 서버에서는 /mnt/data에 더 큰 디스크를 마운트했습니다. 서버는 외부 시스템의 로그를 /mnt/data/logs/$HOSTNAME에 기록하는 정책이 있는 rsyslogd를 실행합니다. 지금 겪고 있는 문제는 /mnt/data/logs에 대한 selinux fcontext가 "syslogd_var_lib_t"로 설정된 경우 logrotate가 로그를 회전하지 않거나 fcontext가 설정된 경우 rsyslod가 파일에 데이터를 쓰지 않는다는 것입니다. "logrotate_var_lib_t"로.
bool이 "*anon_write 1"로 설정된 samba 및 httpd에 대한 여러 솔루션을 찾았지만 syslog 및 logrotate의 경우 bool이 표시되지 않습니다.
selinux가 /mnt/data/logs에서 logrotate와 rsyslogd를 모두 허용하도록 하는 방법이 있습니까?
fcontext는 /mnt/data/logs의 sealert 출력에 대해 "logrotate_var_lib_t"로 설정됩니다.
SELinux is preventing /usr/sbin/rsyslogd from append access on the file 10.9.7.15.log.
***** Plugin catchall (100. confidence) suggests **************************
If you believe that rsyslogd should be allowed append access on the 10.9.7.15.log file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'rs:main Q:Reg' --raw | audit2allow -M my-rsmainQReg
# semodule -X 300 -i my-rsmainQReg.pp
Additional Information:
Source Context system_u:system_r:syslogd_t:s0
Target Context system_u:object_r:logrotate_var_lib_t:s0
Target Objects 10.9.7.15.log [ file ]
Source rs:main Q:Reg
Source Path /usr/sbin/rsyslogd
Port <Unknown>
Host HAMS010125.global.bdfgroup.net
Source RPM Packages rsyslog-8.1911.0-6.el8.x86_64
Target RPM Packages
SELinux Policy RPM selinux-policy-targeted-3.14.3-54.el8.noarch
Local Policy RPM selinux-policy-targeted-3.14.3-54.el8.noarch
Selinux Enabled True
Policy Type targeted
Enforcing Mode Enforcing
Host Name HAMS010125.global.bdfgroup.net
Platform Linux HAMS010125.global.bdfgroup.net
4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19
17:20:08 UTC 2020 x86_64 x86_64
Alert Count 68679
First Seen 2021-03-30 07:47:58 CEST
Last Seen 2021-03-30 10:47:03 CEST
Local ID 5ee9e182-0188-4ac8-b28e-5c8c9ab18933
Raw Audit Messages
type=AVC msg=audit(1617094023.794:76568): avc: denied { append } for pid=1452 comm=72733A6D61696E20513A526567 n
ame="10.9.7.15.log" dev="dm-3" ino=23330820 scontext=system_u:system_r:syslogd_t:s0 tcontext=system_u:object_r:log
rotate_var_lib_t:s0 tclass=file permissive=0
type=SYSCALL msg=audit(1617094023.794:76568): arch=x86_64 syscall=openat success=no exit=EACCES a0=ffffff9c a1=7f8
2b40a4fa0 a2=80541 a3=1a4 items=0 ppid=1 pid=1452 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0
fsgid=0 tty=(none) ses=4294967295 comm=rs:main Q:Reg exe=/usr/sbin/rsyslogd subj=system_u:system_r:syslogd_t:s0 ke
y=(null)
Hash: rs:main Q:Reg,syslogd_t,logrotate_var_lib_t,file,append
sealert 출력, /mnt/data/logs의 fcontext가 "syslogd_var_lib_t"로 설정됩니다.
SELinux is preventing /usr/sbin/logrotate from read access on the file 10.9.7.16.log.
***** Plugin catchall (100. confidence) suggests **************************
If you believe that logrotate should be allowed read access on the 10.9.7.16.log file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'logrotate' --raw | audit2allow -M my-logrotate
# semodule -X 300 -i my-logrotate.pp
Additional Information:
Source Context system_u:system_r:logrotate_t:s0-s0:c0.c1023
Target Context system_u:object_r:syslogd_var_lib_t:s0
Target Objects 10.9.7.16.log [ file ]
Source logrotate
Source Path /usr/sbin/logrotate
Port <Unknown>
Host HAMS010125.global.bdfgroup.net
Source RPM Packages
Target RPM Packages
SELinux Policy RPM selinux-policy-targeted-3.14.3-54.el8.noarch
Local Policy RPM selinux-policy-targeted-3.14.3-54.el8.noarch
Selinux Enabled True
Policy Type targeted
Enforcing Mode Enforcing
Host Name HAMS010125.global.bdfgroup.net
Platform Linux HAMS010125.global.bdfgroup.net
4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19
17:20:08 UTC 2020 x86_64 x86_64
Alert Count 8
First Seen 2021-03-26 02:51:01 CET
Last Seen 2021-03-29 02:51:01 CEST
Local ID 9ee8b323-1833-484b-b7c7-4b746c30d60b
Raw Audit Messages
type=AVC msg=audit(1616979061.951:6206): avc: denied { read } for pid=632546 comm="logrotate" name="10.9.7.16.$
og" dev="dm-3" ino=23330825 scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023 tcontext=system_u:object_r:sysl$
gd_var_lib_t:s0 tclass=file permissive=0
Hash: logrotate,logrotate_t,syslogd_var_lib_t,file,read
어떤 조언이라도 감사드립니다.
답변1
와 동일한 태그를 사용하여 로그 디렉터리에 레이블을 지정할 수 있습니다 /var/log
. 그러면 Restorecon 호출이 적용됩니다.
semanage fcontext -a -t var_log_t /mnt/data/logs
restorecon /mnt/data/logs
아래의 실제 파일이 rsyslog에 의해 생성되고 logrotate를 사용하여 회전되는 한 /mnt/data/logs
작동합니다. $HOSTNAME
설정에 따라 디렉터리 에 태그를 지정해야 할 수도 있습니다 .
보다 올바른 접근 방식은 필요한 작업을 허용하는 자체 selinux 정책을 만드는 것입니다. 이는 관련 audit.log
라인과 도구를 사용하여 자동으로 수행할 수 있습니다 audit2allow
.
또 다른 가능성은 selinux를 설정하여 logrotate를 허용하는 것입니다 semanage permissive -a logrotate_t
. rsyslog도 마찬가지입니다.하지만이는 logrotate 또는 rsyslog가 이상해질 경우 시스템 전체 보호를 효과적으로 제거하므로 권장하지 않습니다.