服務 php-fpm 沒有獲得使用者權限
我對 php-fpm 有疑問。它實際上是php7版本。我有drupal,它會抱怨某些目錄不可寫。只有當我將 php-fpm 作為這樣的服務啟動時:
#service php-fpm 啟動
我在埠 127.0.0.1:9000 中使用 nginx 作為 Web 伺服器和 php-fpm。這是我在 /etc/php-fpm.d/www.conf 中的 conf:
; Start a new pool named 'www'. [www] user = nginx group = nginx listen = 127.0.0.1:9000
所有 web 的文件 - drupal - 都屬於 nginx:nginx。如果我啟動服務,要麼
#service php-fpm 啟動
或者
#systemctl 啟動 php-fpm
它會抱怨權限,即使 ps 顯示了這一點(ps aux | grep php-fpm):
root 1591 0.0 0.8 528916 31260 ? Ss 07:49 0:00 php-fpm: master process (/etc/php-fpm.conf) nginx 1593 0.0 2.2 567252 79768 ? S 07:49 0:03 php-fpm: pool www nginx 1594 0.0 1.9 565248 72004 ? S 07:49 0:01 php-fpm: pool www nginx 1595 0.0 2.0 567268 73040 ? S 07:49 0:02 php-fpm: pool www nginx 1596 0.0 2.0 573440 75320 ? S 07:49 0:01 php-fpm: pool www nginx 1597 0.0 1.9 568704 71812 ? S 07:49 0:02 php-fpm: pool www nginx 1600 0.0 2.0 572360 74632 ? S 07:50 0:01 php-fpm: pool www nginx 1604 0.0 1.8 565264 68584 ? S 07:53 0:01 php-fpm: pool www
所以看起來使用者設置正確。但它不起作用。
現在我真的不明白的是,如果我執行這個:
#/usr/sbin/php-fpm –nodaemonize –fpm-config /etc/php-fpm.conf
這是服務中描述的命令(/usr/lib/systemd/system/php-fpm.service) - 那麼我沒有權限問題。
ps aux | 的輸出 grep php-fpm 也是一樣,使用者是 nginx。
我以root身份執行所有內容。
這怎麼可能?
編輯
這已成為一個 SElinux 問題。我在審計日誌中有這個:
denied { write } for pid=2755 comm="php-fpm" name="files" dev="xvda1" ino=9167949 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir
我希望 php-fpm 寫的目錄是一個叫 vanilladrupal 的目錄
# ls -Z . drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html drwxr-xr-x. nginx nginx unconfined_u:object_r:httpd_sys_content_t:s0 vanilladrupal
程序 php-fpm 具有以下上下文:
ps Zaux | grep php-fpm system_u:system_r:httpd_t:s0 root 2749 0.0 0.8 528916 31212 ? Ss 03:03 0:00 php-fpm: master process (/etc/php-fpm.conf) system_u:system_r:httpd_t:s0 nginx 2751 0.0 0.5 529548 19456 ? S 03:03 0:00 php-fpm: pool www and the other pool wwww look the same
selinux 配置是這樣的:
SELINUX=enforcing SELINUXTYPE=targeted
我應該做什麼改變?
(在這裡,有點爭辯說它的設置方式應該沒有權限問題)
(我試圖通過更改使用者來更改目錄“vanilla drupal”的上下文,使其看起來與 html 相同(我假設如果我將目錄放在 html 中,我不會有任何問題)。但我剛剛得到更多錯誤(禁止 {execmem})。
您需要更改 Drupal 需要寫入的所有文件的 SELinux 上下文
httpd_sys_rw_content_t
,如下所示:semanage fcontext -a -t httpd_sys_rw_content_t ‘/usr/share/nginx/html/drupal/admin/config/media/file-system(/.*)?’
我不知道您的路徑是什麼,您需要在
Configuration
->Media
->中查看 Drupal 界面以Filesystem
獲取更多資訊。