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


41

방금 Ubuntu 11.10 상자를 회전시킨 다음 상자에 apt-get install apache2 php5apache2 및 PHP 5를 설치했습니다. 이제 "웹 서버"로 작동하고 "It Works!"를로드합니다. 페이지. 이제 보안을 강화하려고하는데 Linux 웹 서버에 대해 다음과 같은 질문이 있습니다.

  1. 아파치는 누구처럼 달려야합니까?
  2. 이 사용자는 어떤 그룹에 속해야합니까?
  3. PHP (및 Apache)가 파일의 소유자로 실행할 수있는 패키지는 무엇입니까? (공유 웹 호스트 에서처럼)이 패키지를 사용해야합니까? 소규모 시스템에서 유지 관리가 용이 ​​/ 가능합니까?
  4. Apache가 다음과 같이 실행되는 웹에 제공되는 파일 및 폴더에 대한 기본 권한은 무엇입니까 www-data? 사용자로 실행되는 아파치 / php?

기본 설정을 검토하여 다음 작업을 수행했습니다.

파일 구조

언제 cd /와 할 ls -al내용의 목록은, 내가 볼 /var:

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

나는 만약 cdvar와 않습니다 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 apacheI는 다음을 참조하십시오

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와 같은 웹 응용 프로그램이 파일을 만들고 수정할 수있게 해주므로 테마, 플러그인 및 소프트웨어 업그레이드에 매우 유용합니다. 물론 이러한 작업을 수동으로 수행하는 것이 더 안전하지만 위에서 언급 한 패키지 중 하나를 사용하여 타협 할 수 있습니까? 또는 chownwordpress 디렉토리 그룹을 그룹으로 묶고 www-data고정 비트를 설정하는 데 사용할 수 g+s있습니까 ( )?

나는 이것들을 웹 호스팅 회사의 최종 사용자로 만 사용했기 때문에 그 웹의 인 앤 아웃을 알지 못하며 작은 시스템에 설치하는 것이 합리적인지 또는 다른 시스템이 있는지 대신 보안 수단을 사용해야하지만 여기에서 내가 우려하는 부분을 해결할 수있는 한 가지 방법 인 것처럼 보이기 때문에 여기서 언급 할 것이라고 생각했습니다.

질문으로 돌아 가기

  1. 아파치는 누구처럼 달려야합니까?
  2. 이 사용자는 어떤 그룹에 속해야합니까?
  3. PHP (및 Apache)가 파일의 소유자로 실행할 수있는 패키지는 무엇입니까? (공유 웹 호스트 에서처럼)이 패키지를 사용해야합니까? 소규모 시스템에서 유지 관리가 용이 ​​/ 가능합니까?
  4. Apache가 다음과 같이 실행되는 웹에 제공되는 파일 및 폴더에 대한 기본 권한은 무엇입니까 www-data? 사용자로 실행되는 아파치 / php?

답변:


17
  1. 뿌리가 아닌
  2. 뿌리가 아닌
  3. SuEXEC
  4. 다릅니다. 파일의 경우 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 액세스를 허용하면 (예 : 다른 보안 경과의 지표가 되지 비밀번호 로그인을 허용하지),하지만 자신에게 질문의 전체 무리입니다.


10

아파치가 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하십시오.

나는 이것이 당신의 모든 문제를 다루고 있다고 생각합니다. 사용자 아파치가 변경되고있는 이유는 없습니다.


2
감사합니다. 나쁜 해결책은 아니지만 한 사용자가 다른 사용자의 파일 경로를 알고 있으면 파일의 내용을 읽는 스크립트를 작성한 다음 웹 브라우저에로드하여 아파치로 실행할 수 있습니다. 다른 사용자 디렉토리의 파일 말이 돼? 따라서 폴더 권한을 750으로 설정하더라도 잠재적 인 보안 취약점이 여전히 남아 있습니다.
cwd

@cwd 당신은 이것을 알아 내었습니까?
Ricky Boyce

@cwd 이것은 내가 가진 정확한 질문이었습니다. 그래서 나는 이것을 물었다 : serverfault.com/questions/807723/…
Nandakumar Edamana
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.