설정은 다음과 같습니다. /tmp
PHP가 선택하고 처리할 수 있도록 MySQL 덤프 테이블을 허용합니다(실제 데이터는 없고 숫자만 포함함). 이후에는 임시 파일이 더 이상 필요하지 않으므로 PHP( unlink
)로 삭제합니다.
물론 SELinux는 이것을 좋아하지 않습니다. MySQL이 읽기/쓰기를 하고 PHP가 읽기/쓰기를 할 수 있도록 설정할 수 있지만 /tmp
, PHP가 MySQL이 생성한 파일을 삭제하려고 하면 그럴 수 없습니다. 나는 그것이 '끈적끈적한 비트'와 관련이 있을 것이라고 생각했지만 /tmp
그것은 아무런 차이가 없습니다.
이 문제에 대한 적절한 해결책을 실제로 찾을 수 없습니다. 대부분의 솔루션은 다른 사람의 파일을 삭제하지 않고 PHP(또는 httpd 사용자)가 디렉토리를 읽고 쓸 수 있도록 만드는 문제를 해결합니다.
참고: SELinux를 끄면 PHP는 문제 없이 파일을 삭제합니다. 따라서 SELinux 방식을 변경해야 하는 것은 분명합니다. 하지만 가장 좋은 접근 방식은 무엇입니까?
답변1
내 의견에 따르면 audit2allow
.
- 문제가 되는 규칙을 검색합니다
/var/log/audit/audit.log
(MySQL이 작성한 파일의 파일 이름을 사용했습니다). - 규칙을 파이프
audit2allow
하고 검토합니다.grep {offending rule name} /var/log/audit/audit.log | audit2allow -a
- 2단계에서 얻었
allow httpd_t mysqld_tmp_t:file unlink;
기 때문에 제가 추구했던 것과 정확히 같았습니다. 그 결과로 나는 새로운 모듈을 만들었습니다:grep {offending rule name} /var/log/audit/audit.log | audit2allow -a -M tmp
. 그러면 .라는 파일이 생성됩니다tmp.pp
. - 모듈 파일을 가져옵니다.
semodule -i tmp.pp