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- nobody
olah, dan karenanya menambahkannya ke grup nginx tidak begitu sepele.
Solusi sementara adalah mengatur izin /var/lib/php/session
untuk 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
?
nobody
pengguna saya yang menjalankan php dengan baris kode ini:<?php echo exec('whoami'); ?>
(dalam kasus saya www-data) dan setelah itu sederhana karena baru saja menulischown -R www-data:www-data /var/lib/php/sessions
ini adalah hasil google yang diremehkan karena merupakan satu-satunya jawaban yang membantu saya setelah berjam-jam mencari! Terima kasih!Jika Anda menggunakan nginx, Anda mungkin mengalami hal ini ketika menjalankan pembaruan sistem.
Terkadang saat Anda memperbarui sistem, grup
/var/lib/php/session
diubah 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.
sumber
Gunakan direktif
/etc/php.ini
session.save_path ."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."
sumber
nginx.conf
atauphp-fpm.conf
), sehingga Anda dapat menyimpan direktori ini 700. 2. Gunakanchown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session
jadi saya pikir nginx dan php-fpm dapat menggunakannyaSaya 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.
sumber
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.sumber
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
.Mulai ulang PHP-FPM dan Anda harus siap.
service php-fpm restart
Lokasi jalur sesi PHP dapat ditemukan di
/etc/php.ini
bawahsession.save_path
./var/lib/php/session
adalah 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
.sumber
Direktori / var / lib / php / sesi harus memiliki izin bit sticky.
sumber
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
sumber