방금 Ubuntu 11.10 상자를 회전시킨 다음 상자에 apt-get install apache2 php5
apache2 및 PHP 5를 설치했습니다. 이제 “웹 서버”로 작동하고 “It Works!”를로드합니다. 페이지. 이제 보안을 강화하려고하는데 Linux 웹 서버에 대해 다음과 같은 질문이 있습니다.
- 아파치는 누구처럼 달려야합니까?
- 이 사용자는 어떤 그룹에 속해야합니까?
- PHP (및 Apache)가 파일의 소유자로 실행할 수있는 패키지는 무엇입니까? (공유 웹 호스트 에서처럼)이 패키지를 사용해야합니까? 소규모 시스템에서 유지 관리가 용이 / 가능합니까?
- Apache가 다음과 같이 실행되는 웹에 제공되는 파일 및 폴더에 대한 기본 권한은 무엇입니까
www-data
? 사용자로 실행되는 아파치 / 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
I는 다음을 참조하십시오
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
그룹. 나는 이것이 표준 관행이라고 생각합니다.
공유 호스팅 및 보안
따라서 일을 올바르게 이해하면 아파치가 실행 중이고 아파치가 www-data
디렉토리를 읽을 수 있기를 원한다면 x
비트가 월드 (다른) 그룹 ( o+x
)에 대해 설정되고 모든 상위에 설정되어야합니다. 체인까지의 모든 디렉토리 ( www
, var
). 그리고 아파치를 파일에서 읽을 수있게하려면 o+r
비트를 설정해야합니다.
불행히도 이것이 동일한 리눅스 박스의 여러 응용 프로그램 및 / 또는 여러 사용자에게 보안 허점을 초래한다고 생각합니다. 모든 웹 파일은 세계적으로 읽을 수 있어야하므로 시스템의 다른 응용 프로그램 및 다른 사용자도 액세스 할 수 있습니다. 시스템에 설치된 하나의 응용 프로그램에 검증되지 않은 원시 사용자 입력을 허용하는 보안 취약점이있는 경우, PHP가이를 실행하면 원격 공격자는 웹 시스템에서 전 세계적으로 읽을 수있는 다른 모든 파일을 찾아 볼 수 있습니다. 마찬가지로 상자에 여러 명의 사용자가 있고 사용자가 다른 사용자의 웹 파일 경로를 알고 있으면 파일 내용을 읽을 수 있습니다 (데이터베이스 연결 문자열 등과 같은 민감한 항목을 볼 수 있음).
나는 두 개의 패키지 들었습니다, suphp
그리고 phpsuexec
사용자의 파일을 허용하여 해당 거래는 공유 시스템에 “그들로”밖으로 제공 될 수 있습니다. 이것의 장점 중 하나는 WordPress와 같은 웹 응용 프로그램이 파일을 만들고 수정할 수있게 해주므로 테마, 플러그인 및 소프트웨어 업그레이드에 매우 유용합니다. 물론 이러한 작업을 수동으로 수행하는 것이 더 안전하지만 위에서 언급 한 패키지 중 하나를 사용하여 타협 할 수 있습니까? 또는 chown
wordpress 디렉토리 그룹을 그룹으로 묶고 www-data
고정 비트를 설정하는 데 사용할 수 g+s
있습니까 ( )?
나는 이것들을 웹 호스팅 회사의 최종 사용자로 만 사용했기 때문에 그 웹의 인 앤 아웃을 알지 못하며 작은 시스템에 설치하는 것이 합리적인지 또는 다른 시스템이 있는지 대신 보안 수단을 사용해야하지만 여기에서 내가 우려하는 부분을 해결할 수있는 한 가지 방법 인 것처럼 보이기 때문에 여기서 언급 할 것이라고 생각했습니다.
질문으로 돌아 가기
- 아파치는 누구처럼 달려야합니까?
- 이 사용자는 어떤 그룹에 속해야합니까?
- PHP (및 Apache)가 파일의 소유자로 실행할 수있는 패키지는 무엇입니까? (공유 웹 호스트 에서처럼)이 패키지를 사용해야합니까? 소규모 시스템에서 유지 관리가 용이 / 가능합니까?
- Apache가 다음과 같이 실행되는 웹에 제공되는 파일 및 폴더에 대한 기본 권한은 무엇입니까
www-data
? 사용자로 실행되는 아파치 / php?
답변
- 뿌리가 아닌
- 뿌리가 아닌
- SuEXEC
- 다릅니다. 파일의 경우 644, 폴더의 경우 755가 안전한 기본값입니다.
PHP가 해당 파일 / 폴더의 내용을 편집 할 수있게하려는 경우가 아니면 www-data에 대한 소유권을 변경하지 마십시오.
다른 작업에 관계없이 폴더는 사용자가 파일을 찾을 수있는 읽기 및 실행 권한이 필요합니다. 파일을 읽으려면 사용자에게 읽기 권한이 필요합니다. 항목을 변경할 때 권한 오류가 발생하는 경우 기본적으로 필요한 권한을 제거했습니다.
PHP 응용 프로그램을 통해 파일을 작성하지 않는 경우 자신이 소유 한 파일을 그대로 둘 수 있습니다. 이 상황에서 세계 허가 (xx4 / 5)가 적용됩니다.
644 (파일)의 파일 권한이 있는 사용자는 웹 사이트 파일 (www-data는 사용자가 아님) 만 편집 할 수 있으므로 파일을 편집 할 수 없음을 의미합니다.
apache +에 대한 액세스를 제한하려면 다른 모든 액세스를 차단하십시오 chown -R you:www-data *
. 640의 파일 권한과 750의 폴더 권한을 사용하면 www-data를 읽을 수 있습니다. 그러면 apache가 그룹 권한 (x4 / 5x)을 읽기 때문입니다.
apache / php가 쓸 수있는 경로를 최소한으로 제한하십시오-응용 프로그램에 쓸 tmp 디렉토리가있는 경우 – 해당 폴더에만 쓸 수 있습니다-가능하면 쓰기 가능한 위치에 대해서는 가능한 한 외부에 있는지 확인하십시오 . 이 쓰기 가능한 경로가 웹에 액세스 할 수 없도록 문서 루트를 작성하거나 단계를 수행하십시오.
“귀하”는 루트 가 아니 어야 합니다. 루트로 직접 SSH 액세스를 허용하면 (예 : 다른 보안 경과의 지표가 되지 비밀번호 로그인을 허용하지),하지만 자신에게 질문의 전체 무리입니다.
답변
아파치가 www-data로 실행 중이고 아파치가 디렉토리를 읽을 수 있기를 원한다면 x 비트를 월드 (다른) 그룹 (o + x)에 설정해야합니다. 체인까지 모든 상위 디렉토리에 설정해야합니다 (www, var). 그리고 아파치를 파일에서 읽을 수있게하려면 o + r 비트를 설정해야합니다.
이것은 사실이 아니며 rwx
‘other’ 로 설정할 필요가 없습니다 . 보호하려는 특정 폴더 / 파일의 소유자 및 / 또는 그룹을 변경해야합니다. 예 :
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하십시오.
나는 이것이 당신의 모든 문제를 다루고 있다고 생각합니다. 사용자 아파치가 변경되고있는 이유는 없습니다.