CentOS 6의 "심볼릭 링크가 허용되지 않거나 링크 대상에 액세스 할 수 없음"/ Apache


30

개발 루트에 대한 문서 루트에 심볼릭 링크가있는 새로운 CentOS 6 설치가 있습니다.

[root@localhost html]# ls -l
total 4
-rwxrwxrwx. 1 root root  0 Sep 18 20:16 index.html
-rwxrwxrwx. 1 root root 17 Sep 18 20:16 index.php
lrwxrwxrwx. 1 root root 24 Sep 18 20:19 refresh-app -> /home/billy/refresh-app/

내 httpd.conf에는 다음이 있습니다.

<Directory "/">
    Options All
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>

심볼릭 링크의 대상에는 아파치가 원하는 것을 읽을 수있는 권한이 있습니다.

 [root@localhost billy]# ls -l
total 40 (Some entries were omitted because the list was too long
drwxr-xr-x. 7 billy billy 4096 Sep 18 20:03 refresh-app

또한 /etc/selinux/conf다음 을 변경하여 SELinux를 비활성화하려고 시도했습니다 .

SELINUX=disabled

그러나 내가 무엇을하든 누군가가 해당 링크로 이동하려고 http://localhost/refresh-app/하면 403 FORBIDDEN 오류 페이지가 표시되고 다음과 같이 작성됩니다 /var/log/httpd/error_log.

Symbolic link not allowed or link target not accessible

Apache가 symlink의 대상에 액세스 할 수없는 이유는 무엇입니까?


아파치는 어떤 사용자로 실행됩니까? 실제로 해당 자원을 해당 사용자로 읽을 수 있습니까?
draeath

또한 selinux를 허용 모드로 실행 한 다음 sealert를 사용하여 감사 로그를 구문 분석하는 것이 좋습니다. 이렇게하면 SELinux가이를 거부하는 이유 / 방법을 확인하고 종종 해결 방법을 얻을 수 있습니다.
draeath

@draeath : 나는 그것을 확인하는 방법을 모른다.
Billy ONeal

@draeath : 1. 이것은 프로덕션 박스가 아닙니다. SELinux가 꺼져 있는지 상관하지 않습니다. 2. 어쨌든, 나는 지금이 시점에서 문제를 해결하고 있습니다. 근본 원인을 알아 낸 후에는 아마도 복원 할 것입니다.
Billy ONeal

걱정하지 마세요. 이것은 일반적인 감독입니다. 처음으로 며칠 동안 멈추었습니다. serverfault.com/questions/313485/… :: 그 중 하나입니다. : D
whoami

답변:


44

문제를 찾았습니다. 아파치 내가 제공하고 있습니다뿐만 아니라 디렉토리에 액세스하려고, 알고 보니, /home/billy/refresh-app/하지만 또한, 즉 위의 모든 디렉토리 /home/billy/, /home/. (왜 하위 디렉토리에 액세스 권한을 부여하는 것이 해당 하위 디렉토리 위의 모든 권한을 부여 할 필요는 없습니다.)

.htaccess디렉토리 탐색 권한을 처리하는 방법에 대해 찾고 있거나 무언가 * nix가 이상하다고 생각합니다.


15
이상하지 않습니다. 그것이 작동하는 방식입니다. 액세스하려는 전체 경로에 + x가 있어야합니다.
bahamat

4
@bahamat : 그건 말이되지 않습니다. 왜 실행되지 않는 파일에 대해 실행 권한이 필요한 사람이 있습니까? (이것은 완전히 하나가 권리를 포기하지한다고 할인 /일반적으로 별도의 디렉토리 가로 옵션이 ACL이 시스템을 ... 거의 적). Unix가 설계되고 ACL 시스템의 광범위한 가용성 이후 30 년이 지난 후에 ACL이 표준이 될 것이라고 생각할 것입니다. : sigh :
Billy ONeal

11
디렉토리에서 + x를 의미한다고 생각합니다. 사용자로 전환하고 + x가없는 디렉토리로 cd-ing하십시오. 메모리에서 + X에 액세스 할 수 있지만 + r은 목록 파일에 당신을 허용하고 +하면서 말했다 디렉토리에 변경 파일을 수행 할 수 있습니다 승 디렉토리를 볼 수 없습니다

1
@BillyONeal : "전체 경로"라는 문구는 디렉토리를 의미합니다.
bahamat

5
이것은 유닉스에서 올바른 동작입니다. 하위 디렉토리로 변경하려는 상위 디렉토리에서 실행 권한 (g 또는 o의 경우 + x)이 필요합니다.
slm

11

우분투 10에서 작동했지만 다음 우분투 14 (Apache 2.4)에서 작동하지 않는 다음과 같은 구성이있는 비슷한 문제가있었습니다.

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +FollowSymLinks
</Directory>

웹 서버 사용자가 symlink에 직접 액세스 할 수 없었음에도 불구하고이를 전환하면 문제가 해결되었습니다.

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>

내가 그저 -SymLinksIfOwnerMatch설정을 말할 수 있고 Apache 2.4의 변경과 관련이 있지만 정확한 원인을 조사하지는 않았습니다.

또한 openbase_dirPHP의 제한 사항 이 될 수 있다고 생각 했지만 그렇지 않았습니다.


6

암호화 된 폴더에 연결하는 경우에도이 오류가 발생할 수 있습니다.


4

"FollowSymLinks"가 httpd.conf에 필요한 옵션으로 나타납니다. 여기에 자세히 설명되어 있습니다 . htdocs에서도 규칙이 필요할 것 같지만 필요한 옵션입니다.


3
Options All- FollowSymLinks가 이미 지정되어 있음을 참조하십시오 .
Billy ONeal

2

selinux의 적용 여부를 확인할 수도 있습니다. RedHat / Fedora에서 다음을 실행하십시오.

getenforce

응답이 '강제'인 경우 다음을 수행 할 수 있습니다.

setenforce 0

브라우저에서 URL을 다시 시도하십시오.

selinux를 비활성화하는 것이이 문제를 해결하는 가장 좋은 방법이라고 말하지는 않지만 원인을 식별하는 데 도움이 될 수 있습니다.


이것은 sym 링크 문제를 해결했지만 부정적인 영향이 있습니까?
digz6666

2
Options +FollowSymLinks

이것을 사용하여 .htaccess 파일을 만들면 트릭이 발생합니다 (symlink 앞에 dir에 넣으십시오).


제 경우에는 /var/www다른 중간 심볼릭 링크에 심볼릭 링크를 만들고있었습니다 . 심볼릭 링크를 사용해야하는 경우 대상 링크를 직접 심볼릭 링크로 만드십시오.
Sridhar Sarnobat

0

모든 권한을 허용하고 followsymlink를 허용 한 후에 내 문제를 해결하는 것은 "FollowSymLinks의 경우에는 반드시 .conf 파일 내에있을 때 반드시 디렉토리 구조 안에 있어야합니다. Apache 현재 매뉴얼에서

FollowSymLinks 및 SymLinksIfOwnerMatch 옵션은 섹션 또는 .htaccess 파일에서만 작동합니다.

여기에서 대답


0

내 솔루션은 이름이 지정된 모든 리포지토리에 대한 공유 폴더를 만드는 것입니다. /home/repo 입니다.

그리고 내 자신의 집에서 심볼릭 링크와 같은 : ln -s /home/repo ~/Code 그래서 ~/Code/www.xxxx.com/public 포인트 /home/repo/www.xxxx.com/public

또한 아파치 웹 루트 /var/www/html 포인트에 대한 링크 는 /home/repo/www.xxxx.com/public

여기에서 찾았습니다 : https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide

일부 symlink + user 그룹 곡예를 사용하면 여러 사용자 / 버전을 배포 할 수 있습니다.


0

라인 @Billey ONeil @Flion I couldnt는 대답 (낮은 담당자 수)
여기에 내가해야 할 일을했을했다 :
( 참고 : 별칭 LL = 'LS $ LS_OPTIONS -lh')

root@Bellach:/var/www/html# ll lego
lrwxrwxrwx 1 root root 43 Sep 10 21:21 lego -> /home/DATA/Documents/Chris/Synced/web/lego/

이제 소스 링크의 모든 디렉토리를보십시오

root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/web/
drwxr-xr-x 9 chris chris 4.0K Sep 12  2017 /home/DATA/Documents/Chris/Synced/web/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/
drwxr-xr-x 20 chris chris 4.0K Mar 27 18:52 /home/DATA/Documents/Chris/Synced/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/
drwxr-xr-x 36 chris chris 4.0K Jun 17 23:31 /home/DATA/Documents/Chris/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/
drwxr-xr-x 21 chris chris 4.0K Aug  7 18:22 /home/DATA/Documents/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-- 10 root users 4.0K Sep 10 11:17 /home/DATA/
root@Bellach:/var/www/html# ll -d /home/
drwxr-xr-x 5 root root 4.0K Sep 10 10:37 /home/

/ home / DATA 디렉토리는 범인입니다.
이 문제를 해결하십시오.

root@Bellach:/var/www/html# chmod +x /home/DATA/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-x 10 root users 4.0K Sep 10 11:17 /home/DATA/

수정은 즉시-아파치를 다시 시작할 필요가 없습니다.


-1

SELinux 설정을 조정할 수도 있고 setenforce가 경로에 없을 수도 있습니다. 따라서 이것을 시도하십시오 :

sudo /usr/sbin/setenforce 0

재부팅 사이에도 지속되도록

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