FastCGI / PHP-FPM을 실행할 때 PHP 세션 폴더에서 어떤 권한 / 소유권을 설정해야합니까 (사용자“nobody”로)?


17

PHP-FPM이 세션 폴더에 쓸 수 없기 때문에 여러 스크립트를 실행하는 데 문제가 있습니다.

"2009/10/01 23:54:07 [오류] 17830 # 0 : * 24 FastCGI가 stderr로 전송되었습니다 :"PHP 경고 :
    알 수 없음 : open (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    실패 : 행 0의 알 수없는 권한 (13)이 거부되었습니다.
PHP 경고 : 알 수 없음 : 세션 데이터 (파일)를 쓰지 못했습니다. 확인 부탁합니다
    session.save_path의 현재 설정이 올바른지
    업스트림을 읽는 동안 0 행의 알 수없는 (/ var / lib / php / session)

분명히 이것은 권한 문제입니다. 내 세션 폴더의 소유자 / 그룹은 웹 서버의 사용자 인 NGINX입니다. PHP-FPM은 nobody마치 실행 되므로 nginx 그룹에 추가하는 것은 그리 쉬운 일이 아닙니다.

임시 솔루션의 사용 권한을 설정하는 것입니다 /var/lib/php/session777내가하지 불구하고 "가장 좋은 방법"의 느낌이를 -.

폴더에 데몬 쓰기 액세스 권한을 할당해야하지만 가장 잘 실행되고있는 방법은 nobody무엇입니까?

답변:


24

우리에게 올바른 권한

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

php-cgi실행될 때 nobody의 nginx는 사용자로 실행되는 경우에도,nginx


제 경우에는 소유권 / 권한에 관한 문제가 아니 었습니다. "3;"을 제거하십시오. session.save_path = "3; / var / lib / php / sessions"
John Doe

1
다음과 같은 오류가 발생합니다. 유효하지 않은 그룹 << nobody : nogroup >> :(
Pathros

나는이 nobody코드 줄로 PHP를 실행하는 내 사용자 가 무엇인지 알 수 있었다 : <?php echo exec('whoami'); ?>(내 경우에는 www-data) 그리고 그 후에 chown -R www-data:www-data /var/lib/php/sessions작성된 것은 간단 합니다. 이것은 그것이 도움이 된 유일한 답변이므로 과소 평가 된 Google 결과입니다 몇 시간 동안 검색 한 후! 감사!
Dimitar

9

nginx 를 사용 하면 시스템 업데이트를 실행할 때이 문제가 발생할 수 있습니다.

때때로 시스템을 업데이트 할 때 그룹이 /var/lib/php/session아파치로 변경됩니다.

sudo chgrp nginx /var/lib/php/*나쁜 습관 인 777로 권한을 설정 하는 대신 실행 해보십시오 .

그것은 적어도 나를 위해 일했습니다.


1
허용 된 답변으로 표시해야합니다.
Yuda Prawira

3

/etc/php.ini session.save_path 지시문을 사용하십시오 .

임시 해결책은 / var / lib / php / session의 권한을 777로 설정하는 것입니다. 그러나 "모범 사례"는 아닙니다.

"이 세트를 세계가 읽을 수있는 디렉토리로두면 서버의 다른 사용자가 해당 디렉토리에있는 파일 목록을 가져 와서 세션을 가로 챌 수 있습니다."


죄송합니다. session.save_path가 이미 / var / lib / php / session으로 설정되어 있지 않은 것 같습니다. 문제는 PHP-FPM이 파일을 쓸 수 있고 안전하게 유지할 수 있도록 세션 경로 디렉토리에 할당 할 권한과 소유권을 알 수 없다는 것입니다. 디렉토리를 소유자 / 그룹 "nginx"(내가 실행중인 웹 서버)로 설정하고 권한 755가 트릭을 수행하지 않는 것 같습니다
교수 Frink

4
1. 동일한 사용자 (중 하나를 통해의 nginx와 PHP-FPM에 대한 그룹 nginx.conf또는 php-fpm.conf이 디렉토리를 700 2.를 유지할 수 있도록) chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session난의 nginx와 PHP-FPM 모두 사용할 수 있다고 생각 있도록
SaveTheRbtz

2
nginx : nobody (또는 경우에 따라 nginx : nogroup)를 사용하면 작동하는지 확인할 수 있습니다. 가능하다면 SaveTheRbtz의 옵션 1에 의존합니다.
Michael Johnson

3

각 php-fpm 풀에 대해 / var / lib / php / session에서 0700 권한을 가진 폴더를 만들어야했습니다.

이 폴더의 소유자는 php-fpm 풀의 사용자 및 그룹입니다.

그리고 / var / lib / php / session은 이제 0777입니다.

이 방법이 가장 안전하다고 생각합니다. php-fpm 풀 사용자 만이이 세션을 볼 수 있습니다.


1

나는 같은 문제가 있었고 그것을 해결했다. 나는 /tmp(여기서 ses_ * 파일이있는 곳) 가서 모든 파일을 삭제했습니다. 그 후 모든 것이 정상이었습니다.

시스템이 오래된 잠긴 파일에 쓰려고했다는 것을 알 수 있습니다.

내가 게임을하고 난 후에 문제가 발생했습니다 php.ini. 나는 인생에서 몇 년을 잃었지만 결국 해결책을 찾았습니다.


1

올바른 방법은 세션 폴더의 소유권을 nginx로 변경해야합니다. 그러나 PHP-FPM은 기본적으로 nginx 사용자를 사용하여 실행되지 않습니다. 기본적으로 아파치를 사용합니다.

그렇기 때문에 PHP-FPM에서 사용하는 사용자를 편집하여 변경해야합니다 /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을 다시 시작하면 좋을 것입니다.

service php-fpm restart


PHP 세션 경로 위치는 /etc/php.ini아래에 session.save_path있습니다. /var/lib/php/session기본값입니다.

PHP 세션 폴더의 소유권 및 그룹을 업데이트하는 명령

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

그리고 chmod of로도 잘 가야 700합니다.


1

/ 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

0

@Judder 답변을 기반으로 작동하게 하려면 nobodynogroup 에 대한 읽기쓰기 권한 을 부여하기 위해 다음 명령을 추가해야했습니다 . chmod 는 주어진 폴더에 대한 권한을 변경합니다 -R 은 생성 된 폴더 및 파일에 동일한 권한을 적용합니다 지정된 폴더 내에 U 사용자에 대해 g 그룹에 대한 R 읽기 권한 기록 허가

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

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






당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.