Nginx

服務 php-fpm 沒有獲得使用者權限

  • December 8, 2015

我對 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獲取更多資訊。

引用自:https://serverfault.com/questions/741235