하나 주고 싶다내 서버의 웹 호스팅 공간을 내 친구에게 격리. 나는 그랬다:
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>
작동 방식: friend
SFTP는 Jailroot 환경에서 액세스할 수 있으며/sftp/friend
SFTP를 종료할 수 없습니다.. 이것은 좋다.
그러나 나는 그가 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
sshd
ChrootDirectory
SSH 로그인 및 SFTP/scp 파일 전송 에만 적용됩니다.
Apache의 DocumentRoot는 다릅니다. HTTP 요청에 응답하는 Apache 서비스 파일과 관련되어 URI 네임스페이스의 루트를 정의하지만 웹 서버가 실행하거나 통신할 수 있는 다른 프로세스(예: PHP 스크립트 인터프리터.
Apache 플러그인과 함께 PHP를 사용하는 경우 php_admin_value
Apache의 구성이 <VirtualHost>
적합한 솔루션인 것 같습니다. 그러나 php-fpm
PHP 처리에 대한 보다 간접적인 액세스를 사용하거나 준비하는 경우 이를 다른 구성 파일( 어쩌면 /etc/php/7.3/fpm/pool.d/www.conf
Debian 10과 같을까요?) 아니면 완전히 다른 일을 하세요.