루트가 변경되거나 격리된 SFTP 사용자는 여전히 PHP를 사용하여 전체 파일 시스템에 액세스할 수 있습니다.

루트가 변경되거나 격리된 SFTP 사용자는 여전히 PHP를 사용하여 전체 파일 시스템에 액세스할 수 있습니다.

하나 주고 싶다내 서버의 웹 호스팅 공간을 내 친구에게 격리. 나는 그랬다:

useradd friend 
groupadd sftpusers
mkdir /sftp
mkdir /sftp/friend     
mkdir /sftp/friend/home
mkdir /sftp/friend/www 
usermod -aG sftpusers friend
chown friend:sftpusers /sftp/friend/home/
chown friend:sftpusers /sftp/friend/www/
usermod -d /sftp/friend/home friend 

나는 이것을 다음에 추가합니다 sshd_config:

Subsystem sftp internal-sftp -d /home
Match Group sftpusers
ChrootDirectory /sftp/%u

Apache 구성은 다음과 같습니다.

<VirtualHost *:80>
  ServerName friend.example.com
  DocumentRoot /sftp/friend/www
  <Directory />
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

작동 방식: friendSFTP는 Jailroot 환경에서 액세스할 수 있으며/sftp/friendSFTP를 종료할 수 없습니다.. 이것은 좋다.

그러나 나는 그가 PHP를 사용하여 파일 시스템의 다른 파일을 계속 볼 수 있다는 것을 알았습니다. 만약 그가 다음을 index.php포함하는 파일을 생성한다면:

<?php
print_r(scandir('/'));
?>

그는 파일 시스템에서 다른 파일을 볼 수 Array ( [0] => . [1] => .. [2] => bin [3] => boot [4] => dev [5] => etc [6] => home [7] => lib [8] => lib64 [9] => media [10] => mnt [11] => opt [12] => proc [13] => root [14] => run [15] => sbin [16] => sftp [17] => srv [18] => sys [19] => tmp [20] => usr [21] => var )있으며 PHP를 사용하여 거기에서 일부 파일을 열 수도 있습니다.

질문:

/sftp/friend/PHP를 사용해도 그가 어떤 것에도 접근할 수 없도록 만드는 방법은 무엇입니까 ?

php_admin_value "open_basedir" "/sftp/friend"

구성 에서 <VirtualHost>보호가 충분합니까 ?

아니면 악성 코드를 실행하여 다른 웹사이트에 액세스할 수도 있나요?

링크:가상 호스트/웹사이트의 PHP가 동일한 Apache 서버에 있는 다른 가상 호스트/웹사이트의 디렉터리에 쓰는 것을 방지하는 방법은 무엇입니까?

답변1

sshdChrootDirectorySSH 로그인 및 SFTP/scp 파일 전송 에만 적용됩니다.

Apache의 DocumentRoot는 다릅니다. HTTP 요청에 응답하는 Apache 서비스 파일과 관련되어 URI 네임스페이스의 루트를 정의하지만 웹 서버가 실행하거나 통신할 수 있는 다른 프로세스(예: PHP 스크립트 인터프리터.

Apache 플러그인과 함께 PHP를 사용하는 경우 php_admin_valueApache의 구성이 <VirtualHost>적합한 솔루션인 것 같습니다. 그러나 php-fpmPHP 처리에 대한 보다 간접적인 액세스를 사용하거나 준비하는 경우 이를 다른 구성 파일( 어쩌면 /etc/php/7.3/fpm/pool.d/www.confDebian 10과 같을까요?) 아니면 완전히 다른 일을 하세요.

관련 정보