OpenSUSE php-fpm.conf 权限被拒绝

OpenSUSE php-fpm.conf permission denied

我无法在 OpenSUSE 上启动 php-fpm。 当我 运行 systemctl restart php-fpm.serviceetc/php8/fpm/php-fpm.conf.default 复制到 etc/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 没问题modphp.

我有一些问题可以在你的post中找到。

我的设置:
php8 使用 nginx(fast-cgi 不使用 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
内核版本:5.13.8-1-默认(64 位)
图形平台:X11
处理器:2 × Intel® Core™2 Duo CPU T9300 @ 2.50GHz
内存:3.8 GiB 的 RA
图形处理器:AMD RV630

为了安心:

  • nginx 和 php 具有许多安全功能。
    安全非常重要,因此请留意常见的 IT 安全规则,
    但请注意,如果实施不当,安全规则可能会将您拒之门外。
    在进行任何编辑之前备份所有原始配置文件

为方便起见:

我安装了 mc (Midnight Commander) 并使用 nano 作为编辑器。
我把自己加入了wheel组,这样不用输入密码就可以使用sudo了。
mc 对于更改目录、文件跳转和编辑配置文件非常方便,因为您可以将 mc 作为 root 使用。除此之外,您可以轻松更改为 shell 并返回 modify 权限或使用其他 shell-命令。
进一步:
我在 .bashrc 中创建了别名以启用启动、停止和检查 有快捷方式的服务。

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

如何使用它们?
编辑你的 .bashrc 后做一个

source .bashrc     

要使用这些别名,您需要输入别名、空格和文件路径,例如使用 nano try 编辑文件时使用 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

首先解决发现的错误!
验证后你应该执行 a

sudo zypper dup
  • 当 testing/modifying 您的配置时,每次试验不要更改超过 1 个参数。 在每个步骤后检查日志文件中 mod 化的结果。
  • 在 mod 化的配置中写下评论,并且 - 如果使用来自网站的建议 - 将网址粘贴为评论,因为几天后您可能不记得为什么要这样配置。
  • 避免在配置文件的注释中出现多个空格,这会导致“解析错误”。
    我使用安装程序配置的路径名。
    这样做,可以防止软件更新后出现问题。
    没有使用原始风滚草user/group“www运行”和“www”,而是在“www-”组中创建了一个用户“www-data”数据”与 Raspberry debian 10 中的完全相同。

使用以下命令

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

我已经更改了所有内容的所有权和权限,这些内容将由 php-fpm 访问。

如果您将 /srv/www/public 中的 symlinks 放置到别处的文件中,您需要更改 link 指向的文件中的权限。例如,如果您在 /srv/www/public 中为您的 phpmyadmin 数据创建一个 symlink,则需要更改 /usr/share/mysql/phpmyadmin.
中所有文件的权限 您池中数据的用户 /srv/www/public 必须与 中的用户相同,在 /etc/nginx/nginx.conf 和
中定义 使用名为“public”的池时,/etc/php8/fpm/php-fpm.d/www.conf 中 [public] 部分中的用户和组也必须相同 .
这个很关键,nginx启动时出现的问题,大部分都是权限错误导致的。

循序渐进

  • 从基本设置开始,没有任何特殊功能。
    应朋友的要求,我在下面添加了我的功能配置文件
  • 不要从网络专家那里复制配置,他们可能会做复杂或奇特的事情、代理、远程服务器等
    特别是那些配置里面有不懂的表达式,最好不要用。
  • 刚开始,在 nginx 运行时撤消临时解决方案,并备份第一个工作的基本配置。
    在那之后——但不是更早——你可以开始试验
  • 切勿在上述任何目录中使用 chmod 777,因为这是让您的系统遭到黑客攻击的邀请。
  • 永远不要更改 /var/log 中的 mod 644,所有者 root:root php-fpm 的日志文件正在由 root 创建和 mod 化。日志文件包含敏感信息。
  • 验证设置是否正确:
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 ? S06:120:00php-fpm:池public

允许其他任何人访问就是为黑客打开大门。请记住,您正在使用浏览器查看您的数据,但其他人也可以浏览它们。

拥有 运行ning 系统后,可以轻松添加更多步骤。 要启动,不需要在 nginx 中使用 sites-enabled 你需要在 /etc/php8/fpm/php-fpm.d/www.conf

中创建 一个池

常见错误的疑难解答:

  • MySql-错误:
    我在这里假设您的 mariadb/mysql 已正确设置。
    缺少或错误的权限将导致“未找到”错误。
    mysql 中的疑难解答记录得非常好,并且 mysql 具有交互式帮助功能。按照 mysql 手册的步骤阅读文档并测试访问权限。在本文档中添加指南会太过分了。

  • php-fpm 未启动:
    无法打开配置文件“/etc/php8/fpm/php-fpm.conf”:权限被拒绝 (13)

sudo systemctl status php-fpm
 

您会找到有关内容和方式的更多详细信息。
当 php-fpm 尝试通过 access.log = "access.$pool.log”(查看文件 www.conf)。
这个错误可以通过 apparmor 中的设置 caused/suppressed。 选项是:

  • 临时 禁用 apparmor
sudo systemctl stop apparmor
sudo systemctl disable apparmor
           
  • 在 openSUSE 中可以使用 Yast 配置 apparmor

如果您进行了 mod说明,结果可在以下位置找到:

/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    
    

    要调试,在每次 modification 之后你应该使用

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

    您会看到大多数错误都是权限错误,因为 mysql 无法访问您的数据库或 php-fpm 无法使用您的 php/html-files!


这里是我的 /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 格式表格的内容管理系统的屏幕截图。 在位置定义中,不需要进一步的说明,既不用于加载样式表也不用于 pictures/movies。

在 Chrome 校样中使用 Google 的开发人员工具进行检查,所有对样式表、json 文件和其他目录的引用和 link 都已被删除找到并且没有错误。

当然我花了一些时间才搞定这些 运行ning.
这个答案可能会帮助每个想要设置 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 运行ning Raspberry Pi 3 B+ 和 64 位 OS 作为服务器,将数据存储在两个 USB 驱动器上。
这台服务器上访问本地文件的配置和我笔记本上的几乎一样。
只有两个小区别:

在“debian buster”上,应用程序 php8 被命名为 php8.0 并且一些目录具有不同的名称,因此 您可以将上述配置文件用于 Raspberry debian buster具有以下限制:相关的 'include' 行不同,需要根据配置文件的位置名称进行更改。
我的 nginx.conf 在 Raspberry-server 上有几行额外的代码,以便能够通过 DDNS 访问内容,但那是另一章。

我想强调一下,我不是 IT 专家。在我作为机械工程师的专业活动中,我积累了一些计算方面的经验,所有进一步的专业知识都来自按 F1 键、阅读论坛贡献、手册、帮助文件、网页以及 - 不要忘记 - 犯的错误。
我希望这可以鼓励其他人继续尝试。 Linux 结构非常清晰,易于理解。 Google 错误,请仔细观察您的日志文件并享受最终 运行 全面运行 php-fpm/nginx.
的乐趣 再次提醒您:
不要忘记重置所有临时解决方案。

的 干杯

这与apparmor设置有关。请编辑 /etc/apparmor.d/php-fpm:

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

允许 php-fpm 进程访问目录 /etc/php8/