Apache가 심볼릭 링크를 따르지 않음 (403 금지됨)


92

Ubuntu에서 Apache를 설정하는 데 문제가 있습니다. 나는 이 가이드를 따르고있다 .

# /usr/sbin/apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built:   Feb 22 2011 18:33:02

내 공개 디렉토리 인 / var / www는 그 안에있는 PHP 페이지를 성공적으로 제공하고 실행할 수 있습니다. 그러나 내 홈 폴더의 디렉토리를 가리키고 거기에 페이지를 제공하는 / var / www에 심볼릭 링크를 만들고 싶습니다.

[root /var/www]# ll
total 36
drwxr-xr-x  3 root root 4096 2011-09-11 14:22 .
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 ..
lrwxrwxrwx  1 root root   16 2011-09-11 13:21 about -> /root/site/about

브라우저에서 / about에 액세스하려고하면

Forbidden

You don't have permission to access /about on this server.

내가 아는 한, 제공하려는 파일에 충분한 권한을 부여했습니다.

[root ~/site/about]# ll
total 24
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 .
drwxr--r-- 3 root root 4096 2011-09-11 13:19 ..
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume

FollowSymLinks 옵션을 알고 있으며 내 / etc / apache2 / sites-enabled / 000-default 파일에 설정되어 있다고 생각합니다.

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

내가 뭘 놓칠 수 있는지 아십니까?

답변:


129

Apache에 /root, /root/site및에 대한 실행 권한이 있는지 확인하십시오 /root/site/about.

운영:

chmod o+x /root /root/site /root/site/about

8
고마워요 ... 부모 디렉토리도 실행 가능해야한다는 걸 몰랐습니다.
Tim

39
글쎄, 난이 일을하지 말 안하지만, 일반적으로,주는 O + X에서 / 루트에 좋은 생각이 아니에요)
마이클 Rzemieniecki

11
Michal이 맞습니다. ACL (최소한 Mac에서는)을 사용할 수 있다는 것을 알았습니다.이 chmod -R +a "_www allow list,search,readattr" /root /root/site /root/site/about권한 은 "other"보다 약간 더 안전한 apache 앱 (_www) 에만 해당 권한을 부여합니다 .
James S

1
Mac OS (10.9.4)에서는 ~ / Documents에 실행 권한이 없었고 사이트 파일을 호스팅 할 git repo가있었습니다. ~ / Documents에 chmod o + x를 부여하는 것이 트릭이었습니다! 감사!
Ernani Joppert 2014 년

1
마침내 답을 얻었습니다! 감사.
whoan

22

403 오류는 암호화 된 파일 시스템 (예 : 암호화 된 홈 폴더에 대한 심볼릭 링크)으로 인해 발생할 수도 있습니다 .

심볼릭 링크가 암호화 된 폴더를 가리키는 경우 apache 및 파일 / 폴더 권한이 올바르게 설정되어 있어도 apache 사용자 (예 : www-data)가 콘텐츠에 액세스 할 수 없습니다. www-data 사용자 의 액세스는 다음 호출로 테스트 할 수 있습니다.

sudo -u www-data ls -l /var/www/html/<your symlink>/

이에 대한 해결 방법 / 솔루션이 있습니다. 예를 들어 www-data 사용자를 비공개 그룹에 추가 (암호화 된 데이터를 웹 사용자에게 노출)하거나 암호화되지 않은 rsynced 폴더를 설정 (아마도 다소 안전함)합니다. 나는 나 자신을 위해 개발 중에 rsync 솔루션을 사용할 것입니다.

/ubuntu/633625/public-folder-in-an-encrypted-home-directory

내 목적을위한 편리한 도구는 lsyncd 입니다. 이를 통해 암호화 된 홈 폴더에서 직접 작업하고 Apache 웹 페이지에서 거의 즉시 변경 사항을 볼 수 있습니다. 동기화는 rsync를 호출하는 파일 시스템의 변경에 의해 트리거됩니다. 비교적 작은 웹 페이지와 스크립트 만 작업하고 있기 때문에 동기화가 매우 빠릅니다. 0 초 지연을 설정할 수 있지만 rsync가 시작되기 전에 1 초의 짧은 지연을 사용하기로 결정했습니다 .

lsyncd 설치 (Ubuntu에서) :

sudo apt-get install lsyncd

백그라운드 서비스 시작 :

lsyncd -delay 1 -rsync /home/<me>/<work folder>/ /var/www/html/<web folder>/

3
sudo -u www-data ...권한 문제가 있는지 확인하는 좋은 방법입니다! 사용자는 배포판에 따라 www-data, apache 또는 다른 것일 수 있습니다.
mkasberg

드디어! 나는 이미 나의 가장 기본적인 능력을 의심하고 있었다!
kalabalik 17.04.21

이것에 시간을 잃었고 결국 암호화되었습니다!
myol

15

새 서버에서 오랫동안 해결할 수 없었던 비슷한 문제가 발생했습니다. palacsint의 답변 외에도 물어볼 좋은 질문은 다음과 같습니다. Apache 2.4를 사용하고 있습니까? Apache 2.4에는 위의 구성을 사용했을 때 작동하지 않는 권한을 설정하는 다른 메커니즘 이 있으므로이 블로그 게시물에 설명 된 솔루션을 사용 했습니다 .

기본적으로 내가해야 할 일은 구성 파일을 다음과 같이 변환하는 것입니다.

Alias /demo /usr/demo/html

<Directory "/usr/demo/html">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    allow from all

</Directory>

에:

Alias /demo /usr/demo/html

<Directory "/usr/demo/html">
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

주문허용 라인이 승인 된 모두 필요 로 어떻게 대체되었는지 확인 합니다.


주문 / 허용 / 거부 명령은 대부분의 컴퓨터에서 계속 사용할 수 있습니다. 최신 버전에서는 access_compat모듈 에서 구현됩니다 . 해당 모듈이 활성화되면 첫 번째 부분이 예상대로 작동하지 않을 수 있습니다. 이것이 없으면 Apache2를 시작하려고하면 오류와 함께 실패합니다.
Alexis Wilke

어떤 구성? 는 /etc/httpd/conf/httpd.conf내 시스템에 존재하지 않는, 또한, 디렉토리는 /etc/httpd/존재하지 않습니다.
Aaron Franke 19

@AaronFranke 아파치가 설치되어 있습니까? 여기에있을 수 있습니다 : /etc/apache2/httpd.conf /etc/apache2/apache2.conf /etc/httpd/httpd.conf /etc/httpd/conf/httpd.conf
RightHandedMonkey

예, Apache가 설치되어 있고 Ubuntu에 있습니다. /etc/apache2/apache2.conf나를 위해 존재합니다.
Aaron Franke

7

이 질문과 관련하여 내 가상 호스트가 왜 403을 제공하는지 알아 냈습니다.

나는 운 없이이 질문과 다른 질문에 대한 모든 가능성을 테스트했습니다. 그것은 나를 거의 미치게 만듭니다.

심볼릭 링크를 통해 Capistrano 방식과 유사한 릴리스 배포로 서버를 설정하고 있으며 DocRoot 폴더 (현재 릴리스 폴더의 심볼릭 링크 임)에 액세스하려고 할 때 403을 제공했습니다.

내 가상 호스트는 :

DocumentRoot /var/www/site.com/html
<Directory /var/www/site.com/html>
        AllowOverride All
        Options +FollowSymLinks
        Require all granted
</Directory>

내 주요 httpd.conf 파일은 (기본 Apache 2.4 설치) :

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes -FollowSymLinks -Includes
(...)

기본 옵션 정의가 내 가상 호스트 파일보다 우선하는 것으로 나타났습니다 (저에게는 직관적이지 않음). 그래서 나는 그것을 다음과 같이 변경했습니다.

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes +FollowSymLinks -Includes
(...)

그리고 유레카! (MAIN httpd.conf 파일에서 FollowSymLinks 앞의 더하기 기호에 유의하십시오. 이것이 다른 잃어버린 영혼을 돕길 바랍니다.


Apache 2.4에서 솔루션은 구성을 무효화하고 단일 옵션 행에서 '+'와 '-'를 결합 할 수 없으므로 httpd가 시작되지 않습니다.
deesto

그래도 파일에서 DocumentRoot를 "이전"으로 선언했지만 자식 디렉터리 섹션을 재정의했습니다 (what?)
rogerdpack

2

내 상황에서 발견했듯이 심볼릭 링크가 실패 할 수있는 또 다른 방법이 있습니다. 서버로 SELinux 시스템이 있고 심볼릭 링크가 NFS 마운트 폴더를 가리키는 경우 (다른 파일 시스템에서 유사한 증상이 나타날 수 있음) httpd잘못된 컨텍스트가 표시되고 대상 폴더의 내용을 제공하지 않을 수 있습니다.

제 경우에는 SELinux 컨텍스트 /var/www/html(로 얻을 수 있음 ls -Z)는 unconfined_u:object_r:httpd_sys_content_t:s0. 의 심볼릭 링크 /var/www/html는 동일한 컨텍스트를 갖지만 NFS 마운트 폴더 인 대상의 컨텍스트는 system_u:object_r:nfs_t:s0.

해결책은 옵션 에 추가 fscontext=unconfined_u:object_r:httpd_sys_content_t:s0하는 것입니다 mount(예 :) # mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>. rootcontext관련 defcontext이 없으며 NFS에서 거부합니다. 나는 context스스로 시도하지 않았습니다 .


2

먼저 selinux를 비활성화 (vim / etc / selinux / config)

vim /etc/httpd/conf/httpd.conf 심볼릭 링크 및 디렉토리 인덱싱을 위해 다음 행을 편집하십시오.

documentroot /var/www/html
<directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride None
</directory>

.htaccess 파일이면 AllowOverride all


/etc/httpd/내 시스템에 폴더 가 없으면 어떻게합니까?
Aaron Franke 19


1

다른 답변에서 알 수 있듯이 권한을 변경하는 것 외에도 아파치를 다시 시작해야 적용됩니다.

sudo service apache2 restart

0

필요한 경우를 대비하여 또 다른 미묘한 함정 AllowOverride All:

어딘가 깊은 FS 트리에서, 오래된 .htaccess필요

    Options Indexes

대신에

    Options +Indexes

FollowSymLinks서버 구성에서 세트 를 무심코 비활성화하고 여기서 신비한 403을 발생시키는 데 걸린 전부였습니다 .


0

FollowSymLinks 옵션이 활성화 된 경우 :

$ rg "FollowSymLinks" /etc/httpd/
/etc/httpd/conf/httpd.conf
269:    Options Indexes FollowSymLinks

httpd가 사용하는 사용자가 실행할 수 있도록 symlink의 모든 디렉토리가 필요합니다.

따라서이 일반적인 사용 사례의 경우 :

cd /path/to/your/web
sudo ln -s $PWD /srv/http/

namei로 소유자 권한을 확인할 수 있습니다 .

$ namei -m /srv/http/web
f: /srv/http/web
 drwxr-xr-x /
 drwxr-xr-x srv
 drwxr-xr-x http
 lrwxrwxrwx web -> /path/to/your/web
   drwxr-xr-x /
   drwxr-xr-x path
   drwx------ to
   drwxr-xr-x your
   drwxr-xr-x web

내 경우 to디렉토리는 내 사용자에게만 실행 가능합니다.

다른 사람의 실행을 활성화하여 해결하십시오.

chmod o+x /path/to

실행 불가능한 디렉토리가 다를 수 있거나 경우에 따라 다른 그룹 대신 그룹에 영향을 미칠 수 있습니다.

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