web-dev-qa-db-ja.com

FastCGI / PHP-FPM(ユーザー "nobody"として)を実行するときに設定するアクセス許可/所有権PHPセッションフォルダー)?

PHP-FPMがセッションフォルダーに書き込めないため、いくつかのスクリプトを実行できません。

 "2009/10/01 23:54:07 [エラー] 17830#0:* 24 FastCGIがstderrに送信されました:" PHP警告:
不明:open(/ var/lib/php/session/sess_cskfq4godj4ka2a637i5lq41o5、O_RDWR)
 failed:Permission denied(13)in Unknown on line 0 
 PHP Warning:Unknown:Failed to write session data(files)。 
セッションの現在の設定が正しいことを確認してください。
(/ var/lib/php/session)が不明です。

明らかにこれは許可の問題です。セッションフォルダーの所有者/グループは、Webサーバーのユーザー、NGINXです。 PHP-FPMはnobodyとして実行されるため、nginxグループに追加することはそれほど簡単ではありません。

一時的な解決策は、/var/lib/php/sessionの権限を777に設定することです。ただし、「ベストプラクティス」ではないような気がします。

デーモンの書き込みアクセスをフォルダーに割り当てる必要があるが、nobodyとして実行されている場合のベストプラクティスは何ですか?

17
Professor Frink

私たちの正しい権限

chown -R nobody:nogroup /var/lib/php/session

なので php-cginobodyとして実行されますが、NGinxはユーザーnginxとして実行されます

24
Judder

nginxを使用すると、システムアップデートを実行するときにこれに遭遇する可能性があります。

システムを更新すると、/var/lib/php/sessionのグループがApacheに変更されることがあります。

アクセス許可を777に設定する代わりにSudo chgrp nginx /var/lib/php/*を実行してください。これは悪い習慣です。

それは少なくとも私にとってはうまくいった。

9
Nick G

使用する /etc/php.inisession.save_path ディレクティブ。

一時的な解決策は、/ var/lib/php/sessionのアクセス許可を777に設定することです。ただし、「ベストプラクティス」ではないような気がします。

「この設定を誰でも読み取り可能なディレクトリのままにしておくと、サーバー上の他のユーザーが、そのディレクトリ内のファイルのリストを取得してセッションをハイジャックできる可能性があります。」

3
SaveTheRbtz

各php-fpmプールの/ var/lib/php/sessionに0700権限のフォルダーを作成する必要がありました。

このフォルダーの所有者は、php-fpmプールのユーザーとグループです。

そして/ var/lib/php/sessionが0777になりました。

この方法が最も安全だと思います。このセッションは、php-fpmプールのユーザーにのみ表示されます。

3

私は同じ問題を抱えていて解決しました。私は/tmpに行き(そこにses_ *ファイルがあります)、それらをすべて削除しました。その後、すべてがOKでした。

私が知る限り、システムが古いロックされたファイルに書き込もうとしていたことがわかります。

この問題は、php.iniで遊んだ後に発生しました。私は人生から数年を失いましたが、最終的には解決策を見つけました。

1
Christos

正しい方法は、セッションフォルダーの所有権をnginxに変更することです。ただし、PHP-FPMはデフォルトでnginxユーザーを使用して実行されません。デフォルトでApacheを使用します。

そのため、/etc/php-fpm.d/www.confを編集して、PHP-FPMで使用するユーザーを変更する必要があります。

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: Apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

PHP-FPMを再起動すると、問題ありません。

service php-fpm restart


PHPセッションパスの場所は、/etc/php.iniの下のsession.save_pathにあります。 /var/lib/php/sessionがデフォルトです。

PHPセッションフォルダーの所有権とグループを更新するコマンド

chown -R nginx:nginx /var/lib/php/session

そして、700のc​​hmodを使用しても問題ありません。

1
josephting

ディレクトリ/ var/lib/php/sessionsにはスティッキービットのパーミッションが必要です。

Sudo chmod 1773 /var/lib/php/sessions

ls -al /var/lib/php/
drwxr-xr-x  4 root root   .
drwxr-xr-x 51 root root   ..
drwxr-xr-x  3 root root   modules
drwx-wx-wt  2 root root   sessions
1
Łukasz

@ Judderの回答に基づいて、それを機能させるには、次のコマンドを追加してreadおよびwriteのアクセス許可をnobodyに付与する必要がありましたおよびnogroup

chown -R nobody:nogroup /var/lib/php/session

Sudo chmod -R ug+rw /var/lib/php/sessions

chmodは、指定されたフォルダのアクセス許可を変更します
-Rは、指定されたフォルダ内に作成されたフォルダとファイルに同じ権限を適用します
for user
gグループ用
r読み取り許可
w書き込み許可

0