증상

다음과 비슷한 로그 발생

Sep 26 15:01:20 myhost kernel: type=1400 audit(1380175280.277:43): avc:  denied  { search } for  pid=22929 comm="mysqld" name="/" dev=dm-10 ino=2 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=dir

Log 분석

  1. 위 내용을 selinux.log 로 저장
  2. audit2why < selinux.log 명령어로 왜 access denied 가 발생했는데 번역

위의 로그를 번역하면 다음과 같은 내용임

Sep 25 17:04:36 myhost kernel: type=1400 audit(1380096276.116:39): avc: denied { open } for pid=29442 comm="mysqld" name="db.opt" dev=dm-10 ino=24240138 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=file

Was caused by:
Missing type enforcement (TE) allow rule.

You can use audit2allow to generate a loadable module to allow this access.

원인

SELinux policy 의 버그

  1. SELinux policy 가 버그가 있어서 특정 daemon 등이 구동 안 될 경우가 있음.
  2. yum check-update selinux-policy* 로 update 확인후 update 가 있으면 policy update 수행

Type Enforcement (TE) rule 이 미존재

  1. audit2allow -a 로 존재하지 않는 TE rule 확인

    ~]# audit2allow -a
    
    #============= certwatch_t ==============
    allow certwatch_t var_t:dir write;
    BASH

     

  2. audit2allow -a -M mycertwatch  명령어로 custom TE 파일 생성( -m옵션은 .te 생성하는 옵션)

    ~]# audit2allow -a -M mycertwatch
    
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:
    
    semodule -i mycertwatch.pp
    
    ~]# ls
    mycertwatch.pp  mycertwatch.te
    BASH

     

  3. semodule -i mycertwatch2.pp 로 해당 SELinux module 활성화

  4.  

Ref