/ 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-data및 root파일에 액세스 할 수 물론).
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.