FastCGI / PHP-FPM'yi çalıştırırken ("kullanıcı" olarak kullanıcı olarak) PHP Sessions Folder'da ayarlanacak izinler / sahiplik nedir?


17

PHP-FPM oturum klasörüme yazamadığı için çalışan bir dizi komut dosyası almakta sorun yaşıyorum:

"2009/10/01 23:54:07 [hata] 17830 # 0: * 24 Stderr'de gönderilen FastCGI:" PHP Uyarı:
    Bilinmiyor: açık (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    başarısız oldu: 0 satırında Bilinmeyen'de izin reddedildi (13)
PHP Uyarı: Bilinmiyor: Oturum verileri (dosyalar) yazılamadı. Lütfen tanımla
    geçerli session.save_path ayarının doğru olduğunu
    (/ var / lib / php / session) 0 satırında Bilinmeyen "yukarı akış okurken"

Açıkçası bu bir izin meselesidir; oturum klasörümün sahibi / grubu web sunucusunun kullanıcısı NGINX. PHP-FPM nobodysanki çalışır ve dolayısıyla nginx grubuna eklemek o kadar da önemsiz değildir.

Geçici bir çözüm izinlerini ayarlamaktır /var/lib/php/sessioniçin 777ben olmasa da "en iyi uygulama" dair bir his var -.

Bir klasöre daemon yazma erişimi atamanız gerektiğinde en iyi yöntem nedir, ancak şu şekilde çalışıyor nobody?

Yanıtlar:


24

Bizim için doğru izinler nerede

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

NGinx kullanıcı olarak php-cgiçalışmasına nobodyrağmennginx


Benim durumumda bu bir sahiplik / izin sorunu değildi. "3;" session.save_path = "3; / var / lib / php / sessions"
John Doe

1
Aşağıdaki hatayı alıyorum: Geçersiz grup << kimse: nogroup >> :(
Pathros

i nobodybu kod satırı ile php çalıştıran benim kullanıcı olduğunu görebildim : <?php echo exec('whoami'); ?>(benim durumumda www-veri) ve bundan sonra sadece yazdığı gibi chown -R www-data:www-data /var/lib/php/sessionsbu basit bir google sonuç yardımcı oldu sadece cevap olarak saatlerce arama yaptıktan sonra bana! Teşekkürler!
Dimitar

9

Nginx kullanıyorsanız , bir sistem güncellemesi çalıştırırken bununla karşılaşabilirsiniz.

Bazen sistemi güncellediğinizde, grubu /var/lib/php/sessionapache olarak değiştirilir.

sudo chgrp nginx /var/lib/php/*Kötü bir uygulama olan izinleri 777 olarak ayarlamak yerine yürütmeyi deneyin .

En azından benim için çalıştı.


1
Bu kabul edilmiş cevap olarak işaretlenmelidir.
Yuda Prawira

3

/etc/php.ini Session.save_path yönergesini kullanın .

Geçici bir çözüm / var / lib / php / session izinlerini 777 olarak ayarlamaktır.

"Bu kümesi dünya tarafından okunabilir bir dizine bırakırsanız, sunucudaki diğer kullanıcılar o dizindeki dosyaların listesini alarak oturumları ele geçirebilir."


Üzgünüm ben net olmayabilir düşünüyorum: session.save_path zaten / var / lib / php / session olarak ayarlanmış. Sorun, PHP-FPM'nin ona yazmasını sağlamak ve güvenli tutmak için oturum yolu dizinine hangi izinlerin ve sahipliğin atanacağını anlayamıyorum. Dizinin sahibi / grubu "nginx" (çalıştırdığım web sunucusu) ve izinler 755 olarak ayarlanmış olması hile gibi görünmüyor
Profesör Frink

4
1. Aynı kullanıcı: grup nginx ve php-fpm için (ya nginx.confda yoluyla php-fpm.conf), böylece bu dizini 700 tutabilirsiniz. 2. Bu chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessionyüzden hem nginx hem de php-fpm kullanabilirsiniz
SaveTheRbtz

2
Nginx: nobody (veya bazı durumlarda nginx: nogroup) kullanmanın işe yaradığını doğrulayabilirim. Mümkünse, SaveTheRbtz'in 1. seçeneğine yaslanıyorum.
Michael Johnson

3

Her php-fpm havuzu için / var / lib / php / session 0700 hakları ile klasör oluşturmak zorunda kaldı.

Bu klasörün sahibi php-fpm havuzundan kullanıcı ve gruptur.

Ve / var / lib / php / session şimdi 0777.

Bu yöntemin en güvenli olduğunu düşünüyorum. Bu oturumları yalnızca php-fpm havuz kullanıcısı görecektir.


1

Aynı sorunu yaşadım ve çözdüm. Gittiğim /tmp(benim ses_ * dosyaların nerede olduğunu) ve hepsini sildim. Ondan sonra her şey yolundaydı.

Anlayabildiğim kadarıyla sistem eski kilitli dosyalar üzerine yazmaya çalışıyordu.

Ben ile oynadıktan sonra sorun oluştu php.ini. Hayatımdan birkaç yıl kaybettim ama sonunda çözümü buldum.


1

Doğru yol, oturum klasörünün sahipliğini nginx olarak değiştirmek olmalıdır. Ancak, PHP-FPM varsayılan olarak nginx kullanıcısı kullanılarak çalışmaz. Varsayılan olarak apache kullanır.

Bununla birlikte, PHP-FPM tarafından kullanılan kullanıcıyı düzenleyerek değiştirmeniz gerekir /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

PHP-FPM'yi yeniden başlatın ve gitmek için iyi olmalısınız.

service php-fpm restart


PHP oturum yolu konumu /etc/php.inialtında bulunabilir session.save_path. /var/lib/php/sessionvarsayılan değerdir.

Php oturum klasörü sahipliğini ve grubunu güncelleme komutu

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

Ve chmod ile bile gitmek için iyi olmalısın 700.


1

Dizin / var / lib / php / sessions yapışkan bit izinlerine sahip olmalıdır.

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

0

@Judder cevabına dayanarak, çalışmasını sağlamak için kimseye ve nogroup'a okuma ve yazma izinleri vermek için aşağıdaki komutu eklemek zorunda kaldım : chmod verilen klasördeki izinleri değiştirecek -R oluşturulan klasörlere ve dosyalara aynı izinleri uygulayacak verilen klasör içinde u kullanıcı için g grup r için okuma izni için w yazma izni için

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

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






Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.