Debian, Apache, 403 금지된 오류 및 암호화된 드라이브

Debian, Apache, 403 금지된 오류 및 암호화된 드라이브

내 로컬 Debian에 Apache를 설정했습니다.제시설치했지만 VirtualHost를 작동시킬 수 없습니다. 액세스가 http://localhost제대로 작동하고 표시됩니다.효과가있다!페이지.

그러나 액세스하려고 하면 http://test403 Forbidden 오류가 표시됩니다.

이 서버에 / 액세스할 수 있는 권한이 없습니다.


내 구성은 매우 일반적으로 보입니다.

<VirtualHost *:80>

  DocumentRoot "/home/johndoe/web/test"

  ServerName test

  <Directory "/home/johndoe/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

</VirtualHost>

답변1

머리말:

이런 일이 발생하는 데에는 여러 가지 이유가 있으며 이 질문은 Stack Exchange에서 여러 번 요청되었습니다. 그러나 제가 아는 한 답변 중 어느 것도 (직접적으로) 이 질문을 다루거나 부정확하거나 오래된 정보를 기반으로 한 것이 아닙니다.

이러한 (올바르게 허용된) 답변 중 다수는 DocumentRoot구성된 디렉토리와 포함된 파일 및 디렉토리의 권한 또는 소유권을 www-data.

그러나 최신 Debian 또는 Ubuntu의 로컬 설치(예: 기본 웹 개발 목적)에 대해 이야기할 때 이는 더 이상 필요하지 않을 수 있습니다.


로그를 살펴보겠습니다!

오류 페이지 자체에는 매우 일반적인 메시지만 포함되어 있으므로 자세한 내용은 오류 로그를 확인해야 합니다.

sudo tail -f /var/log/apache2/error.log 

tail명령은 파일의 마지막 10줄을 출력하며, 이 -f옵션을 사용하면 로그가 커짐에 따라 출력이 업데이트됩니다.


로그는 우리에게 무엇을 말해주는가?

client denied by server configuration: /home/johndoe/web/test

이것은 쉽습니다. 설명대로Apache: 서버 구성에 의해 클라이언트가 거부되었습니다.Require all granted설정으로 구성을 업데이트 하면 됩니다 . 그러면 다음과 같습니다.

<VirtualHost *:80>

  DocumentRoot "/home/johndoe/web/test"

  ServerName test

  <Directory "/home/johndoe/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>

</VirtualHost>

다음 명령을 사용하여 Apache를 다시 시작하는 것을 잊지 마십시오.

sudo service apache2 restart

오류가 지속됩니다...

그러나 로그 메시지가 변경되었습니다.

Symbolic link not allowed or link target not accessible: /home/johndoe/web/test

이 질문은 여러 가지 원인이 있을 수 있으므로 약간 복잡합니다. 실제 원인을 찾으려면 심볼릭 링크가 포함된 대상을 사용하지 않고 대신 대상을 직접 가리키도록 구성을 업데이트하는 것이 좋습니다. 이는 /home/johndoe/web기호 링크이므로 /media/johndoe/crypt1/web이제 구성은 다음과 같습니다.

<VirtualHost *:80>

  DocumentRoot "/media/johndoe/crypt1/web/test"

  ServerName test

  <Directory "/media/johndoe/crypt1/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>

</VirtualHost>

고정되어 있나요?

로그 메시지가 더 설명적인 메시지로 변경되었을 수 있습니다. 내 경우에는 다음과 같이 표시됩니다.

access to / denied (filesystem path '/media/johndoe/crypt1') because search permissions are missing on a component of the path

여기에 다른 메시지가 표시되고 이미 작동하는 솔루션이 있는 경우 여기에 의견을 남기고 적절한 토론에 링크하여 다른 사람들도 올바른 정보를 찾을 수 있도록 하면 좋을 것입니다.


지금?

메시지에서 알 수 있듯이 경로의 하나 이상의 구성 요소를 통과할 수 없기 때문에 Apache는 경로에 완전히 액세스할 수 없습니다. 어떤 구성 요소가 문제를 일으킬 수 있는지 확인하려면 다음을 수행할 수 있습니다.

namei -m /media/johndoe/crypt1/web/test/

namei명령은 경로 구성 요소를 분리 및 인쇄하고 -m옵션을 사용하여 명령과 같은 스타일로 각 구성 요소의 모드 비트를 표시합니다 ls -l.

나에게 출력은 다음과 같습니다.

f: /media/johndoe/crypt1/web/test/
 drwxr-xr-x /
 drwxr-xr-x media
 drwxr-x--- johndoe
 drwxr-xr-x crypt1
 drwxr-xr-x web
 drwxr-xr-x test

johndoe디렉토리가 여기서 문제를 일으키는 것 같습니다 . 따라서 권한을 수정하기 전에 chmod좀 더 자세히 살펴보겠습니다.

ls -ld /media/johndoe/

ls옵션이 포함된 명령은 -d목록 형식으로 디렉토리 정보(내용이 아닌)를 인쇄 합니다 -l.

나에게는 다음과 같습니다.

drwxr-x---+ 3 root root 4096 May 28 00:00 /media/johndoe/

보시 +다시피 추가 표시가 있습니다.액세스 제어 목록참가하다.

내가 아무 것도 설정하지 않았는지 확인하면서 마침내 올바른 방향을 가리켰습니다.전방십자인대나 혼자서. 게다가 미디어 마운트 지점도 직접 설정하지 않았기 때문에;저는 Nautilus를 사용하여 드라이브를 암호화하고 마운트합니다.


이렇게 하면 트릭을 수행할 수 있습니다.

따라서 이제 Nautilus가 마운트 지점을 엉망으로 만드는 대신 수동으로 마운트합니다.

1) 이미 마운트되어 있는 경우 제거합니다.

sudo umount /media/johndoe/crypt1

2) 바로 아래에 마운트 지점을 만듭니다 /media.

sudo mkdir /media/crypt1

3) 장치 매핑을 찾아 UUID를 찾습니다.

ls -l /dev/mapper/

4) 다음에 따라 장치를 설치하십시오.

sudo mount /dev/mapper/luks-<UUID> /media/crypt1

5) 이에 따라 Apache 구성 및/또는 기호 링크를 업데이트합니다. 예를 들면 다음과 같습니다.

ln -s /media/crypt1/web/ ~/web

노트:

부팅할 때마다 드라이브를 암호화하고 마운트해야 한다는 점을 기억하세요. Stack Exchange에는 많은 정보가 있지만 다음을 추천할 수 있습니다.

명령줄에서 암호화된 볼륨 탑재

시작 시 LUKS 파티션 마운트

관련 정보