SELinux: httpd가 MySQL에서 임시 파일을 삭제하도록 허용하는 방법은 무엇입니까?

SELinux: httpd가 MySQL에서 임시 파일을 삭제하도록 허용하는 방법은 무엇입니까?

설정은 다음과 같습니다. /tmpPHP가 선택하고 처리할 수 있도록 MySQL 덤프 테이블을 허용합니다(실제 데이터는 없고 숫자만 포함함). 이후에는 임시 파일이 더 이상 필요하지 않으므로 PHP( unlink)로 삭제합니다.

물론 SELinux는 이것을 좋아하지 않습니다. MySQL이 읽기/쓰기를 하고 PHP가 읽기/쓰기를 할 수 있도록 설정할 수 있지만 /tmp, PHP가 MySQL이 생성한 파일을 삭제하려고 하면 그럴 수 없습니다. 나는 그것이 '끈적끈적한 비트'와 관련이 있을 것이라고 생각했지만 /tmp그것은 아무런 차이가 없습니다.

이 문제에 대한 적절한 해결책을 실제로 찾을 수 없습니다. 대부분의 솔루션은 다른 사람의 파일을 삭제하지 않고 PHP(또는 httpd 사용자)가 디렉토리를 읽고 쓸 수 있도록 만드는 문제를 해결합니다.

참고: SELinux를 끄면 PHP는 문제 없이 파일을 삭제합니다. 따라서 SELinux 방식을 변경해야 하는 것은 분명합니다. 하지만 가장 좋은 접근 방식은 무엇입니까?

답변1

내 의견에 따르면 audit2allow.

  1. 문제가 되는 규칙을 검색합니다 /var/log/audit/audit.log(MySQL이 작성한 파일의 파일 이름을 사용했습니다).
  2. 규칙을 파이프 audit2allow하고 검토합니다.grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
  3. 2단계에서 얻었 allow httpd_t mysqld_tmp_t:file unlink;기 때문에 제가 추구했던 것과 정확히 같았습니다. 그 결과로 나는 새로운 모듈을 만들었습니다: grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp. 그러면 .라는 파일이 생성됩니다 tmp.pp.
  4. 모듈 파일을 가져옵니다.semodule -i tmp.pp

관련 정보