PHP/Apache를 사용하는 업로드 폴더에 대한 적절한 권한은 무엇입니까?
문제
기본적인 질문을 해서 죄송합니다. 저는 .NET 개발자이고 LAMP 설정에 대한 경험이 많지 않습니다.
특정 폴더에 업로드할 수 있는 PHP 사이트가 있습니다.업로드 프로세스가 작동하려면 웹 서버 사용자가 이 폴더를 소유해야 한다는 말을 들었으므로 폴더를 만든 다음 다음과 같이 권한을 설정했습니다.
chown apache:apache -R uploads/
chmod 755 -R uploads/
이제 유일한 문제는 FTP 사용자가 업로드된 파일을 전혀 수정할 수 없다는 것입니다.
파일을 업로드한 다음 나중에 웹 서버 사용자가 아닌 다른 사용자로 수정할 수 있는 권한 설정이 있습니까?
해결책
apache 사용자와 FTP 사용자를 모두 구성원으로 포함하여 새 그룹을 만든 다음 업로드 폴더에 775 권한을 부여할 수 있습니다.이렇게 하면 Apache 및 FTP 사용자 모두에게 폴더의 파일에 쓸 수 있는 기능이 제공되지만 다른 사용자는 해당 파일을 수정하지 못하게 됩니다.
다른 팁
정말로 이것을하고 싶다면 Ryan의 대답을 따르겠습니다.
일반적으로 *nix 환경에서는 항상 가능한 한 적은 권한을 부여하는 실수를 저지르게 됩니다.
10번 중 9번은 755가 이에 대한 이상적인 권한입니다. 파일을 수정할 수 있는 유일한 사용자는 웹 서버이기 때문입니다.정말로 이것을 변경해야 한다면 그룹에 있는 ftp 사용자와 함께 이것을 775로 변경하십시오.
귀하가 PHP를 처음 사용하는 경우 업로드 서비스의 보안을 향상시키는 데 유용한 링크는 다음과 같습니다.move_uploaded_file
아니면 적어도 766.
- 읽다 = 4
- 쓰기 = 2
- 실행 = 1
7 = 읽기 + 쓰기 + 실행
6 = 읽기 + 쓰기
- 첫 번째 숫자:소유자
- 두 번째 숫자:그룹
- 세 번째 숫자:다른 사용자
SELinux를 사용하는 경우 유형 컨텍스트가 tmp_t인지 확인해야 한다고 덧붙일 것입니다. 이 작업은 chcon 유틸리티를 사용하여 수행할 수 있습니다.
chcon -t tmp_t 업로드
중요한 것은 apache
사용자 및 그룹은 최소 read
액세스하고 어떤 경우에는 execute
입장.나머지는 당신이 줄 수 있어요 0
입장.
이것이 가장 안전한 설정입니다.
나는 업로드 권한을 갖는 ftp 그룹을 만드는 아이디어를 지지합니다.하지만 굳이 775 권한을 줄 필요는 없을 것 같습니다.7은 읽기, 쓰기, 실행을 의미합니다.일반적으로 특정 그룹에 읽기 및 쓰기를 허용하려고 하지만 경우에 따라 실행이 필요하지 않을 수도 있습니다.
또한 기억하십시오 CHOWN
또는 chgrp
귀하의 웹 사이트 폴더.노력하다 myusername# chown -R myusername:_www uploads
님의 답변을 바탕으로 @Ryan Ahearn
, 다음은 내가 한 일입니다 Ubuntu
16.04 사용자 생성 front
nginx의 웹 디렉토리에 대한 권한만 가지고 있습니다. /var/www/html
.
단계:
* pre-steps: * basic prepare of server, * create user 'dev' which will be the owner of "/var/www/html", * * install nginx, * * * create user 'front' sudo useradd -d /home/front -s /bin/bash front sudo passwd front # create home folder, if not exists yet, sudo mkdir /home/front # set owner of new home folder, sudo chown -R front:front /home/front # switch to user, su - front # copy .bashrc, if not exists yet, cp /etc/skel/.bashrc ~front/ cp /etc/skel/.profile ~front/ # enable color, vi ~front/.bashrc # uncomment the line start with "force_color_prompt", # exit user exit * * add to group 'dev', sudo usermod -a -G dev front * change owner of web dir, sudo chown -R dev:dev /var/www * change permission of web dir, chmod 775 $(find /var/www/html -type d) chmod 664 $(find /var/www/html -type f) * * re-login as 'front' to make group take effect, * * test * * ok *