SELinux 로그 회전 문제

SELinux 로그 회전 문제

주제가 상당히 인기 있는 것 같습니다... 그래서 logrotate에서 tomcat 로그를 회전할 수 없는 문제가 있다고 생각했습니다. Logrotate 구성은 /etc/logrotate.d/tomcat다음과 같이 설정됩니다 .

/opt/tomcat/apache-tomcat-8.5.37/logs/catalina.out
{
  daily
  missingok
  copytruncate
  rotate 15
}

logrotate.conf는 다음과 같습니다.

> cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 12

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
   ... skipped ...    
}

/var/log/btmp {
... skipped ...
}

에 보고된 문제는 audit.log다음과 같습니다.

type=AVC msg=audit(1580286181.904:9833967): avc:  denied  { write } for  pid=25982 comm="logrotate" name="catalina.out-20191228.gz" dev="dm-3" ino=16889774 scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file permissive=0
type=SYSCALL msg=audit(1580286181.904:9833967): arch=c000003e syscall=2 success=no exit=-13 a0=b392b0 a1=20002 a2=b392b0 a3=b39580 items=2 ppid=25980 pid=25982 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=72358 comm="logrotate" exe="/usr/sbin/logrotate" subj=system_u:system_r:logrotate_t:s0-s0:c0.c1023 key=(null)
type=CWD msg=audit(1580286181.904:9833967):  cwd="/"
type=PATH msg=audit(1580286181.904:9833967): item=0 name="/opt/tomcat/apache-tomcat-8.5.37/logs/catalina.out-20191228.gz" inode=16889774 dev=fd:03 mode=0100640 ouid=1008 ogid=1009 rdev=00:00 obj=unconfined_u:object_r:usr_t:s0 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1580286181.904:9833967): item=1 name="/opt/tomcat/apache-tomcat-8.5.37/logs/catalina.out-20191228.gz" inode=16889774 dev=fd:03 mode=0100640 ouid=1008 ogid=1009 rdev=00:00 obj=unconfined_u:object_r:usr_t:s0 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1580286181.904:9833967): proctitle=2F7573722F7362696E2F6C6F67726F74617465002D73002F7661722F6C69622F6C6F67726F746174652F6C6F67726F746174652E737461747573002F6574632F6C6F67726F746174652E636F6E66

그래서 나에게 신비한 것은 왜 logrotate가 정책에 따라 usr_t그 안에 있는 디렉터리와 파일에 태그가 지정된 경우 컨텍스트가 있는 파일을 생성하려고 시도하는지입니다.var_log_t

> semanage fcontext -l | grep logs
... skipped ...
/opt/tomcat/apache-tomcat-8.5.37/logs/             all files          system_u:object_r:var_log_t:s0
/opt/tomcat/apache-tomcat-8.5.37/logs              all files          system_u:object_r:var_log_t:s0
/opt/tomcat/apache-tomcat-8.5.37/logs/catalina.out all files          system_u:object_r:var_log_t:s0

추가로 문제를 해결하기 위한 단계는 무엇입니까?

(내가 Unix & Linux 섹션에 게시한 질문의 복사본입니다.)

답변1

그래서 문제가 해결되었습니다. 문제는 컨텍스트 정의에 있었습니다. 대신에 그 3가지 정의 모두

> semanage fcontext -l | grep logs
... skipped ...
/opt/tomcat/apache-tomcat-8.5.37/logs/             all files          system_u:object_r:var_log_t:s0
/opt/tomcat/apache-tomcat-8.5.37/logs              all files          system_u:object_r:var_log_t:s0
/opt/tomcat/apache-tomcat-8.5.37/logs/catalina.out all files          system_u:object_r:var_log_t:s0

적절한 교체가 도입되었습니다

/opt/tomcat/apache-tomcat-8.5.37/logs(/.*)?

관련 정보