내 친구가 SELinux를 사용하는 데 어려움을 겪고 있습니다. 서버는 대상 정책을 사용하여 시행 모드에서 SELinux를 구성합니다.
Puppet을 사용하는 경우 restorecon
또는 chcon
,SELinux가 시행 모드에 있지 않더라도 이 오류가 발생합니다.
# chcon -t oddjob_t /etc/tt
chcon: failed to change context of `/etc/oddjobd.conf.d' to `unconfined_u:object_r:oddjob_t:s0': Permission denied
여기에는 다음이 /var/log/audit/audit.log
포함됩니다.
type=AVC msg=audit(1429628369.080:338935): avc: denied { relabelto } for pid=3629 comm="chcon" name="oddjobd.conf.d" dev=dm-0 ino=39413 scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:oddjob_t:s0 tclass=dir
type=SYSCALL msg=audit(1429628369.080:338935): arch=c000003e syscall=188 success=no exit=-13 a0=12f20e0 a1=3edf0162d9 a2=12f3620 a3=22 items=0 ppid=1206 pid=3629 auid=2006 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=25771 comm="chcon" exe="/usr/bin/chcon" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
비슷한 접근 방식을 사용하면 restorecon
실패했습니다.
# restorecon -Rv /etc
restorecon reset /etc/oddjobd.conf.d context system_u:object_r:etc_t:s0->system_u:object_r:oddjob_t:s0
restorecon set context /etc/oddjobd.conf.d->system_u:object_r:oddjob_t:s0 failed:'Permission denied'
여기에는 다음이 /var/log/audit/audit.log
포함됩니다.
type=AVC msg=audit(1429628361.258:338934): avc: denied { relabelto } for pid=3627 comm="restorecon" name="oddjobd.conf.d" dev=dm-0 ino=39409 scontext=unconfined_u:unconfined_r:setfiles_t:s0-s0:c0.c1023 tcontext=system_u:object_r:oddjob_t:s0 tclass=dir
type=SYSCALL msg=audit(1429628361.258:338934): arch=c000003e syscall=189 success=no exit=-13 a0=7fdb4b1d5190 a1=7fdb49e762d9 a2=7fdb4b1d50f0 a3=1e items=0 ppid=1206 pid=3627 auid=2006 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=25771 comm="restorecon" exe="/sbin/setfiles" subj=unconfined_u:unconfined_r:setfiles_t:s0-s0:c0.c1023 key=(null)
그는 루트로 로그인되어 있습니다. Bash 쉘은 제한이 없습니다( id -Z
).
그럼 무엇이 잘못됐나요?
답변1
oddjob_t
글쎄, 내 친구가 잘못된 파일 형식( 파일 컨텍스트가 아닌 프로세스 컨텍스트) 을 사용하려고 했다는 것이 밝혀졌습니다.
해당 디렉토리의 컨텍스트 유형을 다른 유형으로 변경하면 문제가 없습니다(예: chcon -t etc_t /etc/oddjobd.conf.d
).
seinfo
어떤 파일 형식이 있는지 확인하는 데 사용할 수 있습니다 .
# seinfo -afile_type -x | grep "oddjob"
oddjob_var_run_t
oddjob_exec_t
oddjob_mkhomedir_exec_t
restorecon
내 친구가 잘못된 파일 컨텍스트를 삽입했기 때문에 실행 도 실패했습니다.
semanage fcontext --add -t oddjob_t "/etc/oddjobd.conf.d(/.*)?"
그래서 나는 그 잘못된 규칙을 제거했습니다(전혀 필요하지 않았습니다):
semanage fcontext --list | grep "oddjob_t"
semanage fcontext -d -t oddjob_t "/etc/oddjobd.conf.d(/.*)?"
추신: 이 블로그 게시물이 이 문제를 해결하는 데 매우 유용하다고 생각했습니다. Dan Walsh의 블로그: SELinux 유형 재검토.