Mac OS X에 내장 된 Apache에서 403을 수정하는 방법?


21

내 새로운 MacBook Air 13에서 로컬 환경을 설정하려고합니다. ": 내장 된 Apache DocumentRoot, PHP 및 MySQL. 나는 보통 갱신한다. /etc/hosts 예쁜 퍼머 링크로 로컬 웹 사이트를 운영하는 것입니다. local/example. 참조를 위해, 나는 보통 다음을 점검한다.

이번엔 간단하게 403 금지 내가 칠 때마다 오류가 발생했습니다. 127.0.0.1, localhost, 또는 local. 처음에는 터미널을 통해 아파치와 PHP가 실행되고있는 것을 보았습니다 (PHP 페이지를 볼 수는 없지만). 그런 다음에 따라 모든 사용 권한을 업데이트했습니다. Apache 권한 ; 지금 나는 절망적이다. 다음은 관련 Apache 구성입니다.

  • /etc/hosts ( 파일보기 - 한 줄 추가)
  • /etc/apache2/httpd.conf ( 파일보기 - 업데이트 됨 DocumentRoot )
  • /etc/apache2/users/joao.conf ( 파일보기 -이 파일을 만들었습니다.)
  • /etc/apache2/extra/httpd-vhosts.conf ( 파일보기 - 업데이트 됨 VirtualHost )

아파치가 내 접근을 거부하는 것처럼 보입니다. DocumentRoot (그건 그렇고 ~/Sites ). 때문에 ~/Sites 실제로는 심볼릭 링크입니다. DocumentRoot 다음 경로 (모두 동일한 디렉토리를 가리킴)를 사용하십시오.

  • ~/Sites
  • /Users/joao/Sites
  • /Users/joao/Dropbox/Workflow/Sites (그만큼 기발한 예배 규칙서)

여전히 던지고있다. 403 . 어떤 아이디어를 수정 / 디버깅하는 방법?

빠른 업데이트 - 여기 내 /var/log/apache2/joao.pt-error_log 다음과 같이 보입니다.

[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:47 2013] [error] [client ::1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:47 2013] [error] [client ::1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:48 2013] [error] [client ::1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:48 2013] [error] [client ::1] (13)Permission denied: access to /favicon.ico denied

답변:


15

OSX 서버에서 사용자 디렉토리를 가리키는 별명을 지정했습니다. 나는 오래 동안 _www 사용자로 chmodding하고 덤비는 데 재귀 적으로 실행 권한을 추가하고, macports와 이것을 제거하려고하는 모든 종류의 것들을 제거했다. 왜 그것이 작동하지 않았는지 전혀 몰랐습니다.

결국, 방금 그 폴더에 대한 Finder의 "공유 폴더"체크 박스를 체크했는데 성공했습니다. , 지정된 도메인에서 php active를 사용하여 원하는 방식대로. : / ... 그렇게 쉬웠다.


9

필자는 일반적으로 아파치 사용자를 로컬 환경과 아파치를 사용하는 유일한 사용자가 나 자신으로 설정함으로써이 문제를 해결했다. 에서 /private/etc/apache2/httpd.conf, 설정하다 User 님의 사용자 이름 : _www예 :

User _www

& gt;

User joao

그런 다음 Apache를 다시 시작하십시오.

$ sudo apachectl restart

추가 단계 :

  1. 활성 세션이있는 경우, 그들은 여전히 ​​소유하고 있기 때문에 권한 오류를 줄 것입니다. _www. 그것을 소유하십시오 :

    $ sudo chown joao: /var/tmp/sess_*
    

암시 :

그 후에, Apache (와 PHP 외)는 당신과 같이 실행되며 당신은 읽기 / 쓰기 권한이있는 모든 파일에 대해 읽기 / 쓰기 권한을 얻습니다. 하지만 이것은 단지 지역 개발 환경이기 때문에 방화벽에서 Apache를 차단할 규칙이 없다면 문제가되지 않습니다. 파일 탐색기, 셸, Apache에서 실행되는 취약점을 포함 할 수있는 스크립트와 같은 의심스러운 파일을 보냅니다. 이 경우 카페에있는 공중 와이파 이웃을 포함한 모든 사람이 들어갈 수 있습니다. http://<your IP> 그리고 그 스크립트가 무엇이든 할 수있게하십시오.

실제로 실행하는 스크립트에 관계없이 또는 심지어 임의의 외부인이 귀하의 컨텐츠를 볼 수 없기 때문에 Apache 사용자를 직접 설정하지 않은 경우에도이를 방지해야합니다. localhost.

예방:

  1. Apache가 localhost에만 수신 대기하도록합니다. 다시, httpd.conf:

    Listen 80
    

    & gt;

    Listen 127.0.0.1:80
    

    그리고 아파치를 다시 시작하십시오 :

    $ sudo apachectl restart
    
  2. 응용 프로그램 방화벽에서 Apache를 비활성화하십시오 (클릭 한 경우 이미 비활성화되어있을 수 있습니다. Deny 처음 아파치를 실행했을 때 질문을 받았을 때) :

    1. 열다 System Preferences » Security & Privacy » Firewall.
    2. 왼쪽 아래의 자물쇠 아이콘을 클릭하고 필요한 경우 비밀번호를 입력하십시오.
    3. 방화벽이 비활성화되어 있으면 켜십시오.
    4. 딸깍 하는 소리 Firewall Options.
    5. 클릭 + 단추.
    6. 히트 cmd ⌘ + ⇧ 시프트 + 들어가서 /usr/sbin/httpd 클릭 Add (만약 httpd 거기에 나타나지 않으면, 당신은 터미널에서 그것을 찾을 수 있습니다 which httpd )
    7. 목록에서 클릭하십시오. httpd 선택하고 Block incoming connections.
    8. 히트 OK.
    9. 방화벽을 다시로드하십시오.

      $ launchctl unload /System/Library/LaunchAgents/com.apple.alf.useragent.plist
      $ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.alf.agent.plist
      $ launchctl load /System/Library/LaunchAgents/com.apple.alf.useragent.plist
      $ sudo launchctl load /System/Library/LaunchDaemons/com.apple.alf.agent.plist
      
  3. PHP를 문서 루트로 제한하십시오. 에서 php.ini:

    open_basedir = /Users/joao/Sites/:/var/tmp/
    

    ( /var/tmp/ 세션 용)

어떤 이유에서든 그 중 하나가 작동하지 않을 경우를 대비하여 세 가지 솔루션을 모두 사용하십시오.

- 내 컴퓨터에서 작동하는 언어가 영어로 알지 못하므로 문구가 약간 다를 수 있습니다 (메뉴 옵션 및 문구는 다양한 OS X 버전의 언어와 관계없이 다를 수 있음).

- 시작 라인 $ 명령 줄 (터미널 또는 iTerm 등)에 입력해야합니다. $ 제거되었습니다.


9

내가 업데이트 macOS Sierra , 버전 10.12

나는 똑같은 문제에 직면했다. 제대로 해결하기 위해 두 가지 일을했다. 다음은 나의 접근법이다.

1) 확인해주십시오 " /private/etc/apache2/extra/httpd-userdir.conf "파일. 변화

#Include /private/etc/apache2/users/*.conf

Include /private/etc/apache2/users/*.conf

2) ** 그리고 " /etc/apache2/httpd.conf "

변화

Options FollowSymLinks Multiviews

Options FollowSymLinks Multiviews Indexes

마침내 당신의 문서 루트는 다음과 같을 것입니다.

DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
Options FollowSymLinks Multiviews Indexes
MultiviewsMatch Any
AllowOverride All
Require all granted

삼) 아파치를 다시 시작하십시오.

sudo apachectl restart

그래도 문제가 발생하면 친절하게 확인하십시오. macOS Sierra 10.12에서 Apache를 설정하는 방법


5

방금 권한을 설정하여 문제를 해결했습니다. DocumentRoot 디렉토리뿐만 아니라 모든 상위 디렉토리에도 적용됩니다. 이것은 내가 어떻게 한거야? .

(13) 사용 권한이 거부되었습니다.

오류 13은 파일 시스템 권한 문제를 나타냅니다. 즉, Apache는 잘못된 권한으로 인해 파일 또는 디렉토리에 대한 액세스가 거부되었습니다. 일반적으로 Apache 구성 파일에 문제가 있음을 의미하지는 않습니다.

파일을 제공하기 위해, Apache는 운영 체제가 해당 파일에 액세스 할 수 있도록 적절한 권한을 가지고 있어야합니다. 특히, httpd.conf에 지정된 사용자 또는 그룹은 제공 될 모든 파일을 읽고 해당 파일이 들어있는 디렉토리와 파일 시스템의 루트까지 모든 상위 디렉토리를 검색 할 수 있어야합니다.

httpd.conf에 지정된 사용자 나 그룹이 소유하지 않은 자원에 대한 유닉스 계열 시스템의 일반적인 사용 권한은 일반 파일의 경우 644 -rw-r-r--이고 디렉토리 또는 CGI 스크립트의 경우 755 drwxr-x-r-x입니다. 또한 지원하는 운영 체제에서 확장 된 권한 (예 : SELinux 권한)을 검사해야 할 수도 있습니다.

2.4를 실행 중이면 AH 오류 코드가 여기에 더 많은 정보를 제공 할 수 있습니다.

  • AH00132 : 파일 액세스가 서버 액세스를 거부합니다.
  • AH00035 : 경로 구성 요소에서 검색 권한이 없어 액세스가 거부되었습니다.   예제

유닉스 계열 시스템에서 /usr/local/apache2/htdocs/foo/bar.html 파일에 액세스 할 때 사용 권한 거부 오류가 발생했다고 가정 해 보겠습니다.

먼저 파일에 대한 기존 사용 권한을 확인하십시오.

cd /usr/local/apache2/htdocs/foo
ls -l bar.htm

필요한 경우 수정하십시오.

chmod 644 bar.html

그런 다음 디렉토리와 각 상위 디렉토리 (/ usr / local / apache2 / htdocs / foo, / usr / local / apache2 / htdocs, / usr / local / apache2, / usr / local, / usr)에 대해 동일한 작업을 수행하십시오.

ls -la
chmod +x .
cd ..
# repeat up to the root

일부 시스템에서는 유틸리티 namei를 사용하여 경로의 각 구성 요소에 대한 사용 권한을 나열하여 사용 권한 문제를 찾을 수 있습니다.

이름 - m /usr/local/apache2/htdocs/foo/bar.html   시스템에 namei가 없으면 parsepath를 사용할 수 있습니다. 여기에서 얻을 수 있습니다.

모든 표준 사용 권한이 올 바르며 여전히 사용 권한 거부 오류가 발생하면 확장 사용 권한을 확인해야합니다. 예를 들어 setenforce 명령을 사용하여 SELinux를 끄고 문제가 사라지는지 확인하십시오. 그렇다면 ls -alZ를 사용하여 SELinux 사용 권한을보고 chcon을 사용하여이를 수정하십시오.

드문 경우이지만이 문제는 apache2.conf 파일의 파일 권한 문제와 같은 다른 문제로 인해 발생할 수 있습니다. 예를 들어, WSGIScriptAlias ​​지시문은 실제 파일에 매핑되지 않습니다. 읽을 수없는 파일에 대한 오류 메시지가 정확하지 않을 수 있습니다.

"단지 테스트 서버 일지라도"파일이나 디렉토리를 모드 777로 설정하지 마라. 테스트 서버의 목적은 잘못된 환경에서 벗어나지 않고 안전한 환경에서 올바른 것을 얻는 것입니다. 문제가 실제로 존재하는 파일인지 여부 만 알 수 있습니다.

CGI 스크립트

CGI 스크립트 권한이 올바르지 만, shebang에 지정된 실제 2 진 파일은 적절한 권한을 가지고 있지 않을 수도 있습니다. (또는 경로상의 일부 디렉토리는 위에서 설명한대로 namei로 확인하십시오.)

(13) 사용 권한이 거부되었습니다. 프록시 : HTTP : 127.0.0.1:8080 (localhost)에 연결하지 못했습니다.

이 오류는 파일 사용 권한이나 그와 같은 것에 관한 것이 아닙니다. 그것이 실제로 의미하는 것은 httpd가 그 IP 주소와 포트에 연결할 수있는 권한을 거부 당했다는 것입니다.

가장 일반적인 원인은 SELinux가 httpd가 네트워크 연결을 허용하지 않는 것입니다.

이 문제를 해결하려면 SELinux 부울 값을 변경해야합니다 (재부팅시 자동으로 유지됨). 엄격히 요구되는 것은 아니지만 httpd를 다시 시작하여 프록시 작업자를 재설정 할 수도 있습니다.

# setsebool -P httpd_can_network_connect 1


1
답안의 기본 포인트를 요약 해 주시겠습니까? 감사!
Matt

2
모든 상위 디렉토리에 대한 액세스 권한 부여는 거대한 보안 침해!
Julian F. Weinert

1
이 대답은 유용하지 않습니다. 해결 방법은 Linux 컴퓨터 / 구성에서 작동합니다. OSX는 다른 디렉토리 구조를 가지고 있습니다. 특별히 apache (/ Library / WebServer에 위치)에 대해서는 apple.stackexchange처럼 OSx가 아닙니다.
Juan

3

다음 단계는 Apache 2.4를 실행하는 High Sierra에서 저에게 효과적이었습니다.

(다음 우수한 자습서를 기반으로 : http://www.cgi101.com/book/connect/mac.html 버전 차이에 대한 추가 단계로 업데이트 됨)

  1. 파일을 다음 위치로 이동하십시오.

    /Library/WebServer/CGI-Executables
    
  2. 파일에 실행 권한이 있는지 확인하십시오.

    ls -l  /Library/WebServer/CGI-Executables
    

    사용하지 않을 경우 :

    chmod -x  /Library/WebServer/CGI-Executables/myfile.cgi
    
  3. /etc/apache2/httpd.conf에서 다음 줄의 주석 처리를 제거하십시오.

    AddHandler cgi-script .cgi .pl
    
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    
    LoadModule cgi_module libexec/apache2/mod_cgi.so
    
  4. 또한 "/ Library / WebServer / CGI-Executables"스 D자를 다음으로 변경하십시오.

    <Directory "/Library/WebServer/CGI-Executables">
     AllowOverride None
     Options ExecCGI
     Require all granted
    </Directory>
    
  5. 그런 다음 Apache를 다시 시작하십시오.

    sudo apachectl -k restart
    

거의 모든 새로운 macOS 버전을 사용하면 변경 사항이 손실되고 작업을 다시하고 심지어 다른 단계로 수정해야 할 필요가 있습니다. 가장 친한 친구는 / var / log / apache2 / (/ var / log / apache2 / error_log)에있는 Apache 로그입니다.


1
대답이 아니라 관찰. 위의 # 1 명령 : 파일을 다음 파일로 이동합니다. 어떤 파일입니까?
Pam

0

ACL을 사용하여 권한을 설정하고 " Mac OS X에서 Apache 용 파일 및 디렉토리 권한을 설정하는 방법 "그래도 점점 :

[Wed Feb 12 15:43:51 2014] [error] [client ::1] (13)Permission denied: access to /trace/trace.php denied (filesystem path '/Library/WebServer/Documents/trace/trace.php') because search permissions are missing on a component of the path

그 다음 나는 " (13) 사용 권한이 거부되었습니다. "( João Ramos의 대답 ) ACL에 "execute"를 추가하려고 시도했습니다. 그게 효과가 있었어.

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