Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
16.2.2. vsftpd サーバー
Very Secure FTP Daemon (vsftpd
) は、高速で安定性があり、また重要な点として安全性を確保するため、土台から設計されています。vsftpd
は、多数の接続を効率的かつ安全に処理できるため、Red Hat Enterprise Linux とともに配布されるのはスタンドアロン FTP
サーバーのみです。
vsftpd
で使用されるセキュリティーモデルには、以下に挙げる 3 つの主要な側面があります。
- 特権プロセスと非特権プロセスの確固たる分離: 別個のプロセスが異なるタスクを処理します。各プロセスは、そのタスクに必要な最低限の権限で稼働します。
-
高い権限を必要とするタスクを、必要最小限の権限を伴うプロセスで処理:
libcap
ライブラリー内にある互換性を利用して、通常は完全な root 権限を必要とするタスクを、権限が低いプロセスでより安全に実行できます。 -
ほとんどのプロセスを
chroot
jail で実行: 可能な場合は常に、プロセスは、ルートディレクトリーを共有ディレクトリーに変更します。すると、このディレクトリーは、chroot
jail と見なされます。たとえば、/var/ftp/
ディレクトリーが主要な共有ディレクトリーの場合、vsftpd
は/var/ftp/
を新しいルートディレクトリー (/
) に再割り当てします。これにより、新たな root ディレクトリー下に格納されていないディレクトリーに対する、ハッカーの潜在的な悪質行為を行うことができなくなります。
これらのセキュリティープラクティスを使用すると、vsftpd
によるリクエスト対応方法に以下のような影響があります。
-
親プロセスは、必要最小限の権限で稼働: 親プロセスは、リスクレベルを最低限に抑えるために必要とされる権限のレベルを動的に算出します。子プロセスは、
FTP
クライアントとの直接的なインタラクションを処理し、可能な限り権限なしに近い形で稼働します。 -
高い権限を必要とするオペレーションはすべて、小さな親プロセスによって処理: Apache
HTTP
Server の場合とほぼ同様に、vsftpd
は権限のない子プロセスを起動し、着信接続を処理します。これにより、権限のある親プロセスを最小限に抑えられ、比較的少ないタスクを処理することになります。 - 親プロセスは、権限のない子プロセスからのリクエストはどれも信頼しない: 子プロセスとの通信はソケット上で受信し、子プロセスからの情報の有効性は動作を実施する前に確認されます。
-
FTP
クライアントとのインタラクションの大半は、chroot
jail 内の権限のない子プロセスによって処理: これらの子プロセスには権限がなく、共有ディレクトリーへのアクセスしかないため、プロセスがクラッシュした際に攻撃者がアクセスできるのは共有ファイルのみです。
16.2.2.1. vsftpd の起動と停止
現行のセッションで vsftpd
サービスを起動するには、シェルプロンプトで root
として以下を入力します。
~]# systemctl start vsftpd.service
現在のセッションでサービスを停止するには、root
で以下を入力します。
~]# systemctl stop vsftpd.service
vsftpd
サービスを再起動するには、root
で以下のコマンドを実行します。
~]# systemctl restart vsftpd.service
このコマンドは停止し、即座に vsftpd
サービスを起動します。これは、この FTP
サーバーの設定ファイルを編集した後に設定変更を行う最も効率的な方法です。では、以下のコマンドを使用して、すでに実行している場合にのみ、vsftpd
サービスを再起動することができます。
~]# systemctl try-restart vsftpd.service
デフォルトでは、vsftpd
サービスがブート時に自動的に起動することは ありません。ブート時に vsftpd
サービスが起動するようにするには、root
でシェルプロンプトに以下を入力します。
~]# systemctl enable vsftpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Red Hat Enterprise Linux 7 でシステムサービスを管理する方法は、10章systemd によるサービス管理 を参照してください。