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

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>

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



답변

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

운영:

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


답변

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>/


답변

새 서버에서 오랫동안 해결할 수 없었던 비슷한 문제가 발생했습니다. 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>

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


답변

이 질문과 관련하여 내 가상 호스트가 왜 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 앞의 더하기 기호에 유의하십시오. 이것이 다른 잃어버린 영혼을 돕길 바랍니다.


답변

내 상황에서 발견했듯이 심볼릭 링크가 실패 할 수있는 또 다른 방법이 있습니다. 서버로 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스스로 시도하지 않았습니다 .


답변

먼저 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


답변

14.04로 업그레이드 한 후 문제가있는 사람을 위해
/ubuntu/452042/why-is-my-apache-not-working-after-upgrading-to-ubuntu-14-04
업그레이드 전에 루트가 변경됨 = / 업그레이드 후 var / www = / var / www / html