Altimeme과 SELINUX

Altimeme과 SELINUX

저는 alterme(http://www.pldaniels.com/altermime/)는 이메일을 중간에 변경하는 postfix(SMTP 서버)용입니다. 스팸 때문에 저는 우리 서버에서 보내는 모든 이메일에 "X-ListUnsubscribe" 헤더를 삽입합니다.

Altimeme은 /var/spool/filter에 쓸 수 있어야 합니다(보통 postfix는 /var/spool/postfix에 쓴다고 생각합니다). 어쨌든 SELinux를 비활성화하면 이 모든 것이 잘 작동하지만 활성화하면 충돌이 발생합니다.

단순히 SELinux를 끄고 끝내고 싶은 유혹이 있을 수도 있지만, 나는 이런 방식으로 내 컴퓨터의 보안을 손상시키고 싶지 않습니다. 그래서 /var/spool/filter에 쓸 수 있도록 SELinux를 수정해 보았습니다.

나는 시도했다:

 cat /var/log/audit/audit.log | audit2why 

이는 예외를 보여줍니다(아래에 포함하겠습니다).

나는 이것을 여러 번 해왔습니다:

 audit2allow -M altermime < /var/log/audit/audit.log
 semodule -i altermime.pp

그러나 이것은 작동하지 않는 것 같습니다. 나는 이것이 audit2allow가 차단된 개별 파일(/var/spool/filter/xxxx)과 전체 디렉토리(/var/spool/filter/*)의 이름을 지정하기 때문이라고 가정합니다. 액세스를 허용하도록 정책을 생성하거나 SELinux를 변경하는 방법을 모르겠습니다.

다음은 2why에 대한 내 리뷰에서 발췌한 내용입니다.

type=AVC msg=audit(1409231063.712:263024): avc:  denied  { add_name } for  pid=21280 comm="disclaimer" name="in.21279" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
    Was caused by:
            Missing type enforcement (TE) allow rule.
            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1409231065.905:263025): avc:  denied  { add_name } for  pid=21285 comm="disclaimer" name="in.21284" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
    Was caused by:
            Missing type enforcement (TE) allow rule.
            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1409231067.380:263026): avc:  denied  { add_name } for  pid=21289 comm="disclaimer" name="in.21288" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
    Was caused by:
            Missing type enforcement (TE) allow rule.
            You can use audit2allow to generate a loadable module to allow this access.

답변1

나는 내 자신의 질문에 답할 것입니다. 먼저 나는 다음을 수행했습니다.

semodule -l | grep mymodulename

(mymodulename을 가져온 이전 모듈로 바꾸십시오). 이전에 모듈을 가져온 적이 없다면 이 단계를 건너뛰세요.

그런 다음 이 명령을 실행하여 이전에 가져온 모듈을 모두 제거합니다. 이전 모듈을 가져오지 않은 경우 이 단계를 다시 건너뜁니다.

semodule -r names_of_modules_returned_from_prior_command

이제 "깨끗한" 상태로 돌아가야 합니다.

그런 다음 다음 명령을 실행하여 selinux를 권한(모니터/로그, 차단 아님)으로 설정합니다.

setenforce 0

getenforce를 실행하고 다음을 반환하는지 확인하세요.

SELinux 로그를 지우려면 다음 명령을 실행하십시오.

echo "" >/var/log/audit.log

selinux가 /var/log/audit/audit.log에 새 로그 항목을 생성할 때까지 최소 15-20분 정도 기다립니다.

그런 다음 다음 명령을 실행하여 포괄적인 selinux 정책을 만듭니다.

cat /var/log/audit/audit.log | audit2allow -m yourname >yourname.te

그런 다음 .te 파일을 확인하고 .mod 파일(?)을 생성하는 다음 명령을 실행합니다.

checkmodule -M -m -o yourname.mod yourname.te

다음으로 다음 명령을 사용하여 .mod 파일을 바이너리 .pp 파일로 컴파일합니다.

 semodule_package -m yourname.mod  -o yourname.pp

마지막으로 모듈을 설치합니다.

 semodule -i yourname.pp

잠시 동안 /var/log/audit/audit.log를 모니터링하고 새 항목이 나타나지 않는지 확인하십시오.

cat /var/log/audit/audit.log | audit2why

새 항목이 나타나지 않으면 selinux를 다시 적용하도록 설정하십시오.

setenforce 1

이것은 나에게 효과적인 것 같습니다. 필요한 것보다 약간 느슨할 수도 있지만 적어도 SELinux를 완전히 끄지는 않습니다.

이것이 다른 사람들에게 도움이 되기를 바랍니다.

고마워요 브래드

관련 정보