Izin / kepemilikan apa yang harus ditetapkan pada Folder Sesi PHP saat menjalankan FastCGI / PHP-FPM (sebagai pengguna "tidak ada")?

17

Saya mengalami kesulitan menjalankan sejumlah skrip karena PHP-FPM tidak dapat menulis ke folder sesi saya:

"2009/10/01 23:54:07 [kesalahan] 17830 # 0: * 24 FastCGI dikirim dalam stderr:" PHP Peringatan:
    Tidak dikenal: terbuka (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    gagal: Izin ditolak (13) di Tidak Dikenal di baris 0
Peringatan PHP: Tidak Dikenal: Gagal menulis data sesi (file). Harap verifikasi
    bahwa pengaturan session.save_path saat ini benar
    (/ var / lib / php / session) dalam Unknown on line 0 "sambil membaca upstream"

Jelas ini masalah izin; pemilik / grup folder sesi saya adalah pengguna server web, NGINX. PHP-FPM berjalan seolah- nobodyolah, dan karenanya menambahkannya ke grup nginx tidak begitu sepele.

Solusi sementara adalah mengatur izin /var/lib/php/sessionuntuk 777- Saya punya perasaan itu bukan "praktik terbaik" sekalipun.

Apa praktik terbaik ketika Anda perlu menetapkan akses tulis daemon ke folder, tetapi sedang berjalan nobody?

Profesor Frink
sumber

Jawaban:

24

Izin yang benar bagi kami di mana

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

seperti php-cgiberjalan nobody, meskipun NGinx berjalan sebagai penggunanginx

Judder
sumber
Dalam kasus saya itu bukan masalah kepemilikan / izin. Hapus "3;" from session.save_path = "3; / var / lib / php / sesi"
John Doe
1
Saya mendapatkan kesalahan berikut: Grup tidak valid << tidak ada: nogroup >> :(
Pathros
saya dapat melihat mana nobodypengguna saya yang menjalankan php dengan baris kode ini: <?php echo exec('whoami'); ?>(dalam kasus saya www-data) dan setelah itu sederhana karena baru saja menulis chown -R www-data:www-data /var/lib/php/sessionsini adalah hasil google yang diremehkan karena merupakan satu-satunya jawaban yang membantu saya setelah berjam-jam mencari! Terima kasih!
Dimitar
9

Jika Anda menggunakan nginx, Anda mungkin mengalami hal ini ketika menjalankan pembaruan sistem.

Terkadang saat Anda memperbarui sistem, grup /var/lib/php/sessiondiubah menjadi apache.

Coba jalankan sudo chgrp nginx /var/lib/php/*alih-alih menetapkan izin ke 777 yang merupakan praktik buruk.

Setidaknya itu berhasil bagi saya.

Nick G
sumber
1
Ini harus ditandai sebagai jawaban yang diterima.
Yuda Prawira
3

Gunakan direktif /etc/php.ini session.save_path .

Solusi sementara adalah dengan mengatur izin / var / lib / php / session ke 777 - Saya punya perasaan itu bukan "praktik terbaik" sekalipun.

"Jika Anda membiarkan set ini ke direktori yang dapat dibaca dunia, pengguna lain di server mungkin dapat membajak sesi dengan mendapatkan daftar file di direktori itu."

SaveTheRbtz
sumber
Maaf saya pikir saya mungkin belum jelas: session.save_path sudah disetel ke / var / lib / php / session. Masalahnya adalah saya tidak bisa menentukan izin dan kepemilikan apa yang harus ditetapkan ke direktori jalur sesi untuk mengaktifkan PHP-FPM untuk menulis padanya, serta tetap aman. Memiliki direktori ditetapkan sebagai pemilik / grup "nginx" (Server web yang saya jalankan) dan izin 755 tampaknya tidak melakukan trik
Profesor Frink
4
1. Gunakan pengguna yang sama: grup untuk nginx dan php-fpm (melalui salah satu nginx.confatau php-fpm.conf), sehingga Anda dapat menyimpan direktori ini 700. 2. Gunakan chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessionjadi saya pikir nginx dan php-fpm dapat menggunakannya
SaveTheRbtz
2
Saya dapat mengkonfirmasi bahwa menggunakan nginx: tidak ada (atau nginx: nogroup dalam beberapa keadaan) berfungsi. Jika mungkin, saya akan condong ke opsi SaveTheRbtz '1.
Michael Johnson
3

Saya harus membuat folder dengan hak 0700 di / var / lib / php / session untuk setiap kumpulan php-fpm.

Pemilik folder ini adalah pengguna dan grup dari kumpulan php-fpm.

Dan / var / lib / php / session sekarang 0777.

Saya pikir metode ini paling aman. Hanya pengguna kumpulan php-fpm yang akan melihat sesi ini.

Alexander Merkulov
sumber
1

Saya memiliki masalah yang sama dan saya menyelesaikannya. Saya pergi ke /tmp(di situlah file ses_ * saya) dan menghapus semuanya. Setelah itu semuanya baik-baik saja.

Sedekat yang saya tahu sistem mencoba menulis pada file yang terkunci lama.

Masalah terjadi setelah saya bermain dengannya php.ini. Saya kehilangan beberapa tahun dari hidup saya tetapi akhirnya saya menemukan solusinya.

Christos
sumber
1

Cara yang benar harus mengubah kepemilikan folder sesi menjadi nginx. Namun, PHP-FPM tidak berjalan menggunakan pengguna nginx secara default. Ini menggunakan apache secara default.

Dengan itu, Anda harus mengubah pengguna yang digunakan oleh PHP-FPM dengan mengedit /etc/php-fpm.d/www.conf.

; 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

Mulai ulang PHP-FPM dan Anda harus siap.

service php-fpm restart


Lokasi jalur sesi PHP dapat ditemukan di /etc/php.inibawah session.save_path. /var/lib/php/sessionadalah standarnya.

Perintah untuk memperbarui kepemilikan dan grup folder sesi php

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

Dan Anda harus baik untuk pergi bahkan dengan chmod dari 700.

Yosefting
sumber
1

Direktori / var / lib / php / sesi harus memiliki izin bit sticky.

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
Łukasz
sumber
0

Berdasarkan jawaban @Judder , untuk membuatnya berfungsi saya harus menambahkan perintah berikut untuk memberikan izin baca dan tulis kepada siapa pun dan nogroup :

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

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

chmod akan mengubah izin pada folder yang diberikan
-R akan menerapkan izin yang sama ke folder dan file yang dibuat dalam folder yang diberikan
u untuk pengguna
g untuk grup
r untuk izin baca
w untuk izin menulis

Guillaume Genreau
sumber