[PHP/SElinux] opcache JIT 기능을 켰을 때의 '502 Bad Gateway'

502 Bad Gateway (nginx error)

  PHP에 들어간 opcache의 JIT 기능을 켜면 '502 Bad Gateway' 오류가 떴는데, Selinux를 끄면 오류가 나지 않으므로 SELinux에 원인이 있었다.

  Centos Stream 9로 돌리는 웹 서버에서는 Selinux를 끄고 php-fpm을 다시 실행하면 502 오류가 다시 뜨지 않았지만, 알마리눅스(AlmaLinux) 9.4로 돌리는 웹 서버는 Selinux를 끄면 502 오류가 다시 나왔다.

  audit2why와 audit2allow로 audit 로그(audit.log)와 해결 정보를 살폈다.

# audit2why < /var/log/audit/audit.log
...
type=AVC msg=audit(1720401420.710:1162): avc: denied { execmem } for pid=2633 comm="php-fpm" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process permissive=1

Was caused by:
The boolean httpd_execmem was set incorrectly.
Description:
Allow httpd to execmem

Allow access by executing:
# setsebool -P httpd_execmem 1
...
# audit2allow -a

#============= httpd_t ==============

#!!!! This avc can be allowed using the boolean 'httpd_unified'
allow httpd_t httpd_user_content_t:dir create;

#!!!! This avc can be allowed using the boolean 'httpd_execmem'
allow httpd_t self:process execmem;
allow httpd_t var_run_t:file { read write };
...

  httpd_execmem에 관한 권한이 원인이었던 것 같다. [SELinux] recv() failed (104: Connection reset by peer) while reading response header from upstream...에서 이야기한 nginx-passenger.te 파일에 아래 내용을 더 넣어 주었다.

module nginx-passenger 1.0;
require {
...
#============= httpd_t ==============
...
allow httpd_t self:process execmem;
allow httpd_t var_run_t:file { read write };

...

그리고 보안 규칙을 다시 적용시킨다.

# checkmodule -M -m -o nginx-passenger.mod nginx-passenger.te
checkmodule: loading policy configuration from nginx-passenger.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 19) to nginx-passenger.mod

# semodule_package -o nginx-passenger.pp -m nginx-passenger.mod
# semodule -i nginx-passenger.pp

  보안 규칙을 다시 적용한 뒤에는 opcache의 JIT 기능을 켜도 502 bad gatewate가 뜨지 않았다.

  보안 규칙을 적용하지 않고, 위에 나온 것처럼 'setsebool -P httpd_execmem 1'를 실행하는 방법을 쓸 수도 있을 것이다.

※ 참고

Nginx PHP-FPM SELinux 정책 추가 내역 | Hoing

 

2024/07/08 10:49 2024/07/08 10:49
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요