방금 Ubuntu 11.10 시스템을 부팅하고 apt-get install apache2 php5
해당 시스템에 apache2 및 PHP 5 설치를 실행했습니다. 이제 "웹 서버"로 실행되고 "It Works!" 페이지가 로드됩니다. 이제 보안을 강화하려고 하는데 Linux 웹 서버에 대해 다음과 같은 질문이 있습니다.
- 아파치는 누구로 실행되어야 하는가?
- 이 사용자는 어떤 그룹에 속해야 합니까?
- PHP(및 Apache?)를 파일 소유자로 실행할 수 있는 패키지는 무엇입니까? (공유 웹 호스트와 마찬가지로) 이 패키지를 사용해야 합니까? 소규모 시스템에서 이를 유지 관리하는 것이 쉽고/타당합니까?
- 아파치가 실행되는 동안 파일과 폴더를 네트워크에 제공하기 위한 기본 권한은 무엇입니까
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-data
www-data
공유 호스팅 및 보안
따라서 제가 올바르게 이해했다면 Apache가 실행 중이고 www-data
Apache가 디렉토리를 읽을 수 있도록 하려면 x
world(other) 그룹 o+x
( 체인 아래로 디렉토리를 위로 ( www
, var
). 아파치가 파일을 읽을 수 있도록 하려면 o+r
이 비트를 설정해야 합니다 .
안타깝게도 이로 인해 동일한 Linux 시스템의 여러 애플리케이션 및/또는 여러 사용자에게 보안 허점이 발생한다고 생각합니다. 모든 웹 파일은 누구나 읽을 수 있어야 하므로 다른 애플리케이션과 시스템의 다른 사용자가 읽을 수도 있고 액세스할 수도 있습니다. 시스템에 설치된 애플리케이션에 검증되지 않은 원시 사용자 입력(PHP에서 수행됨)을 허용하는 보안 취약점이 있는 경우 원격 공격자는 웹 시스템에서 읽을 수 있는 다른 모든 파일을 탐색할 수 있습니다. 마찬가지로 상자에 여러 사용자가 있고 한 사용자가 다른 사용자의 웹 파일 경로를 알고 있는 경우 해당 사용자는 파일 내용을 읽을 수 있습니다(그리고 데이터베이스 연결 문자열과 같은 민감한 내용도 볼 수 있습니다).
공유 시스템에서 사용자의 파일을 "있는 그대로" 사용할 수 있게 해주는 suphp
두 가지 소프트웨어 패키지에 대해 들었습니다 . phpsuexec
이것의 장점 중 하나는 웹 애플리케이션(예: WordPress)이 파일을 생성하고 수정할 수 있다는 것입니다. 이는 테마, 플러그인 추가 및 소프트웨어 업그레이드에 매우 유용합니다. 물론 이러한 작업을 수동으로 수행하는 것이 더 안전할 수 있지만 위 패키지 중 하나를 사용하면 장단점이 있습니까? 아니면 chown
그것이 속한 WordPress 디렉토리 그룹을 만들고 www-data
그룹에 고정 비트를 설정함으로써( g+s
)?
나는 이것을 웹 호스팅 회사의 최종 사용자로만 사용해 왔기 때문에 그 내용을 자세히 알지 못하며, 소규모 시스템에 설치하기에 적합한지, 사용해야 할 다른 보안 조치가 있는지도 모릅니다. 나는 그것이 내 우려 사항 중 일부에 대한 가능한 해결책인 것처럼 보이기 때문에 여기에서 언급해야 한다고 생각합니다.
질문으로 돌아가기
- 아파치는 누구로 실행되어야 하는가?
- 이 사용자는 어떤 그룹에 속해야 합니까?
- PHP(및 Apache?)를 파일 소유자로 실행할 수 있는 패키지는 무엇입니까? (공유 웹 호스트와 마찬가지로) 이 패키지를 사용해야 합니까? 소규모 시스템에서 이를 유지 관리하는 것이 쉽고/타당합니까?
- 아파치가 실행되는 동안 파일과 폴더를 네트워크에 제공하기 위한 기본 권한은 무엇입니까
www-data
? 사용자로 실행되는 Apache/PHP의 경우?
답변1
- 루트가 아님
- 루트가 아님
- 수 실행
- 의지하다. 파일의 경우 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할 수 있습니다.
이것이 귀하의 모든 질문을 다루고 있다고 생각합니다. 아파치가 실행되는 사용자를 변경할 이유가 없습니다.