以其他用户身份运行 PHP-FPM

以其他用户身份运行 PHP-FPM

我已经在各种机器上使用自己创建的设置好几年了,现在我正尝试在 Debian 12 服务器上运行它。该设置类似于 Forge,可在此 URL 上找到https://serversforhackers.com/c/lemp-forge-setup。以前一切都运行正常,但现在我在新机器上遇到了问题。

如果我将 PHP 用户保留为 www-data 并将项目保留在 中var/www,则不会出现问题。但是,当我将其移动到主目录 时/home/forge/hutzlibu,我看到 中有一个错误日志条目,/var/log/nginx/error.log内容如下:

"/home/forge/hutzlibu/public/index.php" failed (13: Permission denied), client: , server: _, request: "GET /. 

我尝试将 PHP 配置中的 listen.owner 和 listen.group 更改为 forge,但没有成功。我发现其他人也在这个 URL 上遇到了类似的问题https://stackoverflow.com/a/58902001/1518174

有人知道如何解决这个问题吗?提前谢谢您!

谨致问候,Matz

编辑:评论中问题的一些输出

namei -l /home/forge/hutzlibu/public/给了我

f: /home/forge/hutzlibu/public/
drwxr-xr-x root  root  /
drwxr-xr-x root  root  home
drwx-----x forge forge forge
drwxr-xr-x forge forge hutzlibu
drwxr-xr-x forge forge public

Nginx 配置

server {
    listen 80;
    root /home/forge/hutzlibu/public;

    server_name _;

    client_max_body_size 100M;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

仅在 PHP-FPM 配置文件中发生更改/etc/php/7.4/fpm/pool.d/www.conf

user = forge
group = forge

# also tried with
# listen.owner = forge
# listen.group = forge

答案1

尝试设置

listen.owner = www-data
user = forge
group = forge

对于 php-fpm。并确认在 nginx.conf 中您有user www-data;

我还为每个人添加了对 /home/forge 的读取权限。这可能(也可能没)有帮助。

相关内容