www-data 소유 / var / www에 대한 사용자 권한 부여


36

일부 웹 사이트에 대한 간단한 웹 서버 설정이 있으며 다음과 같은 레이아웃이 있습니다.

사이트 1 : /var/www/site1/public_html/

사이트 2 : /var/www/site2/public_html/

이전에는 루트 사용자를 사용하여 파일을 관리 한 다음 www-data완료되었을 때 다시 전달 했습니다 (WordPress 사이트, WP 업로드가 작동하는 데 필요함). 이것은 아마도 최선의 방법이 아닙니다.

site1에서 파일을 편집 할 수 있지만 site2는 아닌 파일을 '소유'하는 것을 멈추지 않는 다른 사용자 (user1이라고 부를 수 있음)를 만드는 방법을 찾고 있습니다 www-data. 내가 이것을 할 수있는 방법이 있습니까?

답변:


70

site1의 소유권을 확인하면 다음과 같은 내용이 표시됩니다.

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

이는 디렉토리가 사용자 루트, 그룹 루트가 소유 함을 의미합니다. 루트 사용자에게는 디렉토리에 대한 쓰기 권한 (읽기 및 실행 권한)이 있지만 그룹 루트에는 읽기 및 실행 권한 만 있습니다.

그룹 소유권을 다른 (새) 그룹 으로 변경하고 user1을 해당 특정 그룹에 추가하려고합니다. 우리는 그 특정 그룹에게도 서면 허가를 줄 것입니다.

새 그룹을 만들고

sudo addgroup site1

새로 작성된 그룹에 user1을 추가하십시오.

sudo adduser user1 site1

user1이 실제로 해당 그룹에 있는지 확인하십시오.

groups user1

출력은 다음과 같은 목록이어야합니다.

user1 : <other-groups> site1

이제 원하는 디렉토리의 그룹 소유권을 변경할 수 있습니다.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

이 새 그룹 소유자에게 쓰기 권한을 부여하십시오.

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

모든 변경 사항이 실제로 있는지 확인하십시오.

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

따라서 디렉토리는 이제 사용자 루트 그룹 site1이 소유합니다. 사용자 root 및 그룹 site1은 모두 디렉토리에 대한 쓰기 권한 (읽기 및 실행 권한)을 갖습니다. site1 그룹에 속한 모든 사용자는 해당 그룹에 부여 된 모든 권한을 갖습니다.

이제 user1로 로그인하고 site1 디렉토리로 이동 한 후 해당 디렉토리에 파일을 작성하십시오.

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

기본 user1 그룹이 site1이 아니기 때문에 실패했습니다. 따라서 해당 그룹으로 변경하십시오.

newgrp - site1

파일을 다시 작성하십시오 (그룹을 변경 한 후 user1의 홈 디렉토리로 이동했음을주의하십시오). 이제 작동합니다. 작성된 파일에는 세계 읽기 권한이 있으므로 아파치 (또는 웹 서버)는 파일 액세스에 문제가 없어야합니다.

편집하다

또한 의견에서 dan08이 지적한 것처럼 site1 그룹에 www-data를 추가해야합니다.

sudo adduser www-data site1

많은 (전부는 아님) 배포에서 www-data는 Apache 웹 서버가 실행되는 사용자입니다. 또한 Apache (특히 PHP 스크립트 포함)가 수행하는 모든 작업은 기본적으로 사용자 www-data (및 그룹 www-data)의 권한으로 수행됩니다. WordPress는 사용자 www-data를 사용하여 파일을 씁니다.

Apache 웹 서버가 어떻게 실행되고 있는지 보려면 명령을 실행하십시오.

ps aux | grep apache2 | less

1
또한 site1 그룹에 www-data를 추가해야합니다. Wordpress 웹 인터페이스에서 파일을 업로드하고 변경할 때 변경은 www-data 사용자를 사용하여 Apache에 의해 수행됩니다. 따라서 읽기 권한만으로는 충분하지 않습니다.
Dan

3
Permission denied메시지 인해 "차 그룹"에있는 것이 아니라, 사용자가 아직 실제로는 (운영 체제에 관한까지 같이) 그 그룹에없는. 로그 아웃했다가 다시 로그인하면 예상대로 작동합니다 (를 실행하지 않고 newgrp - site1).
0b10011

정확히 어떻게이주는 다른 것 www-data추가 할 필요가 끝날 경우 그룹 쓰기 권한 www-datasite1어쨌든?
Matt

@MattBorja 검색어가 명확하지 않습니다. 이름이 www-data' write permissions? If that is the question, www-data '인 그룹을 제공하는 데 무엇이 문제인지 묻는 것이 그룹이 아니라 사용자입니다. 귀하의 질문을 오해 한 경우 알려주십시오.
Masroor

사용자가 PHP 스크립트 (예 : PHP 파일 관리자)를 통해 서로의 사이트에 액세스 할 수 있기 때문에 이것은 안전한 구성이 아니라고 생각합니다.
qdinar

7

두 그룹을 작성 site1grp하고site2grp

sudo groupadd site1grp && sudo groupadd site2grp

www-data두 그룹 모두에 추가하십시오 .

sudo adduser www-data site1grp && sudo adduser www-data site2grp

적절한 그룹에 user1 및 user2 추가

sudo adduser user1 site1grp && sudo adduser user2 site2grp

사용자 소유자가 www-data이고 그룹 소유자가 적절한 그룹이되도록 사이트 폴더의 권한을 변경하십시오.

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

이제 www-data두 사이트 모두에 대한 사용자 및 그룹 권한이 있으며 각 사용자는 해당 사이트에 대한 그룹 권한을 갖습니다.


4

홈 폴더 아래에 워드 프레스 루트 폴더가있는 사람 :

우분투 / 아파치

  1. www-data 그룹에 사용자를 추가하십시오.

    CREDIT www-data 그룹에 쓰기 권한 부여

    사용자에게 전화를 걸고 싶습니다 usermod. 따라서 다음과 같습니다.

    sudo usermod -aG www-data yourUserName
    

    www-data그룹이 존재 한다고 가정

  2. 사용자가 www-data그룹에 있는지 확인하십시오 .

    groups yourUserName
    

    다음과 같은 것을 얻어야합니다.

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName은 일반적으로 사용자 이름과 유사합니다.

  3. 사용자 소유권을 유지하면서 폴더의 그룹 소유권을 반복적으로 변경

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. WebSiteFolder로 디렉토리 변경

    cd yourWebSiteFolder
    
  5. 폴더 및 하위 폴더의 그룹 권한을 재귀 적으로 변경하여 쓰기 권한을 활성화하십시오.

    find . -type d -exec chmod -R 775 {} \;
    

    모드 /home/yourUserName/yourWebSiteFolder/'에서 0755 (rwxr-xr-x)에서0775 (rwxrwxr-x)

  6. 쓰기 권한을 사용 가능하게하려면 파일 및 서브 파일의 그룹 우선 순위를 반복적으로 변경하십시오.

    find . -type f -exec chmod -R 664 {} \;
    

    결과는 다음과 같아야합니다.

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    다음과 같습니다.

    chmod -R ug+rw foldername
    

    권한은 664 또는 775와 같습니다.


3

"새 사용자"라는 새 그룹을 만든 다음 www-data 및 "새 사용자"를 해당 그룹에 추가해야합니다.

sudo gpasswd -a new_user new_group

그런 다음 소유자를 new_user그룹으로 변경할 수 있습니다 new_group.

sudo chown -R new_user:new_group /var/www/site1

그런 다음 site1에 그룹 레벨 액세스 권한을 부여해야합니다. www-data는 사이트가 new_group에 속해 있기 때문에 여전히 사이트에 액세스 할 수 있지만 new_user는 site2를 소유 한 www-data 그룹에 속하지 않기 때문에 site2에 액세스 할 수 없습니다.


"site1에 그룹 수준의 액세스 권한을 부여"함으로써 귀하의 답변이 혼란 스럽습니다. "site1 그룹을 new_group으로 변경"또는 모드 ( chmod)를 변경 했습니까? 당신의 대답은 안전을 지키거나 파괴 할 수있는 모드를 언급하지 않았습니다.
Lekensteyn

chmodOTHERS에 대한 모든 권한을 취소 하여 모드 ( )를 변경해야했습니다 .
errikos

1

모든 파일이 이미 그룹에 속한 www-data사용자 ( ls -slah명령으로 확인할 수 있음 ) www-data(파일 목록에서 사용자 이름 다음 열 ) 에 있다고 가정하면 사용자를 동일한 www-data그룹에 추가하여 이러한 파일을 편집 할 수 있습니다

# usermod -aG www-data username

기존 사용자 또는

# adduser username www-data

새로 만든 사람

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.