/ var / www / html 및 웹 사이트 문서 루트에 대한 내 홈 디렉토리의 권한 문제


34

폴더에 777 권한을 부여 하려고 하지/var/www/html 않지만 파일을 편집하지 않고 파일을 편집하려고합니다 sudo. 그래서 나는 내 홈 디렉토리에 폴더의 심볼릭 링크를 만듭니다 /var/www/html. 을 사용하여 생성 sudo ln -sT /home/andre/www/moodle/ moodle했으며 ls -la출력은 다음과 같습니다.

andre@andre-270E5G:/var/www/html$ ls -la
total 8
drwxr-xr-x 2 root root 4096 Mai  4 10:20 .
drwxr-xr-x 4 root root 4096 Abr 29 14:29 ..
lrwxrwxrwx 1 root root   23 Mai  4 10:20 moodle -> /home/andre/www/moodle/

따라서 내 무들 폴더는 모든 사람에 대한 읽기, 쓰기 및 실행 권한을 가지고 있으며 이것이 내가 원하는 것이 아닙니다. 명령 sudo chmod -R 775 moodle/을 변경하려고 시도했지만 모든 사람에게 읽기, 쓰기 및 실행 권한이 유지되었습니다. 에서 moodle 폴더로 동일하게 시도했지만 동일 /home/andre/www/moodle하게 유지되었습니다. ls -lain 의 출력 /home/andre/www/은 다음과 같습니다.

andre@andre-270E5G:~/www$ ls -la
total 28
drwxrwxr-x  3 andre andre  4096 Mai  4 10:02 .
drwx------ 49 andre andre 20480 Mai  4 10:01 ..
drwxrwxr-x 41 andre andre  4096 Mai  4 10:02 moodle

폴더 그래서 moodle에서하는 것은 /home/andre/www/내가 원하는 권한을가집니다.

추가 문제로 액세스 localhost/moodle하면 403 Forbidden 오류가 발생합니다.

내가 여기서 뭘 잘못하고 있니?

답변:


62

홈 디렉토리 내에서 웹 사이트를 실행할 필요는 없습니다 . 이제까지. 그렇지 않으면 웹 서버가/home/디렉토리 구조를 볼수 있도록 통과하는 기능을 제공해야하지만/home/$USER/다른 하위 폴더뿐만 아니라 (사용자 디렉토리에 무엇이 있는지 볼 수있는 사용자의 홈 디렉토리) 거기에. 잘못 구성되거나 잘못 구성되거나 패치되지 않은 웹 서버는 이러한 방식으로 막대한 데이터 유출 또는 자격 증명 손실을 유발하여 개인 정보 및 로그인이 다른 상황에 노출 될 수 있습니다. 사용중인 symlink 접근 방식은 Apache에게 읽기 권한을 부여하려는 것과 같은 이유로 도움이되지 않습니다./home/andre/www/moodle-웹 서버는 홈 디렉토리를 탐색하여 심볼릭 링크가 /var/www/html가리키는 위치에 도달 해야 보안 위험이 여전히 있습니다.

먼저을 사용하십시오 sudo cp -r /home/andre/www/moodle/ /var/www/html/. 파일을에 복사하여 /var/www/html자신의 홈 디렉토리에서 멀리 보관합니다. 그런 다음 사용자와 웹 서버가 해당 디렉토리의 모든 항목에 액세스하고 모든 파일과 디렉토리에 대한 전체 읽기 / 쓰기 권한을 부여 할 수 있도록 권한을 다시 실행합니다. 그런 다음 /var/www/html사이트를 벗어나 면됩니다.

데이터를 /var/www/html다음으로 다시 복사 한 후 4 단계로 진행됩니다 .

  1. Apache가 폴더와 파일에 액세스 할 수 있도록하여 403 오류없이 사이트를 제공 할 수 있습니다.
  2. 사용자에게 파일과 폴더를 '소유자'로 지정하고 모든 파일과 폴더를 읽고 쓸 수있을뿐만 아니라 디렉토리를 탐색 할 수 있습니다.
  3. (선택적이지만 권장 됨) 전체 디렉토리 구조에서 여기에서 작성된 파일 또는 폴더가 그룹이로 설정되도록 설정하십시오 www-data.
  4. (선택 사항) 최종 보안 정리. 권한을 설정하여 귀하와 웹 서버가 사이트 데이터를 볼 수 있지만 다른 사용자는 사이트의 파일 또는 디렉토리 구조에 액세스 할 수 없습니다.

(1) Apache가 폴더 및 파일에 액세스 할 수 있도록 허용하십시오.

sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +

이렇게하면 '그룹' www-data이 폴더와 파일에 대해 반복적으로 설정 됩니다. 그러면 웹 서버는 사이트 문서 루트 디렉토리 구조에 대한 액세스 권한을 재귀하고 액세스 할 수 있습니다 ( +x디렉토리 전용). 그런 다음 웹 서버가 모든 파일에 대한 읽기 권한을 갖도록하여 사이트 데이터를 수신 할 수 있습니다.

이 파일로 웹 서버 쓰기 권한을 부여해야 할 경우도있을 수 있습니다, 또는 디렉토리에 - 이것은 수행하여 달성 할 수있는 sudo chmod g+w /var/www/html/PATH곳 ( PATH당신이 적용하는 데 필요한 디렉토리 구조에서 파일 또는 폴더의 경로입니다 웹 서버에 대한 쓰기 권한).

주의 사항 : 사이트 구성에 대한 '보안'정보 (예 : 데이터베이스 액세스 신임 정보 등)가 노출 될 수있는 경우가 많으며 다음과 같은 개별 파일 또는 디렉토리에서 해당 데이터에 대한 '기타'액세스 권한을 제거해야합니다. 다음 sudo chmod o-rwx /var/www/html/FILEPATH(대체 FILEPATH받는 상대적인 경로와 /var/www/html파일의 폴더).

또한 '새 파일'에 403 문제가 발생하면 웹 서버에 올바른 권한을 부여하여 작성 및 복사 된 파일 및 폴더에 계속 액세스 할 수 있도록하기 위해이 명령을 나중에 다시 실행해야 할 수도 있습니다. www-data그룹이 올바르게 설정 되지 않았습니다 .


(2) 소유자에게 폴더와 파일에 대한 읽기 / 쓰기 권한을 부여하고 폴더 액세스가 디렉토리 구조를 통과하도록 허용하십시오.

sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +

대체 USER자신의 이름으로 첫 번째 명령에!

우리는 여기서 3 가지를합니다. 먼저, 사용자를의 모든 파일 및 디렉토리의 "소유자"로 설정했습니다 /var/www/html. 다음으로 폴더에 대한 읽기 및 쓰기 권한을 설정하고 폴더에 액세스하여 폴더에 액세스 할 수 있도록 허용합니다 ( +x디렉토리 항목의 항목). 그런 다음 모든 파일이 방금 설정 한 소유자에 대한 읽기 / 쓰기 권한을 갖도록 설정했습니다.


(3) (선택 사항) 이 파일 이후의 모든 새 파일 www-data은 'access'사용자로 작성해야 합니다.

sudo find /var/www/html -type d -exec chmod g+s {} +

디렉토리의 그룹에 "set gid"비트를 설정합니다. 이 디렉토리 안에 생성 된 파일과 폴더는 항상 www-data그룹으로서 웹 서버 액세스를 허용합니다.


(4) (선택 사항) 다른 사용자가 데이터를 볼 수 없도록하려면 최종 보안 정리

디렉토리와 파일을 보려면 사용자가 필요합니다. 그렇게하려면 웹 서버가 필요합니다. 다른 시스템 사용자 (루트 제외)가 데이터를 보지 못하게 할 수 있습니다. 따라서 액세스 권한을 부여하지 말고 사용자와 웹 서버 만 데이터를 볼 수 있도록하십시오.

sudo chmod -R o-rwx /var/www/html/

참고 : 나중에 다시 실행하거나 '기타'권한 범주의 권한을 편집 할 필요가 없습니다. '다른'사용자가 접근 할 수없는 경우 /var/www/html/( 파일 구조 및 디렉토리 구조를 순회 하는 데 필요한 +x비트 /var/www/html가 없거나 +r파일 목록을 읽을 비트가없는 경우) 다른 사용자가 해당 디렉토리 아래에있는 항목에 대한 권한 또는 그룹은 실제로 너무 중요하지 않을 것입니다.


이것에 대해 약간 덜 침습적 인 해결책이 있지만 모든 새 파일에서 작동한다고 보장하지는 않으며 파일 액세스 제어 목록을 포함하는 모든 파일 시스템 에서 작동하지 않을 수도 있습니다. 이렇게하면 파일 소유권을 가지게 www-data되지만 파일을 개인적으로 소유하지 않아도 모든 의도와 목적에 대해 효과적인 소유자 권한을 부여 할 수 있습니다.

이 솔루션은 조금 덜 침습적이며, 디렉토리 및 모든 파일을 소유 www-data:www-data하거나 root:www-data액세스 할 수 있습니다. 그것은 사용하는 액세스 제어 목록 개별 그룹을 설정하지 않고 여러 사용자가 권한을 가지고 있습니다. 또한 사용자 root또는 www-data시스템 사용자가 파일을 소유 할 수 있지만 사례별로 추가 권한을 추가하고 특정 사용자에 대한 권한을 미세 조정하여 내용을 읽을 수는 있지만 편집 할 수는 없습니다.

우리가 여전히 작업하고 /var/www/html/있고 우리 이외의 사용자와 시스템 (및 루트) 이외의 사용자를 스누핑하여 데이터를 보지 않으려면 다음 작업을 수행해야합니다.

  1. 웹 서버 시스템 사용자에게 소유권을 다시 부여하십시오 www-data.
sudo chown -R www-data : www-data / var / www / html
  1. 재귀 적으로 다른 사용자에게 제공하지 (제외하는 동안, 파일에 읽기 / 쓰기 제공 www-dataroot파일에 액세스 할 수 물론).
sudo 찾기 / var / www / html -type f -exec setfacl -mu : YOURUSERNAME : rw -m 기타 :: --- {} \;
  1. 재귀 적으로 디렉토리에 대한 읽기 / 쓰기 / 트래버스를 제공하고 다른 사용자의 폴더에 대한 액세스 권한을 제거하고 ( www-data및 제외 root)이를 디렉토리의 새 파일에 대한 '기본'ACL로 설정하십시오.
sudo 찾기 / var / www / html -type d -exec setfacl -d -mu : YOURUSERNAME : rwx -mo :: --- {} \;
  1. 또한 setgid모든 디렉토리에 대한 비트 를 설정해야 파일을 작성할 경우 웹 서버가 www-data그룹 권한 을 통해 여전히 액세스 할 수 있습니다 .
sudo find / var / www / html -type d -exec chmod g + x {} \;

그리고 지금 당신은 모든 디렉토리에 액세스 할 수있어, 그리고 당신은 멀리 접근을에서하지 않았다 www-data가 필요로 웹 서버는 여전히 사방에 파일을 만들 수있는 도움 (예 : PHP 기반의 프론트 엔드가 자신의 캐시 디렉토리를 갖는 등 올바른 작동을 위해 작성하고 기록해야합니다).

유일한주의 사항 : 수동으로 새 파일을 생성하는 경우 웹 서버에 소유권을 부여하기 위해 파일을 chown해야합니다. 이는 간단 sudo chown www-data:www-data filename하며 액세스 제어 목록을 통해 파일에 대한 효과적인 소유자 권한을 보유 할 수 있습니다.

주어진 파일의 소유자를 변경하지 않고 일부 유형의 비표준 액세스에 대해 sysadmin 으로이 작업을 수행 해야하는 경우가 여러 가지 있습니다. 모든 파일 시스템 파일 액세스 목록을 지원하는 것은 아니기 때문에 작동하지만 문제가 있습니다.


2
@ AndréCarvalho +x는 파일에 실행 권한을 부여 할 것이며, PHP 명령 줄을 통해 또는 서버 자체에서 실행 파일로 PHP 파일을 실행하는 것을 원하지 않습니다. 웹 서버의 PHP 파서에 의해 처리되기를 바랍니다. +xPHP 파서가 읽고 처리하기 위해 PHP 파일이 필요하지 않습니다 ). 디렉토리 +x는 디렉토리를 통한 순회를 허용하기 위해 필요합니다 . 즉, 디렉토리가 +x루트 가 아니고 디렉토리가 아닌 경우 디렉토리에 액세스 할 수 없습니다. 이는 Apache에서 심볼릭 링크 및 홈을 사용하지 않는 문제입니다. 예배 규칙서.
토마스 워드

1
@ AndréCarvalho www-data는 시스템 그룹입니다. 표준 사용자를위한 그룹이 아닙니다.
Thomas Ward

1
@JunaidQadirShekhanzai 사람들의 설정이 필요한 환경 및 기타 여러 요인과 크게 다르므로 제공 할 수 없습니다. 선택적 구성 요소 가있는 경우 이러한 '쉘 파일'을 생성 할 수 없습니다 . 내가 할 수 시도 하고이 작업을 수행 할 수있는 파이썬 스크립트를 만들지 만, 우리는 여전히 시스템 제한, 옵션 작업, 다양한 경로 등 같은 것들로 실행
토마스 구

1
@ T.Todua 그것은 내가 말한 것이 아닙니다. 나는 말했다 당신이 밖으로 사이트 실행해서는 안됩니다 : (내에서 읽기) 당신의 "홈"디렉토리 입니다, 당신은 아무것도 실행하지 않아야 - /home/USER/...웹 서버에. 내가 사용하는 단어의 의미를 잘못 이해하고 오해했습니다. /var/www/*전용 폴더 / 공간이기 때문에 웹 사이트를 운영하기에 비교적 '안전한'장소입니다. 그러나 /var/www/html설치시 웹 서버가 작성하기 때문에 안전하지 않으며 중요한 데이터가 /var/www/SUBDIRECTORY중복 될 수 있습니다 (따라서 개별 사이트 하위 디렉토리와 함께 사용)
Thomas Ward

1
명확성을 위해 문구를 조정했습니다.
토마스 워드

2

권한 문제를 해결하기 위해 심볼릭 링크를 사용한다는 아이디어는 잘못되어 작동하지 않습니다. 심볼릭 링크 자체에 대해 표시되는 권한은 대부분 관련이 없으며 "실제"디렉토리의 권한을 우회하는 데 사용할 수 없습니다. 에서 심볼릭 링크를 생성 /var/www/html/moodle하기 /home/andre/www/moodle/위한 권한을 우회하지 않습니다 /home/andre/www/moodle/. 작업을 수행하려는 사람 /var/www/html/moodle은에 필요한 권한이있는 경우에만 할 수 있습니다 /home/andre/www/moodle/.

귀하의 실행 sudo chmod -R 775 moodle/실제로는 효과가 있지만, 다르게 당신이 심볼릭 링크의 권한을 변경하지 않은 무슨 생각에서,하지만 심볼릭 링크의 대상 /home/andre/www/moodle/.

웹 서버에서 발생하는 403 오류는 웹 서버에 필요한 입력 권한이 없기 때문일 수 있습니다 /home/andre. 이것은 "추가 문제"가 아니라 동일한 권한 문제로 인한 것입니다.

따라서 심볼릭 링크를 사용하는 대신 파일과 웹 서버를 편집하여 파일에 액세스하거나 응용 프로그램에 따라 파일을 편집 할 수있는 권한을 찾아야합니다. 이러한 권한이 정확히 무엇인지는 정확한 사용 사례 (응용 프로그램 및 서버 구성)에 따라 다릅니다.

일반적으로 파일을 소유하고 rw 권한을 가지며 웹 서버가 그룹 권한을 통해 파일에 대한 읽기 권한 만 가지며 다른 모든 사용자는 액세스 권한이없는 것이 좋습니다.

권한 예제 (정보 누락으로 인해 유스 케이스에서 작동하지 않을 수 있음) :

andre@fermat:/var/www/html$ ls -al moodle/
total 0
drwxr-x--- 2 andre www-data 60 mai  4 16:20 .
drwxr-xr-x 3 root  root     80 mai  4 16:20 ..
-rw-r----- 1 andre www-data  0 mai  4 16:20 index.html

디렉토리에 소유자가 디렉토리를 입력하고 컨텐츠를 수정할 수있는 충분한 액세스 권한이 있음을 알 www-data수 있습니다 ( 그룹의 웹 서버 가 들어가서 읽을 수 있음). 파일 자체는 사용자 (소유자)가 읽고 쓸 수 있으며 웹 서버 (그룹의 www-data) 에서 읽을 수 있습니다. 다른 모든 사용자는 액세스 할 수 없습니다.

다시 한 번 이것을 예로 들어 봅시다. 웹 서버의 정확한 사용자 / 그룹은 구성에 따라 다릅니다. 응용 프로그램 (무들)에 다른 권한이 필요할 수 있으므로 해당 설명서를 참조해야합니다.


동의하지만 권한을 올바르게 설정하는 방법을 모르면 다른 문제도 발생할 수 있습니다.
토마스 워드

@ThomasW .: 권한을 올바르게 설정하는 방법에 대한 질문은 웹 서버 구성, 원하는 파일 편집 방법 및 응용 프로그램의 요구와 같은 필요한 정보를 포함하여 새로운 질문이어야합니다.
mastov

또는 정답으로 작성되었습니다-지금하고 있습니다. 웹 사이트에 대해 / home / USER /에서 아무것도 실행하지 않아야합니다. 웹 서버가 올바르게 패치되거나 구성되지 않은 경우 다른 많은 '사용자'데이터에 액세스 할 수 있습니다.
토마스 워드

@ 마스 토프 당신은 당신의 설명과 함께 많은 질문을 해결합니다.
André Carvalho

2

Thomas Ward의 훌륭한 답변 https://askubuntu.com/a/767534/717860

8 개의 명령 대신 3 개의 명령으로 모든 권장 단계를 수행 할 수 있습니다.

3 가지 명령 :

sudo chown -R ubuntu:www-data /var/www
sudo find /var/www -type d -exec chmod 2750 {} \+
sudo find /var/www -type f -exec chmod 640 {} \+

다음 8 개의 명령과 동일한 작업을 수행하십시오.

sudo chgrp -R www-data /var/www
sudo find /var/www -type d -exec chmod g+rx {} +
sudo find /var/www -type f -exec chmod g+r {} +
sudo chown -R ubuntu /var/www/
sudo find /var/www -type d -exec chmod u+rwx {} +
sudo find /var/www -type f -exec chmod u+rw {} +
sudo find /var/www -type d -exec chmod g+s {} +
sudo chmod -R o-rwx /var/www/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.