나는 노력하고있다~ 아니다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/
따라서 내 moodle
폴더에는 모든 사람에 대한 읽기, 쓰기 및 실행 권한이 있는데 이는 내가 원하는 것이 아닙니다. 나는 다음 명령을 사용했습니다.
sudo chmod -R 775 moodle/
이를 변경하려고 시도했지만 모두에 대한 읽기, 쓰기 및 실행 권한이 그대로 유지되었습니다. moodle
의 폴더 에도 동일하게 시도했지만 /home/andre/www/moodle
동일하게 유지되었습니다. ls -la
in 의 출력은 /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 오류가 발생합니다.
내가 여기서 뭘 잘못하고 있는 걸까?
답변1
홈 디렉토리 내에서 웹사이트를 실행할 필요가 없습니다.. 항상. 그렇지 않으면 웹 서버에 /home/
디렉터리 구조를 확인하는 기능뿐만 아니라 /home/$USER/
(사용자 디렉터리에 다른 내용이 있는지 확인할 수 있는 사용자의 홈 디렉터리) 및 기타 하위 폴더도 탐색할 수 있는 기능을 제공해야 합니다. 거기에. 잘못 구성되었거나 잘못 구성되었거나 패치가 적용되지 않은 웹 서버는 이러한 방식으로 막대한 데이터 유출을 일으키거나 자격 증명의 손실을 초래하여 개인 데이터 및 로그인을 위험에 빠뜨릴 수 있습니다. 사용 중인 심볼릭 링크 접근 방식은 Apache에 읽기 권한을 부여하려는 것과 같은 이유로 도움이 되지 않습니다 . 웹 서버는 심볼릭 링크가 가리키는 /home/andre/www/moodle
위치에 도달하기 위해 홈 디렉터리를 탐색할 수 있어야 합니다. /var/www/html
보안 위험을 초래합니다.
먼저 sudo cp -r /home/andre/www/moodle/ /var/www/html/
. 이렇게 하면 파일이 에 복사되고 /var/www/html
해당 파일이 자신의 홈 디렉터리에서 멀리 떨어진 곳에 보관됩니다. 그런 다음 귀하와 웹 서버가 해당 디렉터리의 모든 항목에 액세스할 수 있도록 권한을 다시 실행하고 사용자에게 모든 파일과 디렉터리에 대한 완전한 읽기/쓰기 권한을 부여합니다. 그러면 /var/www/html
사이트를 위해 운동만 하면 됩니다 .
이는 데이터를 다음 위치에 다시 복사한 후 4단계로 이루어집니다 /var/www/html
.
- Apache에 폴더와 파일에 대한 액세스 권한을 부여하면 403 오류 없이 사이트를 제공할 수 있습니다.
- 사용자에게 파일과 폴더에 대한 '소유자'를 부여하고, 모든 파일과 폴더에 대한 읽기/쓰기 권한과 디렉터리를 탐색할 수 있는 권한을 스스로 부여하세요.
- (선택사항이지만 권장됨)여기에서 생성된 모든 파일이나 폴더의 디렉토리 구조 전체에 대해 그룹이 로 설정되도록 설정합니다
www-data
. - (선택 과목)귀하와 웹 서버가 사이트 데이터를 볼 수 있지만 다른 사용자는 사이트의 파일이나 디렉터리 구조에 액세스할 수 없도록 권한을 설정하는 최종 보안 정리입니다.
(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
첫 번째 명령을 자신의 사용자 이름으로 바꾸세요 !
우리는 여기서 세 가지 일을 합니다. 먼저, 귀하의 사용자를 /var/www/html
. 다음으로 폴더에 대한 읽기 및 쓰기 권한을 설정하고 폴더에 액세스하여 해당 폴더( +x
디렉토리 항목의 항목) 에 들어갈 수 있도록 허용합니다 . 그런 다음 방금 설정한 소유자에 대한 읽기/쓰기 권한을 갖도록 모든 파일을 설정합니다.
(삼)(선택 과목)www-data
이 이후의 모든 새 파일이 '액세스' 사용자로 생성되었는지 확인하세요 .
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/
우리와 시스템(물론 루트) 이외의 사용자가 데이터를 보기를 스누핑하는 것을 원하지 않는다고 가정하면 다음 작업을 수행해야 합니다.
- 웹 서버 시스템 사용자에게 소유권을 다시 부여하십시오
www-data
.
sudo chown -R www-data:www-data /var/www/html
- 파일에 대한 읽기/쓰기를 반복적으로 제공하는 동시에 다른 사용자(물론 제외)에게 파일에 대한 액세스 권한을 부여
www-data
하지root
않습니다.
sudo find /var/www/html -type f -exec setfacl -mu:YOURUSERNAME:rw -m other::--- {} \;
- 디렉터리에 대해 반복적으로 읽기/쓰기/트래버스 권한을 부여하고, 다른 사용자의 폴더에 대한 액세스 권한을 제거하고(
www-data
및 제외root
) 이를 디렉터리의 새 파일에 대한 '기본' ACL로 설정합니다.
sudo find /var/www/html -type d -exec setfacl -d -mu:YOURUSERNAME:rwx -mo::--- {} \;
setgid
또한 파일을 생성하는 경우 웹 서버가www-data
그룹 권한을 통해 해당 파일에 계속 액세스할 수 있도록 모든 디렉터리에 대한 비트를 설정해야 합니다 .
sudo find /var/www/html -type d -exec chmod g+s {} \;
이제 모든 디렉토리에 액세스할 수 있습니다.그리고www-data
웹 서버가 필요한 경우 어디에서나 파일을 생성할 수 있으므로 도움이 되는 액세스 권한을 제거할 필요가 없습니다 (예: 자체 캐시 디렉토리가 있고 적절한 작업을 위해 생성 및 기록해야 하는 PHP 기반 프런트엔드).
유일한 주의 사항: 새 파일을 수동으로 생성하는 경우 웹 서버에 소유권을 부여하기 위해 적절하게 파일을 줄여야 합니다. 이는 간단 sudo chown www-data:www-data filename
하며 액세스 제어 목록을 통해 파일에 대한 유효한 소유자 권한을 가질 수 있습니다.
특정 파일의 소유자를 변경하지 않고 비표준 액세스 유형에 대해 시스템 관리자로서 이 작업을 수행해야 하는 경우가 여러 가지 있습니다. 이것은 작동하지만 모든 파일 시스템이 아니기 때문에 자체적인 문제가 있습니다.지원하다파일 액세스 목록.
답변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/
답변3
권한 문제를 해결하기 위해 심볼릭 링크를 사용한다는 전체적인 아이디어에는 결함이 있으며 작동할 수 없습니다. 심볼릭 링크 자체에 대해 표시되는 권한은 대부분 관련이 없으며 "실제" 디렉터리의 권한을 우회하는 데 사용할 수 없습니다. /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
)에서도 읽을 수 있습니다. 다른 모든 사용자는 전혀 액세스할 수 없습니다.
다시 한 번 말씀드리지만, 이는 단지 예일 뿐입니다. 웹 서버의 정확한 사용자/그룹은 구성에 따라 다릅니다. 그리고 귀하의 애플리케이션(무들)에는 다른 권한이 필요할 수 있으므로 해당 문서를 참조해야 합니다.