it-swarm-ko.com

/ var / www에서 Apache 2 사용자 www-data의 권한을 처리하는 가장 좋은 방법은 무엇입니까?

누구든지 /var/www의 파일 처리를위한 멋진 솔루션을 가지고 있습니까? 이름 기반 가상 호스트를 실행 중이고 Apache 2 사용자는 www-data입니다.

정규 사용자와 루트가 2 명 있습니다. 따라서 /var/www의 파일을 엉망으로 만들 때 ...

chown -R www-data:www-data

... 항상 이것을 다루는 좋은 방법은 무엇입니까?

보충적인 질문 : 그렇다면 어떻게 하드 코어 권한을 사용합니까?

이것은 협업 개발 환경에서 항상 문제였습니다.

218
Gareth

@Zoredache의 answer 확장하려고 시도합니다.

  • 새 그룹을 만들고 (www-pub) 해당 그룹에 사용자 추가

    groupadd www-pub

    usermod -a -G www-pub usera##은 -a를 사용하여 기존 그룹에 추가해야합니다

    usermod -a -G www-pub userb

    groups usera## 사용자를위한 표시 그룹

  • / var/www 아래의 모든 소유권을 root : www-pub로 변경

    chown -R root:www-pub /var/www## -R 재귀의 경우

  • 모든 폴더의 권한을 2775로 변경

    chmod 2775 /var/www## 2 = 그룹 ID 설정, 7 = 소유자 (루트), 7 = 그룹 (www-pub), 5 = 세계 (아파치 www-data 사용자 포함) )

    그룹 ID 설정 ( SETGID ) 비트 (2)는 그룹 (www-pub)이 해당 폴더에서 생성 된 모든 새 파일/폴더로 복사되도록합니다. 다른 옵션은 사용자 ID를 복사하는 SETUID (4)와 소유자 만 파일을 삭제할 수 있다고 생각하는 STICKY (1)입니다.

    -R 재귀 옵션이 있지만 파일과 폴더를 구별하지 않으므로 다음과 같이 se find 를 사용해야합니다.

    find /var/www -type d -exec chmod 2775 {} +

  • 모든 파일을 0664로 변경

    find /var/www -type f -exec chmod 0664 {} +

  • 사용자의 umask를 0002로 변경

    Umask는 기본 파일 작성 권한을 제어합니다. 0002는 파일에 664가 있고 디렉토리가 775라는 것을 의미합니다.이 설정 (내 경우에는 /etc/profile의 맨 아래에있는 umask 행을 편집하여)은 다음에 의해 작성된 파일을 의미합니다. 한 사용자는 www-group의 다른 사용자가 chmod 할 필요없이 쓸 수 있습니다.

파일과 디렉토리를 만들고 ls -l로 소유자, 그룹 및 권한을 확인하여이 모든 것을 테스트하십시오.

참고 : 그룹 변경 사항을 적용하려면 로그 아웃/로그인해야합니다!

209
Tom

사용 권한을 구성하는 방법을 완전히 확신하지 못하지만 시작점이 될 수 있습니다. 아마도 더 좋은 방법이있을 것입니다. 두 사용자 모두/var/www/아래의 내용을 변경할 수 있기를 원한다고 가정합니다.

  • 새 그룹 (www-pub)을 만들고 해당 그룹에 사용자를 추가하십시오.
  • / var/www 아래의 모든 소유권을 root : www-pub로 변경하십시오.
  • 모든 폴더의 권한을 2775로 변경
  • 모든 파일을 0664로 변경하십시오.
  • 사용자의 umask를 0002로 변경하십시오.

즉, 사용자 중 하나가 만든 새 파일은 username : www-pub 0664 여야하고 생성되는 모든 디렉토리는 username : www-pub 2775입니다. Apache는 '다른 사용자'구성 요소를 통해 모든 것에 대한 읽기 액세스 권한을 갖습니다. 디렉토리의 SETGID 비트는 폴더를 소유 한 그룹이 작성중인 모든 파일을 소유하도록합니다. 그룹의 모든 사람이 파일을 편집 할 수 있도록 쓰기 비트가 설정되도록하려면 umask를 조정해야합니다.

하드 코어에 관해서는 권한을 사용합니다. 사이트/서버에 따라 다릅니다. 편집자가 1-2 명 밖에없고 일이 너무 심하게 부러지지 않도록해야한다면 쉽게 갈 것입니다. 비즈니스에 더 복잡한 것이 필요하면 더 복잡한 것을 설정합니다.

62
Zoredache

POSIX ACL (액세스 제어 목록)이 도움이 될 것 같습니다. user : group : other 모델에 비해 세분화 된 권한 모델을 허용합니다. 더 명확하고 파일 시스템의 브랜치에 대한 "기본"동작을 설정할 수 있기 때문에 머릿속에서 쉽게 유지할 수있는 것으로 나타났습니다.

예를 들어, 각 사용자의 권한을 명시 적으로 지정할 수 있습니다.

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

또는 일부 공유 그룹을 기반으로 할 수 있습니다.

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

그리고 아마도 당신은 Apache 사용자를 읽기 전용으로 유지하고 싶을 것입니다

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

매뉴얼 페이지 :

자습서

39
Joe Holloway

이 질문은 다시 질문 이었고, 토론 됨 메타에 관한 것으로, 현재의 모범 사례는 2009 년에 요청했을 때보 다 더 나은 접근 방식을 제공합니다. 이 답변은 협력 웹 개발 환경을 안전하게 처리하기위한 몇 가지 최신 솔루션을 제공하려고합니다 .


안전한 웹 서버 및 공동 개발을 위해서는 파일 권한 이상의 것이 있습니다.

  • 모든 사이트에 대해 별도의 사용자가 있어야합니다 . 즉, www-data. 오늘날 아파치는 static 콘텐츠 파일만을 제공하는 경우는 거의 없지만 dynamic 웹 사이트를 실행하는 경우는 거의 없습니다. 이 답변은 가장 일반적인 서버 사이트 언어이므로 PHP에 집중하지만 다른 원칙에도 동일한 원칙이 적용됩니다.

    단일 사이트에 보안 문제가있는 경우 동일한 사용자로 실행중인 모든 사이트로 확산 될 수 있습니다. 공격자는 데이터베이스 로그인 정보를 포함하여 사용자가 보는 모든 내용을보고 사용자에게 쓰기 권한이있는 모든 사이트를 수정할 수 있습니다.

  • Use SSH File Transfer Protocol (SFTP). FTP를 사용하는 동안 보안을 위해 포기해야합니다. 안전한 대체 대체 SFTP는 협업 웹 개발을위한 완벽한 솔루션 인 기능도 갖추고 있습니다.

    사이트와 사이트 당 한 명의 사용자를 분리 한 후에는 웹 개발자에게 액세스 권한을 부여해야합니다. 이러한 사이트 사용자의 암호를 제공하거나 원래 사용자 계정을 사용하여 사이트 파일에 액세스하는 대신 SSH 키 를 사용하여 로그인 할 수 있습니다.

    모든 개발자는 키 쌍을 생성하고 개인 키를 비밀로 유지할 수 있습니다. 그런 다음 공개 키가 ~/.ssh/authorized_keys 개발자가 작업중인 모든 웹 사이트 사용자 계정에 대한 파일입니다. 이는 비밀번호 및 로그인 관리에 많은 이점이 있습니다.

    • 모든 개발자는 사이트 별 사용자 정렬과 관련된 모든 암호를 기억하거나 저장해야하는 부담없이 여러 웹 사이트에 액세스 할 수 있습니다.

    • 누군가 회사를 떠날 때마다 비밀번호를 변경하고 공유 할 필요가 없습니다.

    • 매우 강력한 암호를 사용하거나 암호 기반 로그인을 모두 비활성화 할 수 있습니다.

  • PHP-FPM 을 사용하십시오. 현재 사용자는 PHP 사용자로 실행합니다. 모든 사용자, 즉 사이트 당 하나의 풀에 대해 새로운 pool을 실행하십시오. 단일 사이트가 소비 할 수있는 리소스 양을 지정할 수 있으므로 보안과 성능 모두에 가장 좋습니다.

    예를 들어 NeverEndingSecurity의 리눅스에서 별도의 사용자/uid 및 그룹으로 php-fpm을 실행하십시오 . HowtoForge의 buntu 16.04에서 Apache와 함께 PHP-FPM 사용 와 같은 자습서가 있습니다. 이는 사용자 분리를 통해 보안을 강화하기 위해 PHP-FPM을 사용하지 않고 서버 전체에서 단일 FPM 소켓을 사용하도록 안내합니다.

11
Esa Jokinen