open_basedir 제한이 적용됩니다. 파일 (/)이 허용 된 경로 내에 없습니다 :


87

내 사이트에 아바타를 업로드 할 때이 오류가 발생합니다. 나는 전에 그것을 얻은 적이 없으며 최근 에이 오류가 발생하기 시작하도록 변경된 것이 없습니다 ...

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

18
작동하지 않는 답변을 수락했습니다.
sjas

답변:


-22

PHP 구성에서 open_basedir설정 을 수정합니다 ( 런타임 구성 참조 ).

open_basedir설정은 주로 특정 사용자의 PHP 스크립트가 다른 사용자 계정의 파일에 액세스하지 못하도록 방지하는 데 사용됩니다. 따라서 일반적으로 자신의 계정에있는 모든 파일은 자신의 스크립트로 읽을 수 있어야합니다.

.htaccessPHP가 Linux 시스템에서 Apache 모듈로 실행되는 경우 를 통한 예제 설정 :

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

2
@Nikesh 내 .htaccces에 넣고 경로를 다음과 같이 변경 한 후 500 오류가 발생했습니다 /my/cutsom/dir/. 왜 생각했는지 모르겠습니다.
hitautodestruct 2013 년

79
지금까지 12 개의 찬성 투표가 오답입니다. 파일 에서 사용할 수 없습니다php_admin_value.htaccess . .htaccess 파일에서 DirectoryMatch를 사용할 수 없습니다 . ( open_basedir만약 비활성화 할 수 있다면 어떤 종류의 보안 조치가 필요합니까?)
Álvaro González

1
@eoinoc-아래로 스크롤하여 예를 들어 Andrei의 대답을 봅니다. 또는 전역 php.ini 파일을 편집하십시오.
Álvaro González

19
당신은 이것을 당신의 HTACCESS에 넣지 마십시오! 그러나 APACHE 구성 파일에 비해.
tfont 2013 년

8
open_basedir에 루트 디렉토리를 포함하는 것은 open_basedir의 목적을 완전히 무효화합니다. 이 솔루션은 기본적으로 제한을 비활성화한다는 의미에서만 "작동"합니다.
Martin

113

호스팅 계정에서 open_basedir 설정을 수정하고 none으로 설정하십시오. Plesk / cPanel의 'PHP 설정'영역에서 제공된 open_basedir 설정을 찾으십시오. 거기에 주어진 드롭 다운에서 '없음'으로 설정하십시오. 나는 그들을 Plesk 패널 사진에서 보여 주었다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력


1
이 작업을 수행 한 후 @yogihosting 오류가 발생했습니다-지정한 모델을 찾을 수 없습니다 :
Home_model

1
이것에 조금 늦었지만 모든 plesk 사이트에 대해 그렇게 할 수있는 방법이 있습니까? 사이트가 사용하는 버전에 대해 전역 php.ini에서 없음으로 설정했습니다. gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 그러나 여전히 오류가 발생합니다.
Matt Cowley

@MattCowley는 plesk 패널에 호스팅 된 모든 사이트에 대해이 작업을 수행해야합니다.
yogihosting

1
매우 helpfull 대답, 내 문제는 엄지 손가락 :) 해결
muhammadanish

1
이 솔루션에 감사드립니다! 이것은 공유 호스팅에서 나를 위해 완벽하게 작동합니다!
Smilefounder jul.

38

이 오류를 해결하려면 httpd.conf 파일을 편집해야합니다. apache2handler 섹션 지시자 서버 루트의 phpinfo에서 볼 수 있기 전에. 예를 들어, 제 경우에는 이런 식으로-/ etc / httpd / httpd.conf. httpd.conf 파일을 열고 open_basedir 매개 변수에 대한 언급을 찾으십시오. 그리고 없음으로 설정하십시오. ( php_admin_value open_basedir 없음 )


'없음'으로 설정하면 Plesk 인터페이스를 사용하여 저에게 효과적이었습니다.
diggersworld

8
내가 찾은 open_basedir내에서 구성 php.ini. (PHP 5를 사용하는 Raspberry Pi의 Arch Linux)
dennisschagt 2014

2
또한 내 php.ini (또한 Arch)에서 찾았습니다. 이 답변과 동일한 효과를 얻으려면 줄을 주석 처리하십시오.
Ben Elgar

@BenElgar 그냥 라인을 주석으로 거기 위험, 난 그냥 해달라고 부탁 작품을 언급했다
mwangaben

6

경우에 당신은 이것을 실행하고 있습니다 php file.php. php.ini 다음 파일 찾기 를 편집해야 합니다.

: locate php.ini
/etc/php/php.ini

open_basedir속성에 파일의 경로를 추가합니다 .

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected


이것은 보안을 완전히 건너 뛰는 대신 여러 특정 경로를 가리키는 유일한 솔루션입니다.
mvreijn

5

나에게 문제는 전체를 실행하는 Plesk 서버의 구성 값이 잘못되었거나 누락되었습니다. 나는 단지 여기의 지시를 따랐다 : http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

각 VirtualHost 정의에 대해 별도의 오류 로그 파일을 갖도록 PHP를 구성 할 수 있습니다. 트릭은 Plesk를 깨지 않고는 구성을 직접 만질 수 없기 때문에 설정 방법을 정확히 아는 것입니다. (dv)의 모든 도메인 이름은 / var / www / vhosts에 자체 디렉토리가 있습니다. 일반적인 디렉토리에는 다음과 같은 최상위 디렉토리가 있습니다.

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

다음 줄을 사용하여 도메인 디렉터리의 conf / 폴더에 vhost.conf 파일을 만들 수 있습니다.

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

실제 설치와 일치하도록 첫 번째 값을 변경하십시오 (/tmp/phperrors.log 사용). vhost.conf 파일 편집을 완료 한 후 다음을 사용하여 콘솔에서 구성을 테스트합니다.

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

그리고 마지막으로 Plesk에게이 변경 사항을 적용했다고 말하십시오.

/usr/local/psa/admin/bin/websrvmng -a

2

참조하는 경로는 작업 공간의 directoryRoot가 아니라 incorect입니다. 액세스하려는 파일의 절대 경로를 만들어보십시오. 이제 상대 경로를 사용하고있을 것입니다.


절대 경로를 사용하고 있습니다. 이것을 제외한 모든 사용자에게 적용됩니다.
Webnet 2009

2

ispconfig3에 이런 종류의 문제가 있고 이와 같은 오류가 발생하면

open_basedir 제한이 적용됩니다. 파일 (/ var / www / clients / client7 / web15)이 허용 된 경로 내에 없습니다 : .........

그것을 해결하려면 (제 경우) ispconfig3의 웹 사이트 패널에서 PHP를 SuPHP로 설정하십시오.

누군가에게 도움이되기를 바랍니다 :)


2

업데이트 및 / 또는 이동 후 내 워드 프레스 사이트 중 하나에서이 문제가 발생했습니다. :)

데이터베이스 테이블 'wp_options'에서 'upload_path'를 확인하고 올바르게 편집하십시오.


어떤 값으로 설정 했습니까? /[...]/public_html/wp-content/uploads?
brett

1

ispconfig3을 사용하는 경우 :

웹 사이트 섹션-> 옵션-> PHP open_basedir로 이동합니다.

여기에 이미지 설명 입력

  • 이 필드에는 허용 된 경로가 설명되어 있으며 각 경로는 ":"로 구분됩니다.

/ var / www / clients / client2 / web3 / image : / var / www / clients / client2 / web3 / web : / var / www / ... 등

  • 따라서 여기에 액세스 할 경로를 입력해야합니다. 제 경우에는 다음과 같습니다.

/ var / www / clients / client2 / web3 / image :

  • 문제는 다음과 같은 이유로 나타납니다.

스크립트가 예를 들어 include 또는 fopen ()을 사용하여 파일 시스템에 액세스하려고하면 파일 위치가 확인됩니다. 파일이 지정된 디렉토리 트리 밖에 있으면 PHP는 액세스를 거부합니다.


0

PHP IIS 스택을 실행 중이고이 오류가있는 경우 일반적으로 빠른 권한 수정입니다.

Windows 서버를 직접 관리하고 액세스 권한이있는 경우 먼저 다음을 시도하십시오.

글쓰기에 대해 슬픔을 느끼는 폴더로 이동하여 마우스 오른쪽 버튼으로 클릭> 속성 열기> 보안.

어떤 사용자가 폴더에 액세스 할 수 있는지, 어떤 사용자는 읽기 전용이고 어떤 사용자는 전체가 있는지 확인합니다. 쓰기를 차단하는 그룹이 있습니까?

수정 사항은 IIS 설정에 따라 다릅니다. 특정 사용자 IUSR 또는 응용 프로그램 풀 ID와 함께 익명 인증을 사용하고 있습니까?

어쨌든 IUSR, IIS_IUSRS 또는 응용 프로그램 풀 ID 중 하나에 대한 새로운 전체 쓰기 권한을 추가하게 될 것입니다. 제가 말했듯이 이것은 설정과 수행 방법에 따라 달라질 것입니다. 당신은 이것에 대한 구글 토끼 구멍을 내려갈 수 있습니다 (그런 게시물 -IIS_IUSRS 및 IIS8의 IUSR 권한 ) 나를 위해, 나는 내 앱 풀 ID와 함께 anon을 사용하므로 MACHINE_NAME\IIS_IUSRS모든 임시 또는 업로드에서 전체 읽기 / 쓰기로 벗어날 수 있습니다. 폴더.

open_basedir =php.ini에 추가 할 필요가 없습니다 .


0

@yogihosting의 답변 외에도 DirectAdmin을 사용하는 경우 다음 단계를 따르십시오.

  1. DirectAdmin의 로그인 페이지로 이동합니다. 일반적으로 포트는 2222입니다.
  2. 관리자로 로그인하십시오. admin기본적으로 사용자 이름입니다 .
  3. 오른쪽 패널의 "액세스 수준"에서 "관리자 수준"에 있는지 확인합니다. 그렇지 않은 경우 변경하십시오.
  4. "추가 기능"섹션에서 "사용자 지정 HTTPD 구성"을 클릭합니다.
  5. 변경할 도메인을 선택하십시오.
  6. 페이지 상단의 텍스트 영역에 변경하려는 구성을 입력합니다. 기존 구성 파일을 고려하고이를 기반으로 값을 수정해야합니다. 예를 들어 open_basedir내부에 설정되어있는 <Directory>경우 관련 <Directory>태그 에서 변경 사항을 둘러싸 야합니다 .

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. 필요한 사항을 변경 한 후 "저장"버튼을 클릭하십시오.

  8. 이제 유효한 경우 구성 파일에 저장된 변경 사항을 볼 수 있습니다.

그러나 구성 파일을 편집하는 다른 방법이 있습니다.

주의 : 오류가 발생하거나 다운 타임이 발생할 수 있으므로주의하고 다음 단계를 따르십시오. 권장되는 방법은 구성 파일을 부적절하게 수정하는 것을 방지하고 오류를 표시하는 이전 방법입니다.

  1. 서버에 루트로 로그인하십시오.
  2. 로 이동하십시오 /usr/local/directadmin/data/users. 나열된 사용자에서 변경하려는 도메인과 관련된 사용자로 이동하십시오.
  3. 여기에 httpd.conf파일이 있습니다. 그것으로부터 백업을 만드십시오 :

    cp httpd.conf httpd.conf.back
    
  4. 이제 선택한 편집기로 구성 파일을 편집하십시오. 예를 들어 기존 open_basedirnone. 물건을 제거하려고하지 마십시오. 그렇지 않으면 다운 타임이 발생할 수 있습니다. 편집 후 파일을 저장하십시오.

  5. 다음 방법 중 하나를 사용하여 Apache 웹 서버를 다시 시작합니다 ( sudo필요한 경우 사용 ).

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. 오류가 발생하면 기본 구성 파일을 백업 된 파일로 바꾸고 웹 서버를 다시 시작하십시오.

다시 말하지만, 첫 번째 솔루션이 선호되는 솔루션이므로 처음에는 두 번째 방법을 시도해서는 안됩니다. 주의 사항에서 언급했듯이 첫 번째 방법의 장점은 잘못 구성된 항목을 저장하는 것을 방지한다는 것입니다.

도움이 되었기를 바랍니다.


0

Apache vhost -File을 사용하여 Windows 서버에서 응용 프로그램 별 ini 옵션으로 PHP를 실행하고 있습니다. 따라서 php-command 의 -d 옵션을 사용합니다 .

이러한 옵션 중 하나로 모든 응용 프로그램에 대해 open_basedir 을 설정하고 있습니다.

UNC-Path를 포함하여 여러 URL을 open_basedir로 설정해야했는데이 경우 구문을 찾기가 약간 어려웠습니다. 세미콜론으로 경로를 구분 해야하며 첫 번째 경로가 드라이브 문자로 시작하는 경우 세미콜론으로 목록을 시작해야 할 수도 있습니다. 적어도 그것은 나를 위해 일하는 것입니다.

예:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

-3

그냥 검색

open_basedir =

php.ini에서 비활성화하십시오. 이것이이 문제를 해결하는 가장 간단한 해결책입니다.

변경 전 open_basedir =

변경 후 ;open_basedir =

추신-변경 후 서버를 다시 시작하는 것을 잊지 마십시오.

즐겨 ;)


3
이러지 마세요 ... 보안은 믿거 나 말거나 중요합니다. :) 도구에 대한 문서를 읽을 시간 : php.net/manual/en/ini.core.php#ini.open-basedir
Adam Lenda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.