PHP 5.3 및 세션 폴더 관련 문제


81

최근에 PHP 5.3으로 업그레이드 한 후 Apache (또는 세션 파일의 클리너 일 수 있음)에 세션이 저장된 폴더에 대한 권한이 없음을 나타내는 (산발적 인) 오류 메시지가 표시됩니다.
이것은 무작위로 발생하며 정확한 단계로 재현 할 수 없기 때문에 세션 클리너라고 추측하게되었습니다.
누구든지 그러한 오류에 대한 경험이 있습니까?

오류 메시지 ( session_start()라인에서 발생)는 다음과 같습니다.

ps_files_cleanup_dir : opendir (/ var / lib / php5) 실패 : 권한이 거부되었습니다.

세션 디렉토리의 ls -ltr은 다음을 제공합니다.

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5

이 디렉토리 안에는 내 Apache 인 www-data가 소유 한 세션 파일이 있으며 앱이 제대로 작동합니다. 어떤 사용자가 세션 GC를 실행하는지 궁금합니다.


5.3에서는 그렇지 않았습니다. 세션 저장 경로로 필터링 된 권한 오류로 판명되었습니다. 권한을 확인했다고 가정합니까?
Jarrod Nettles

@Jarrod 나는 www-data가 그 폴더를 읽고 쓸 수 있다는 것을 알았습니다.
Itay Moav -Malimovka

산발적으로 발생하는 이유는 세션 가비지 수집기가 실행될 때 오류가 발생하기 때문이라고 생각합니다. 기본적으로 세션 초기화 당 실행될 확률은 1 %라고 생각합니다. 세션과 관련하여 php.ini를 변경 했습니까? 여기서 기본값을 벗어난 것은 무엇입니까? 세션 폴더의 소유자를 확인한 후 .ini 또는 오류가 표시되지 않고 손실됩니다.
Jarrod Nettles

소유자는 루트이고 세션은 www-data에 의해 생성되며 모든 사람이이 폴더에 액세스 할 수 있습니다. ini 설정을 하나씩 살펴보고 의심스러운 것을 찾아 보겠습니다.
Itay Moav -Malimovka

ps_files_cleanup_dir : opendir (/ var / lib / php5) 실패 : 권한 거부 (
Itay Moav -Malimovka

답변:


121

수정 : 당신에 php.ini세트 session.gc_probability0

내가 여기에서 답을 찾았다 고 믿는 원인 http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

기본적으로 가비지 수집은 일부 시스템 (예 : Ubuntu / Debian)에서 크론 작업에 의해 수행되도록 설정됩니다. php-cli와 같은 일부 php ini 실행 파일도 가비지 수집을 시도하므로 오류가 발생합니다.


6
Ubuntu 10.04에서도이 문제가 발생하지만 php.ini를 확인한 결과 session.gc_probability이미 0.
Jonathan

5
@Jonathan-응용 프로그램이 값을 설정하고 있음을 알 수 있습니다.
SynackSA 2013 년

3
나는이 때의 사용자 정의, 사이트 특정의 php.ini 파일을 만들 때 @SynackSA는 이상하게도, 그건 session.gc_probability1. 트리거이 일어난 php.ini 파일에는 설정이없는 경우에도 무엇이든지를 ! Ubuntu, Apache 2.2에서 suphp를 실행하고 있습니다. 그것이 어떤 종류의 버그인지 궁금합니다. 어쨌든 session.gc_probability = 0내 사용자 지정 사이트 특정 php.ini 파일에 추가 하면 문제가 해결되는 것 같습니다.
Jonathan

2
즉, 방법입니다 @ 조나단 기본 값이 1 인으로는, 일에 가정하자의
ROunofF

2
이렇게하면 세션 가비지 수집이 비활성화됩니다. 세션을 정리하는 크론이 실제로 있는지 확인하고 싶을 것입니다.
hansgoed

23

이것은 Ubuntu 서버의 일반적인 오류 인 것 같습니다 (Lucid LTS를 사용하고 있습니다). / var / lib / php5 디렉토리의 기본 권한은 다음과 같습니다.

drwx-wx-wt  2 root     root     4096 2011-11-04 02:09 php5

웹 서버에서 쓸 수는 있지만 읽을 수는 없으므로 오류를 설명하는 것 같습니다.

Ubuntu에는 cron ( /etc/cron.d/php5)을 통한 자체 가비지 정리 기능 이 있으므로 위에서 Diwant Vaidya가 제안한대로 PHP의 가비지 수집을 비활성화하는 것이 가장 좋습니다.

session.gc_probability = 0

실제로 세션 폴더가 세계에서 읽을 수 없어야하는 이유가 있습니다. PHP 매뉴얼에 따르면 :

이 설정을 / tmp (기본값)와 같이 세계에서 읽을 수있는 디렉토리로두면 서버의 다른 사용자가 해당 디렉토리에있는 파일 목록을 가져 와서 세션을 가로 챌 수 있습니다.


2

내가 현재 사용하는 솔루션 (올바른 것인지 확실하지 않음)은 세션 폴더에 대한 소유권을 Apache 사용자 (제 경우에는 www-data)에게 제공하는 것입니다.


2
Marie가 위에서 언급했듯이 모든 프로덕션 서버에 보안 문제가 발생할 수 있습니다.
Kzqai

2
나는 오랫동안 이후 보안 문제가 공유 서버에서 대부분이며, 최적의 솔루션을 구현 :-) 그러나 한
Itay Moav -Malimovka

1
@pike 세션 청소는 PHP CLI를 통해 CRON에 의해 처리됩니다
Itay Moav -Malimovka에게

1

이 문제는 한동안 나를 괴롭 혔습니다. php.ini에서 제안한대로 값을 변경했는데 문제가 계속 발생했습니다. index.php와 private / Zend / session.php에서도 동일한 구성 값을 찾았습니다. 따라서 문제가 계속 발생하면 좀 더 자세히 살펴볼 가치가 있습니다. 누군가에게 유용하기를 바랍니다.

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