Apache와 PHP는 어떤 사용자로 실행해야 합니까? /var/www 파일에는 어떤 권한이 있어야 합니까?

Apache와 PHP는 어떤 사용자로 실행해야 합니까? /var/www 파일에는 어떤 권한이 있어야 합니까?

방금 Ubuntu 11.10 시스템을 부팅하고 apt-get install apache2 php5해당 시스템에 apache2 및 PHP 5 설치를 실행했습니다. 이제 "웹 서버"로 실행되고 "It Works!" 페이지가 로드됩니다. 이제 보안을 강화하려고 하는데 Linux 웹 서버에 대해 다음과 같은 질문이 있습니다.

  1. 아파치는 누구로 실행되어야 하는가?
  2. 이 사용자는 어떤 그룹에 속해야 합니까?
  3. PHP(및 Apache?)를 파일 소유자로 실행할 수 있는 패키지는 무엇입니까? (공유 웹 호스트와 마찬가지로) 이 패키지를 사용해야 합니까? 소규모 시스템에서 이를 유지 관리하는 것이 쉽고/타당합니까?
  4. 아파치가 실행되는 동안 파일과 폴더를 네트워크에 제공하기 위한 기본 권한은 무엇입니까 www-data? 사용자로 실행되는 Apache/PHP의 경우?

기본 설정을 확인할 때 다음을 수행했습니다.

파일 구조

내가 보는 콘텐츠를 cd /나열 하면 다음과 같습니다.ls -al/var

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

내가 cd들어가서 var보면 ls -al:

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

마지막으로 내부는 /var/www다음과 같습니다.

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

중요한 점은 지금까지 이 모든 파일이 속해 있고 root:root파일의 권한은 644이고 디렉터리의 권한은 755라는 것입니다.

아파치 권한

/var/www/test.php다음 내용으로 루트로 파일을 생성하는 경우 :

<?php echo shell_exec('whoami');

그리고 파일을 브라우저에 로드하면 www-data이것이 파일과 동일하다는 것을 알 수 있습니다 /etc/apache2/envvars.

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

이렇게 하면 ps aux | grep -i apache다음이 표시됩니다.

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start

그렇다면 아파치는 누구로 실행되나요? 첫 번째 프로세스는 시스템 시작 시 스크립트 root에서 있는 그대로 있을 수 /etc/init.d/apache있고 다른 프로세스는 www-data첫 번째 프로세스에서 생성된 것처럼 보입니다 . 그렇죠?

다음으로 을 입력하면 - 그룹 에만 있는 것처럼 보입니다 groups www-data. 나는 이것이 표준 관행이라고 생각합니다.www-data : www-datawww-data

공유 호스팅 및 보안

따라서 제가 올바르게 이해했다면 Apache가 실행 중이고 www-dataApache가 디렉토리를 읽을 수 있도록 하려면 xworld(other) 그룹 o+x( 체인 아래로 디렉토리를 위로 ( www, var). 아파치가 파일을 읽을 수 있도록 하려면 o+r이 비트를 설정해야 합니다 .

안타깝게도 이로 인해 동일한 Linux 시스템의 여러 애플리케이션 및/또는 여러 사용자에게 보안 허점이 발생한다고 생각합니다. 모든 웹 파일은 누구나 읽을 수 있어야 하므로 다른 애플리케이션과 시스템의 다른 사용자가 읽을 수도 있고 액세스할 수도 있습니다. 시스템에 설치된 애플리케이션에 검증되지 않은 원시 사용자 입력(PHP에서 수행됨)을 허용하는 보안 취약점이 있는 경우 원격 공격자는 웹 시스템에서 읽을 수 있는 다른 모든 파일을 탐색할 수 있습니다. 마찬가지로 상자에 여러 사용자가 있고 한 사용자가 다른 사용자의 웹 파일 경로를 알고 있는 경우 해당 사용자는 파일 내용을 읽을 수 있습니다(그리고 데이터베이스 연결 문자열과 같은 민감한 내용도 볼 수 있습니다).

공유 시스템에서 사용자의 파일을 "있는 그대로" 사용할 수 있게 해주는 suphp두 가지 소프트웨어 패키지에 대해 들었습니다 . phpsuexec이것의 장점 중 하나는 웹 애플리케이션(예: WordPress)이 파일을 생성하고 수정할 수 있다는 것입니다. 이는 테마, 플러그인 추가 및 소프트웨어 업그레이드에 매우 유용합니다. 물론 이러한 작업을 수동으로 수행하는 것이 더 안전할 수 있지만 위 패키지 중 하나를 사용하면 장단점이 있습니까? 아니면 chown그것이 속한 WordPress 디렉토리 그룹을 만들고 www-data그룹에 고정 비트를 설정함으로써( g+s)?

나는 이것을 웹 호스팅 회사의 최종 사용자로만 사용해 왔기 때문에 그 내용을 자세히 알지 못하며, 소규모 시스템에 설치하기에 적합한지, 사용해야 할 다른 보안 조치가 있는지도 모릅니다. 나는 그것이 내 우려 사항 중 일부에 대한 가능한 해결책인 것처럼 보이기 때문에 여기에서 언급해야 한다고 생각합니다.

질문으로 돌아가기

  1. 아파치는 누구로 실행되어야 하는가?
  2. 이 사용자는 어떤 그룹에 속해야 합니까?
  3. PHP(및 Apache?)를 파일 소유자로 실행할 수 있는 패키지는 무엇입니까? (공유 웹 호스트와 마찬가지로) 이 패키지를 사용해야 합니까? 소규모 시스템에서 이를 유지 관리하는 것이 쉽고/타당합니까?
  4. 아파치가 실행되는 동안 파일과 폴더를 네트워크에 제공하기 위한 기본 권한은 무엇입니까 www-data? 사용자로 실행되는 Apache/PHP의 경우?

답변1

  1. 루트가 아님
  2. 루트가 아님
  3. 수 실행
  4. 의지하다. 파일의 경우 644, 폴더의 경우 755가 안전한 기본값입니다.

PHP가 해당 파일/폴더의 내용을 편집할 수 있도록 원하지 않는 한 어떤 것의 소유권도 www-data로 변경하지 마십시오.

무엇을 하든: 폴더에는 파일을 찾으려면 사용자의 읽기 및 실행 권한이 필요합니다. 콘텐츠를 변경하는 동안 권한 오류가 발생하는 경우 기본적으로 필요한 권한을 성공적으로 제거한 것입니다.

PHP 애플리케이션을 통해 파일을 작성하지 않는 경우 현재 가지고 있는 파일을 그대로 유지할 수 있습니다. 이 경우 World License(xx4/5)가 적용됩니다.

파일을 본인 소유로 유지하는 경우: 파일 권한은 644(파일)입니다.오직웹사이트 파일을 편집할 수 있습니다. www-data는 귀하가 아니므로 파일을 편집할 수 없습니다.

Apache + 귀하에 대한 액세스를 제한하고 다른 모든 액세스를 차단하려는 경우 chown -R you:www-data *. 파일 권한은 640, 폴더 권한은 750이고 편집할 수 있으며 www-data를 읽을 수 있습니다. 그러면 Apache가 그룹 권한(x4/5x)을 읽을 수 있기 때문입니다.

apache/php가 쓸 수 있는 경로를 최소로 제한하십시오 - 응용 프로그램이 tmp 디렉토리에 써야 하는 경우 - 쓸 수 있도록 허용하십시오이 폴더만- 쓰기 가능한 위치는 가능하다면 확인하세요.외부루트를 문서화하거나 이 쓰기 가능한 경로가 웹에서 액세스되지 않도록 조치를 취하십시오.

"당신"은아니요뿌리가 되십시오. 루트로 직접 SSH 액세스를 허용하는 것은 다른 보안 취약점을 나타내는 지표입니다(예:아니요비밀번호 로그인 비활성화) 그러나 이는 그 자체로 많은 문제를 야기합니다.

답변2

따라서 제가 올바르게 이해했다면 Apache가 www-data로 실행되고 있고 Apache가 디렉토리를 읽을 수 있도록 하려면 x 비트를 world(other) 그룹(o+x)에 대해 설정해야 합니다. 이 역시 필요합니다. 체인의 모든 상위에 대해 디렉토리(www, var)에서 설정을 지정합니다. 아파치가 파일을 읽을 수 있게 하려면 o+r 비트를 설정해야 합니다.

rwx이는 사실이 아니므 로 "기타"로 설정할 필요가 없습니다 . 보호하려는 특정 폴더/파일의 소유자 및/또는 그룹을 변경해야 합니다. 예를 들어:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

이제 그룹 구성원만 www-data읽을 수 있습니다 /var/www/cwd.com. 그리고 오직 당신(cwd)만이 여기에 쓸 수 있습니다. 애플리케이션(Apache를 통해)이 해당 디렉터리의 파일을 쓰거나 수정하도록 허용하려면 해당 디렉터리를 770으로 chmod할 수 있습니다.

이것이 귀하의 모든 질문을 다루고 있다고 생각합니다. 아파치가 실행되는 사용자를 변경할 이유가 없습니다.

관련 정보