SELinux đang ngăn NGINX viết thông qua PHP-FPM


8

Tôi đang sử dụng máy chủ để ghi vào điểm gắn kết loại NFS thông qua NGINX bằng cách sử dụng php-fpm . Ở bước đầu tiên, nó hiển thị cho tôi lỗi sau:

2017/01/16 11:32:59 [error] 55463#0: *22 FastCGI sent in stderr: "PHP message: PHP Warning:  mkdir(): Permission denied in /var/www/html/x/x.php on line 75
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 79
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 83
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 87
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 91
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 95
PHP message: PHP Warning:  move_uploaded_file(/mnt/x/x/x/x/x/x.z): failed to open stream: No such file or directory in /var/www/html/x/x.php on line 104
PHP message: PHP Warning:  move_uploaded_file(): Unable to move '/tmp/x' to '/mnt/x/x/x/x/x/x.z' in /var/www/html/x/x.php on line 104" while reading response header from upstream, client: IPADDR, server: _, request: "POST /convert/uploadFile HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "IPADDR", referrer: "http://IPADDR/xjob"

Lỗi 104 hoàn toàn tốt vì nó không thể mkdir và do đó không thể di chuyển bất cứ thứ gì vào thư mục.

Dù sao, sau đó, tôi nghĩ rằng nó có thể xảy ra do SELinux , vì vậy đã kiểm tra /var/log/messagenhưng không có gì được hiển thị. Vì vậy, nó có thể được đăng nhập audit.log, và nó đã được như vậy. Đây là Nhật ký của /var/log/audit.d/audit.log:

type=AVC msg=audit(1484554859.698:1415): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1415): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=4 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1416): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1416): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1417): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1417): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1418): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1418): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1419): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1419): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1420): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1420): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)

Tôi sẽ rất vui nếu ai đó có thể hướng dẫn tôi vượt qua vấn đề này. Nhân tiện, tôi không sẵn sàng vô hiệu hóa Selinux vì tôi đã làm nhiều thứ với nó.


CẬP NHẬT 1

Như @Dimitar đã nói, đây là cách đưa ra getsebool -a | grep -i http:

$ getsebool -a | grep -i http

httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> off
httpd_run_ipa --> off
httpd_run_preupgrade --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off
named_tcp_bind_http_port --> off
prosody_bind_http_port --> off

Và ngữ cảnh của các tệp giống như thư mục www được hiển thị bên dưới:

drwxr-xr-x. nginx nginx system_u:object_r:httpd_sys_content_t:s0 www

CẬP NHẬT 2

Sau khi sử dụng lệnh setsebool -P httpd_can_network_connect onnhư @Dimitar được cung cấp dưới dạng câu trả lời, aud.log của tôi trông như dưới đây:

nhập mô tả hình ảnh ở đây


CẬP NHẬT 3

Câu trả lời được cung cấp bởi @FarazX đã giải quyết vấn đề của tôi, nhưng như @Dimitar đã hỏi, đây là kết quả của sealert -a /var/log/audit.d/audit.log > somefile.txt:

*****  Plugin catchall (1.41 confidence) suggests   **************************

If you believe that php-fpm should be allowed setattr access on the 1395_10_27_jsAdminLog.txt file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'php-fpm' --raw | audit2allow -M my-phpfpm
# semodule -i my-phpfpm.pp


Additional Information:
Source Context                system_u:system_r:httpd_t:s0
Target Context                system_u:object_r:httpd_sys_content_t:s0
Target Objects                1395_10_27_jsAdminLog.txt [ file ]
Source                        php-fpm
Source Path                   /usr/sbin/php-fpm
Port                          <Unknown>
Host                          <Unknown>
Source RPM Packages           php-fpm-5.4.16-42.el7.x86_64
Target RPM Packages           
Policy RPM                    selinux-policy-3.13.1-102.el7_3.7.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     SETB0
Platform                      Linux SETB0 3.10.0-327.el7.x86_64 #1 SMP Thu Nov
                              19 22:10:57 UTC 2015 x86_64 x86_64
Alert Count                   1
First Seen                    2017-01-16 12:42:55 IRST
Last Seen                     2017-01-16 12:42:55 IRST
Local ID                      0076ec8b-214b-4379-b9f3-1523f46d6b36

Raw Audit Messages
type=AVC msg=audit(1484557975.199:1436): avc:  denied  { setattr } for  pid=55476 comm="php-fpm" name="1395_10_27_jsAdminLog.txt" dev="dm-0" ino=963720 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file


type=SYSCALL msg=audit(1484557975.199:1436): arch=x86_64 syscall=chmod success=yes exit=0 a0=7f36808c6cb8 a1=1ed a2=7f367b331100 a3=7f367b3080f0 items=0 ppid=55471 pid=55476 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm=php-fpm exe=/usr/sbin/php-fpm subj=system_u:system_r:httpd_t:s0 key=(null)

Hash: php-fpm,httpd_t,httpd_sys_content_t,file,setattr

Cảm ơn mọi người rất nhiều.


1
Bối cảnh /var/www/html/và subirs là gì? Ngoài ra, vui lòng thêm đầu ra củagetsebool -a | grep -i http
13dimitar

Đảm bảo đánh dấu câu trả lời FarazX là chính xác, như bạn đã chỉ ra rằng nó đã giải quyết vấn đề của bạn.
Tiến sĩ SB

Câu trả lời:


8

setsebool -P httpd_can_network_connect trên sẽ kích hoạt vĩnh viễn cờ sẽ giải quyết vấn đề của bạn.


Cảm ơn bạn rất nhiều vì đã phản hồi nhanh, nhưng nó không hoạt động :( Bạn có đoán được gì không?
Parsa Samet

Cập nhật câu hỏi của tôi cho một thời gian khác.
Parsa Samet

vui lòng cung cấp văn bản của audit.logtệp của bạn , HOẶC - chạy sealert -a /var/log/audit.d/audit.log > somefile.txt, sau đó cung cấp nội dung cho tệp đó
13dimitar

sealertđược cung cấp bởi setroubleshoot-server, vì vậy hãy cài đặt nó nếu bạn không có nó trên hệ thống của mình.
13dimitar

Điều này làm việc cho tôi. Tôi đoán là selinux xem kết nối từ nginx đến php-fpm dưới dạng kết nối mạng, ngay cả khi chúng ở trên cùng một máy.
jxmallett

5

Tôi khuyên bạn nên tải xuống các gói sau qua yum để bạn có thể dễ dàng tìm thấy sự cố của mình hơn:

$ yum -y install setroubleshoot-server setools-console

Bạn có thể xem Liên kết chính thức này để biết thêm thông tin về các gói SELinux.

Mặt khác, giá trị của httpd_use_nfs được đặt thành tắt trên hệ thống của bạn và tôi đoán đó sẽ là lý do tại sao bạn gặp lỗi. Vui lòng kích hoạt nó bằng cách sử dụng lệnh sau vì bạn đang sử dụng nfs và nếu nó không khắc phục được sự cố của bạn, vui lòng thực hiện như @Dimitar đã nói và cập nhật câu hỏi của bạn với sealert -a /var/log/audit.d/audit.log :

$ setsebool -P httpd_use_nfs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.