一つ与えたい私のサーバーのWebホスティングスペースを私の友人に分離する。私はそうしました:
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名前空間のルートを定義しますが、Webサーバーが実行または通信できる他のプロセス(PHPスクリプトインタプリタなど)。
ApacheプラグインでPHPを使用している場合は、php_admin_value
Apacheの設定が<VirtualHost>
適切なソリューションのようです。ただし、php-fpm
PHP処理へのより間接的なアクセスを使用または準備する場合は、他の設定ファイル(おそらく/etc/php/7.3/fpm/pool.d/www.conf
Debian 10と同じですか?)またはまったく異なることをしてください。