저는 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를 완전히 끄지는 않습니다.
이것이 다른 사람들에게 도움이 되기를 바랍니다.
고마워요 브래드