5

私の Linux マシン (「php」) には、2 つのグループのメンバーであるユーザーがいます。一次グループは「php」、補助グループは「www」です。

Linux マシン (/home/www/public/wp-content/uploads) にディレクトリがあり、ユーザーはwwwで、グループはwwwで、権限は 775 に設定されています。

「php」ユーザーとして実行されているプロセスは、そのディレクトリ内のファイルを読み書きできるはずです。fopen「php」ユーザーとしてそのディレクトリ内のファイルであるコマンドラインからスクリプトを実行すると、正常に動作します!

しかし、ユーザー "php" とグループ "php" で php-fpm を起動すると、そのディレクトリに書き込もうとすると "permission denied" エラーが発生します。

ディレクトリを所有する「www」グループの一部である「php」ユーザーとして実行されているため、php-fpmプロセスは引き続きそのディレクトリに書き込むことができるはずです。しかし、「許可が拒否されました」と表示されます。

php-fpm の動作が php スクリプトの動作と異なるのはなぜですか?

(セカンダリ グループを追加した後に php-fpm を再起動したので、古い問題ではありません。)

4

2 に答える 2

4

php-fpm ソース コードがsetgidここで呼び出しているようです: https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_unix.c#L383-L386

        if (0 > setgid(wp->set_gid)) {
            zlog(ZLOG_SYSERROR, "[pool %s] failed to setgid(%d)", wp->config->name, wp->set_gid);
            return -1;
        }

私が判断できる限り、プロセスは setgidを呼び出した後、補助グループが利用できるアクセス許可にアクセスできないため、私は SOL です。

于 2016-12-22T23:28:04.193 に答える