Những quyền / quyền sở hữu nào được thiết lập trên Thư mục Phiên PHP khi chạy FastCGI / PHP-FPM (với tư cách là người dùng không có ai).


17

Tôi gặp sự cố khi chạy một số tập lệnh vì PHP-FPM không thể ghi vào thư mục phiên của tôi:

"2009/10/01 23:54:07 [lỗi] 17830 # 0: * 24 FastCGI được gửi trong stderr:" Cảnh báo PHP:
    Không xác định: mở (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    không thành công: Quyền bị từ chối (13) trong Unknown 0 trên dòng 0
Cảnh báo PHP: Không xác định: Không thể ghi dữ liệu phiên (tệp). Xin vui lòng xác minh
    cài đặt hiện tại của session.save_path là chính xác
    (/ var / lib / php / session) không xác định trên dòng 0 "trong khi đọc ngược dòng"

Rõ ràng đây là một vấn đề cho phép; Chủ sở hữu / nhóm thư mục phiên của tôi là người dùng của máy chủ web, NGINX. PHP-FPM chạy như nobodythể, và do đó việc thêm nó vào nhóm nginx không phải là quá nhỏ.

Một giải pháp tạm thời là để thiết lập các điều khoản của /var/lib/php/sessionđể 777- tôi có cảm giác đó không phải là "thực hành tốt nhất" mặc dù.

Cách thực hành tốt nhất khi bạn cần gán quyền truy cập ghi daemon vào thư mục, nhưng nó đang chạy như nobodythế nào?

Câu trả lời:


24

Quyền chính xác cho chúng tôi ở đâu

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

như php-cgichạy nobody, mặc dù NGinx chạy như người dùngnginx


Trong trường hợp của tôi, đó không phải là câu hỏi về quyền sở hữu / quyền. Xóa "3;" từ session.save_path = "3; / var / lib / php / session"
John Doe

1
Tôi nhận được lỗi sau: Nhóm không hợp lệ << none: nogroup >> :(
Pathros

tôi đã có thể xem nobodyngười dùng nào chạy php với dòng mã này: <?php echo exec('whoami'); ?>(trong trường hợp của tôi là dữ liệu www) và sau đó thật đơn giản vì chỉ cần viết chown -R www-data:www-data /var/lib/php/sessionsđây là kết quả google bị đánh giá thấp vì đó là câu trả lời duy nhất mà nó giúp được tôi sau nhiều giờ tìm kiếm! cảm ơn!
Dimitar

9

Nếu bạn sử dụng nginx, bạn có thể gặp phải vấn đề này khi chạy cập nhật hệ thống.

Đôi khi khi bạn cập nhật hệ thống, nhóm của /var/lib/php/sessionđược thay đổi thành apache.

Hãy thử thực thi sudo chgrp nginx /var/lib/php/*thay vì đặt quyền thành 777, đây là một cách làm không tốt.

Điều đó làm việc cho tôi ít nhất.


1
Điều này nên được đánh dấu là câu trả lời được chấp nhận.
Yuda Prawira

3

Sử dụng chỉ thị /etc/php.ini session.save_path .

Một giải pháp tạm thời là đặt quyền của / var / lib / php / session thành 777 - Tôi có cảm giác đó không phải là "cách thực hành tốt nhất".

"Nếu bạn để bộ này thành một thư mục dễ đọc trên thế giới, những người dùng khác trên máy chủ có thể chiếm quyền điều khiển phiên bằng cách lấy danh sách các tệp trong thư mục đó."


Xin lỗi tôi nghĩ rằng tôi có thể không rõ ràng: session.save_path đã được đặt thành / var / lib / php / session. Vấn đề là tôi không thể tìm ra quyền và quyền sở hữu nào để gán cho thư mục đường dẫn phiên để vừa cho phép PHP-FPM ghi vào nó, vừa giữ an toàn. Có thư mục được đặt là chủ sở hữu / nhóm "nginx" (Máy chủ web tôi đang chạy) và quyền 755 dường như không thực hiện được mẹo
Giáo sư Frink

4
1. Sử dụng cùng một người dùng: nhóm cho nginx và php-fpm (thông qua một trong hai nginx.confhoặc php-fpm.conf), vì vậy bạn có thể giữ thư mục này 700. 2. Sử dụng chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessionvì vậy tôi nghĩ cả nginx và php-fpm đều có thể sử dụng nó
SaveTheRbtz

2
Tôi có thể xác nhận rằng sử dụng nginx: none (hoặc nginx: nogroup trong một số trường hợp) hoạt động. Tuy nhiên, nếu có thể, tôi sẽ nghiêng về tùy chọn 1 của SaveTheRbtz.
Michael Johnson

3

Tôi đã phải tạo thư mục với 0700 quyền trong / var / lib / php / session cho mỗi nhóm php-fpm.

Chủ sở hữu của thư mục này là người dùng và nhóm từ nhóm php-fpm.

Và / var / lib / php / phiên bây giờ 0777.

Tôi nghĩ rằng phương pháp này là an toàn nhất. Chỉ người dùng pool php-fpm mới thấy phiên này.


1

Tôi đã có cùng một vấn đề và tôi đã giải quyết nó. Tôi đã đi đến /tmp(đó là nơi chứa các tập tin ses_ * của tôi) và xóa tất cả chúng. Sau đó mọi thứ đều ổn.

Gần như tôi có thể nói hệ thống đang cố ghi vào các tập tin bị khóa cũ.

Vấn đề xảy ra sau khi tôi chơi với php.ini. Tôi đã mất một vài năm từ cuộc sống của tôi nhưng cuối cùng tôi đã tìm thấy giải pháp.


1

Cách chính xác là thay đổi quyền sở hữu của thư mục phiên thành nginx. Tuy nhiên, PHP-FPM không chạy bằng người dùng nginx theo mặc định. Nó sử dụng apache theo mặc định.

Như đã nói, bạn phải thay đổi người dùng được PHP-FPM sử dụng bằng cách chỉnh sửa /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

Khởi động lại PHP-FPM và bạn nên đi.

service php-fpm restart


PHP con đường phiên vị trí có thể được tìm thấy trong /etc/php.inidưới session.save_path. /var/lib/php/sessionlà mặc định

Lệnh cập nhật quyền sở hữu và nhóm thư mục phiên php

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

Và bạn nên đi ngay cả với chmod 700.


1

Thư mục / var / lib / php / session nên có quyền bit dính.

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

Dựa trên câu trả lời @Judder , để làm cho nó hoạt động, tôi đã phải thêm lệnh sau để cấp quyền đọcghi cho ainogroup :

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

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

chmod sẽ thay đổi quyền trên thư mục đã cho
-R sẽ áp dụng cùng quyền cho các thư mục và tệp được tạo trong thư mục đã cho
u cho người dùng
g cho nhóm
r cho phép đọc
w cho phép ghi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.