簡體   English   中英

OpenSUSE php-fpm.conf 權限被拒絕

[英]OpenSUSE php-fpm.conf permission denied

我無法在 OpenSUSE 上啟動 php-fpm。 當我運行systemctl restart php-fpm.service時,將etc/php8/fpm/php-fpm.conf.defaultetc/php8/fpm/php-fpm.conf后收到以下錯誤

[25-Apr-2021 12:52:18] ERROR: failed to open configuration file '/etc/php8/fpm/php-fpm.conf': Permission denied (13)
[25-Apr-2021 12:52:18] ERROR: failed to load configuration file '/etc/php8/fpm/php-fpm.conf'
[25-Apr-2021 12:52:18] ERROR: FPM initialization failed

我不得不切換到 php7-fpm 才能讓它工作。 似乎 php-fpm 在 OpenSUSE Tumbleweed 上無法正常工作。

apache mod php 沒有問題。

我遇到了一些問題,可以在您的帖子中找到。

我的設置:
帶有 nginx 的 php8 (fast-cgi NOT USING SOCK) 在我的筆記本電腦上工作正常
硬件:HP 移動工作站 Compaq 8510w

  • 是的,我知道,這不是最新的裝備,但它非常堅固和穩定。
    看起來它是為 Linux 制作的!
    Micros....敦促我將其從 W7 升級到 W10
    但讓我獨自面對無法解決的問題。 他們的疑難解答告訴我
    “問一個朋友”,這就是我所做的。
    朋友說,試試linux,這就是我現在在這里的原因。
    我從不后悔,這是說“謝謝你 Micros...”的唯一理由

操作系統:openSUSE Tumbleweed 20210
KDE 等離子版本:5.22.5
KDE 框架版本:5.85.0
Qt 版本:5.15.2
Kernel 版本:5.13.8-1-默認(64 位)
圖形平台:X11
處理器:2 × Intel® Core™2 Duo CPU T9300 @ 2.50GHz
Memory:3.8 GiB RA
圖形處理器:AMD RV630

為了安心:

  • nginx 和 php 具有眾多安全功能。
    安全非常重要,因此請留意常見的 IT 安全規則,
    但請注意,如果未正確實施,安全規則可能會將您拒之門外。
    在進行任何編輯之前,請備份所有原始配置文件

為了方便:

我安裝了 mc (Midnight Commander) 並使用 nano 作為編輯器。
我將自己添加到組輪中,這樣我就可以使用 sudo 而無需輸入密碼。
mc 對於更改目錄、從文件跳轉和編輯配置文件非常方便,因為您可以以 root 身份使用 mc。 除此之外,您可以輕松更改為 shell 並返回 iE 以修改權限或使用其他 shell 命令。
更遠:
我在 .bashrc 中創建了別名,可以使用快捷方式啟動、停止和檢查服務。

alias sto='sudo systemctl stop $2'    
alias str='sudo systemctl start $2'    
alias rst='sudo systemctl restart $2'          
alias sta='sudo systemctl status $2'    
alias sn='sudo nano $2'    

如何使用它們?
編輯 your.bashrc 后做一個

source .bashrc     

要使用這些別名,請鍵入別名、空白和文件路徑,例如使用 nano 編輯文件 als sudo 嘗試:

sn /etc/rc.local     

或者,只需幾次擊鍵即可檢索 php-fpm 的狀態:

sta php-fpm

我將 /etc/php8/php.ini 復制到“php.ini.commented”並刪除了原始中的所有注釋和非必需選項我還將 /etc/php8/ cli /php.ini 復制到 php.ini.commented 並刪除原文中的所有注釋和非必需選項我對 /etc/php8/fpm/php-fpm.d/www.conf 做了同樣的事情

為了避免沖突:

在進行任何其他軟件操作之前,請確保您的系統正在運行且沒有錯誤。
利用

dmesg -l err

或者

journalctl -b |grep error

先解決發現的錯誤!
驗證后,您應該執行

sudo zypper dup
  • 在測試/修改配置時,每次試驗不要更改超過 1 個參數。 在每一步之后檢查日志文件中的修改結果。
  • 在修改后的配置中寫評論 - 如果使用來自網站的建議 - 將網址粘貼為評論,因為幾天后您可能不記得為什么要這樣配置。
  • 避免在配置文件的注釋中出現多個空格,這可能會導致“解析錯誤”。
    我使用路徑名,因為它們是由安裝程序配置的。
    這樣做,它將防止軟件更新后出現問題。
    沒有使用原始的 Tumbleweed 用戶/組“wwwrun”和“www”,而是在組“www-data”中創建了一個用戶“www-data”,就像在 Raspberry debian 10 中一樣。

使用以下命令

sudo chown -R www-data:www-data /srv    
sudo chmod -R 755 /srv

我已經更改了所有內容的所有權和權限,這些內容將由 php-fpm 訪問。

如果您將符號鏈接放在 /srv/www/public 到其他地方的文件,則需要更改文件中的權限,鏈接指向。 例如,如果您在 /srv/www/public 中創建指向 phpmyadmin 數據的符號鏈接,則需要更改 /usr/share/mysql/phpmyadmin 中所有文件的權限。
您的池 /srv/www/public 中數據的用戶必須與 /etc/nginx/nginx.conf 中定義的用戶相同,並且
當使用名為“public”的池時,/etc/php8/fpm/php-fpm.d/www.conf 中 [public] 部分中的用戶和組也必須相同
這是至關重要的,nginx 啟動時的大多數問題都是由錯誤的權限引起的。

一步步

  • 從基本設置開始,沒有任何特殊功能。
    應朋友的要求,我在下面添加了我的功能配置文件
  • 不要從 web 中的 IT 專家那里復制配置,他們可能會做復雜或奇異的事情、代理、遠程服務器等。
    特別是如果在這些配置中存在您不理解的表達式,最好不要使用它們。
  • 剛開始,在 nginx 運行后立即撤消臨時解決方案,並備份第一個工作的基本配置。
    在那之后——但不是更早——你可以開始試驗
  • 永遠不要在上述任何目錄中使用 chmod 777,因為這是一個讓你的系統被黑的邀請。
  • 永遠不要更改 mod 644,所有者 root:root in /var/log php-fpm 的日志文件正在由 root 創建和修改。 日志文件包含敏感信息。
  • 驗證正確的設置:
ps -aux |grep php

結果應該類似於以下幾行。 這意味着 php-fpm 正在由 root 運行:
根 1262 0.0 0.3 54024 13260? ss 06:12 0:01 php-fpm:主進程(/etc/php8/fpm/php-fpm.conf)
www-數據 1335 0.0 0.2 54172 9576? S 06:12 0:00 php-fpm: 池公共

允許訪問其他任何人為黑客打開了大門。 請記住,您正在使用瀏覽器查看您的數據,但其他人也可以瀏覽它們。

擁有一個正在運行的系統后,很容易添加進一步的步驟。 要啟動,無需在 nginx 中啟用站點,您只需在 /etc/php8/fpm/php-fpm.d/www.conf 中創建一個池

故障排除常見錯誤:

  • MySql 錯誤:
    我在這里假設您的 mariadb/mysql 已正確設置。
    缺少或錯誤的權限將導致“未找到”錯誤。
    mysql 中的故障排除記錄非常好,mysql 有一個交互式幫助 function。 閱讀文檔並按照 mysql 手冊的步驟進行測試訪問。 如果在本文檔中添加相關指南,那就太過分了。

  • php-fpm 未啟動:
    無法打開配置文件'/etc/php8/fpm/php-fpm.conf':權限被拒絕(13)

sudo systemctl status php-fpm
 

您將找到有關內容和方式的更多詳細信息。
當 php-fpm 嘗試按照 access.log = "access.$pool.log" 行在 /var/log 中創建日志文件 "access.public.log" 時,可能存在訪問問題(查看文件 www.conf )。
此錯誤可能由 apparmor 中的設置引起/抑制。 選項是:

  • 臨時禁用 Apparmor
sudo systemctl stop apparmor
sudo systemctl disable apparmor
           
  • 在 openSUSE 中可以使用 Yast 來配置 apparmor

雅思特

如果您進行了修改,可以在以下位置找到結果:

/etc/apparmor.d/php-pfm    
           

 vim: ft=apparmor


profile php-fpm /usr/sbin/php-fpm* flags=(attach_disconnected, complain) {
    include <abstractions/base>
    include <abstractions/nameservice>
    include <abstractions/openssl>
    include <abstractions/php>
    include <abstractions/ssl_certs>
    include if exists <local/php-fpm>
    include if exists <php-fpm.d>

    capability chown,
    capability dac_override,
    capability kill,
    capability net_admin,
    capability setgid,
    capability setuid,

    signal send peer=php-fpm//*,

    deny / rw,

    /etc/php8/fpm/php-fpm.conf r,
    /etc/php{,5,7}/* r,
    /usr/sbin/php-fpm* rix,
    owner /var/log/php*-fpm.log rw,
    owner /var/log/public.acess.log rw,
    @{PROC}/@{pid}/attr/{apparmor/,}current rw,
    @{run}/php{,-fpm}/php*-fpm.pid rw,
    @{run}/php{,-fpm}/php*-fpm.sock rwlk,
    owner /etc/php8/fpm/php-fpm.d/www.conf r,

    change_profile -> php-fpm//*,

}

  • 臨時注釋該行
    access.log = /var/log/$pool.access.log 在你的 www.conf
    要開始這個文件不是絕對必需的,並且評論它幫助我抑制“php-fpm 無法啟動”錯誤。
    最重要和最詳細的日志文件是

     /var/log/nginx/error.log

    要調試,每次修改后你應該使用

     sudo tail -1 /var/log/nginx/error.log

    您會看到大多數錯誤都是權限錯誤,因為 mysql 無法訪問您的數據庫或 php-fpm 無法使用您的 php/html 文件!


這是我的/etc/nginx/nginx.conf:


user www-data;                    
worker_processes auto;
#pid /run/nginx.pid;   not required when using tcp

events {
  worker_connections  1024;
  use epoll;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log  main;
    sendfile on;
    keepalive_timeout 65;
    include /etch/nginx/conf.d/*.conf;

    server {
        listen 80;
        server_name 127.0.0.1;
        root /srv/www/public;        # without this root instruction nqinx will use /usr/ as prefix and you will get a not found error!    
        error_page   500 502 503 504  /50x.html; # redirect server error pages to the static page /50x.html    

        location = /50x.html {
          root   /srv/www/htdocs/;
        }

        location ~ \.php$ {  # 404
          try_files $fastcgi_script_name =404;
          include /etc/nginx/fastcgi_params;  
      #   default fastcgi_params
      #   fastcgi settings
          fastcgi_pass          127.0.0.1:9000;
          fastcgi_index         index.php;
          fastcgi_buffers         8 16k;
          fastcgi_buffer_size       32k;
      #   fastcgi params
          fastcgi_param DOCUMENT_ROOT   /srv/www/public;
          fastcgi_param SCRIPT_FILENAME $request_filename;
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        location / {
          root   /srv/www/public;
          try_files $uri $uri/ =404;
          index index.nginx-debian.html index.php index.html index.htm;
        }

        location ~ /\.ht {
        # deny access to .htaccess files, if Apache's document root concurs with nginx's one
          deny  all;
        }
        include vhosts.d/*.conf;
    }
}

/etc/php8/fpm/php-fpm.d/www.conf 的文件內容


[public]
prefix = /srv/www/$pool
user = www-data
group = www-data
listen = 127.0.0.1:9000

;use these settings only if a socket is used
;listen.owner = www-data
;listen.group = www_data
;listen.mode = 0660

pm = static
pm.max_children = 1
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500

; this optional feature is well documented in the file and further instructions for how to set it up can be found on the web 
pm.status_path = /status

; if fpm-phm cannot start, temporary comment the two lines access.log, but reactivate the instructions as soon as php-fpm is operational
; if there are wrong permission-settings, php-fpm will not start  

access.log = /var/log/$pool.access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

catch_workers_output = yes
security.limit_extensions = .php .html

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M

文件 /etc/php8/fpm/php-fpm.conf


; FPM Configuration ;

[global]
process_control_timeout = 10
process.max = 128
daemonize = no
rlimit_core = 0
rlimit_files = 1024
events.mechanism = epoll
systemd_interval = 10

include=/etc/php8/fpm/php-fpm.d/*.conf

通過這個配置,我運行了幾個 mysql 數據庫和內容管理以及 phpmyadmin。 下圖是我使用mysql數據庫和自行設計的php格式的forms的內容管理系統的截圖。 在位置定義中,無論是加載樣式表還是圖片/電影,都不需要進一步的說明

CMS 神話

在 Chrome 中使用 Google 的開發人員工具進行檢查證明,所有樣式表、json 文件和其他目錄的引用和鏈接都已找到,並且沒有錯誤。

鉻工具

當然,我花了一些時間來完成這一切。
這個答案可以幫助每個想要設置 nginx 並節省時間的人。 nginx 和 php 的文檔是完整而優秀的。 對於大多數命令,有一個 --help 選項、手冊頁和網頁.....

Yes, I know!    
  Help and man-pages are written by excellent IT-engineers,    
  some of these hexadecimal-thinking people might have difficultes    
  to translate their digital slang to human-understandable language.    
  That's why some pages are more confusing than helping.   
  Anyway, press the F1-key, try the help and forgive them.    
  Where would we be without them?

在我的小網絡中,我使用 24/7 運行 Raspberry Pi 3 B+ 和 64 位操作系統作為服務器,將數據存儲在兩個 USB 驅動器上。
在這台服務器上訪問本地文件的配置和我筆記本電腦上的配置幾乎一樣。
只有兩個小區別:

在“debian buster”上,應用程序 php8 被命名為 php8.0 並且一些目錄具有不同的名稱,因此您可以使用上述配置文件用於 Raspberry debian buster,但有以下限制:相關的“包含”行不同,需要更改根據配置文件的位置名稱。
我在樹莓服務器上的 nginx.conf 有幾行額外的代碼,以便通過 DDNS 訪問內容,但那是另一章。

我想強調一下,我不是 IT 專家。 我在作為機械工程師的專業活動中積累了一些計算經驗,所有進一步的知識都來自按 F1 鍵、閱讀論壇投稿、手冊、幫助文件、網頁以及 - 不要忘記 - 從犯過的錯誤中。
我希望這可以鼓勵其他人繼續努力。 Linux 結構非常清晰,易於理解。 谷歌錯誤,仔細觀察你的日志文件,享受最終運行完全可操作的 php-fpm/nginx 的樂趣。
我需要再次提醒您:
不要忘記重置所有臨時解決方案。
干杯

這與apparmor設置有關。 請編輯/etc/apparmor.d/php-fpm

19   /etc/php{,5,7,8}/** r,

允許通過php-fpm進程訪問目錄/etc/php8/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM