ウェブサイト検索

CentOS 7 で FTP サーバーをインストール、構成、保護する方法 - [総合ガイド]


FTP (ファイル転送プロトコル) は、特に認証が必要ない (匿名ユーザーを許可する) 場合に、ネットワーク経由でサーバーとクライアントの間でファイルを転送するための伝統的で広く使用されている標準ツールです。サーバーに接続します)。 FTP はユーザーの認証情報とデータを暗号化せずに送信するため、デフォルトでは安全ではないことを理解する必要があります。

このガイドでは、CentOSVSFTPD は「Very Secure FTP Daemon」の略) をインストール、構成、保護する手順について説明します。/RHEL 7 および Fedora ディストリビューション。

このガイドのすべてのコマンドはrootとして実行されることに注意してください。rootアカウントでサーバーを操作していない場合は、sudo コマンドを使用して root 権限を取得してください。

ステップ 1: FTP サーバーのインストール

1. vsftpd サーバーのインストールは簡単です。ターミナルで次のコマンドを実行するだけです。

yum install vsftpd

2. インストールが完了すると、最初はサービスが無効になるため、当面は手動で開始し、次回のシステム起動時にも自動的に開始されるようにする必要があります。

systemctl start vsftpd
systemctl enable vsftpd

3. 次に、外部システムから FTP サービスへのアクセスを許可するには、次のように FTP デーモンがリッスンしているポート 21 を開く必要があります。

firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

ステップ 2: FTP サーバーの構成

4. 次に、FTP サーバーをセットアップして保護するためのいくつかの構成を実行します。まず、元の構成ファイル /etc/vsftpd/vsftpd.conf のバックアップを作成します。 :

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

次に、上記の構成ファイルを開き、次のオプションに対応する値を設定します。

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. ここで、ユーザー リスト ファイル /etc/vsftpd.userlist に基づいてユーザーへの FTP アクセスを許可または拒否するように FTP を設定します。

デフォルトでは、userlist_file=/etc/vsftpd.userlist にリストされているユーザーは、userlist_deny オプションが YES に設定されている場合、ログイン アクセスを拒否されます。 userlist_enable= はい。

ただし、userlist_deny=NO は設定を変更します。つまり、userlist_file=/etc/vsftpd.userlist に明示的にリストされているユーザーのみがログインを許可されます。

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

それだけではありません。ユーザーが FTP サーバーにログインすると、chroot されたjail に配置されます。これは、FTP セッションのみのホーム ディレクトリとして機能するローカル ルート ディレクトリです。

次に、以下で説明するように、FTP ユーザーを FTP ユーザーのホーム ディレクトリ (ローカル ルート) ディレクトリに chroot する方法について考えられる 2 つのシナリオを見ていきます。

6. 次に、次の 2 つのオプションを追加して、FTP ユーザーをホーム ディレクトリに制限します。

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES は、ローカル ユーザーがデフォルト設定でログイン後のホーム ディレクトリである chroot ジェイルに配置されることを意味します。

また、デフォルトでは、vsftpd はセキュリティ上の理由から chrootjail ディレクトリへの書き込みを許可しませんが、オプション allow_writeable_chroot=YES を使用してこの設定をオーバーライドできます。

ファイルを保存して閉じます。

SELinux による FTP サーバーの保護

7. 次に、FTP がユーザーのホーム ディレクトリ内のファイルを読み取れるように、以下の SELinux ブール値を設定しましょう。これは最初に次のコマンドを使用して行われたことに注意してください。

setsebool -P ftp_home_dir on

ただし、このバグレポート https://bugzilla.redhat.com/show_bug.cgi?id=1097775 で説明されているように、ftp_home_dir ディレクティブはデフォルトで無効になっています。

次に、semanage コマンドを使用して、FTP がユーザーのホーム ディレクトリの読み取り/書き込みを許可する SELinux ルールを設定します。

semanage boolean -m ftpd_full_access --on

この時点で、これまでに行ったすべての変更を有効にするために vsftpd を再起動する必要があります。

systemctl restart vsftpd

ステップ 4: FTP サーバーのテスト

8. 次に、useradd コマンドを使用して FTP ユーザーを作成して、FTP サーバーをテストします。

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

その後、次のように echo コマンドを使用して、ユーザー ravi をファイル /etc/vsftpd.userlist に追加する必要があります。

echo "ravi" | tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

9. 次に、上記の設定が正しく機能するかどうかをテストします。まずは匿名ログインをテストしてみましょう。以下のスクリーンショットから、匿名ログインが許可されていないことがわかります。

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. ファイル /etc/vsftpd.userlist にリストされていないユーザーにログイン権限が付与されるかどうかもテストしてみましょう。スクリーン ショットの場合はそうではありません。下に:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. 次に、ファイル /etc/vsftpd.userlist にリストされているユーザーがログイン後に実際にホーム ディレクトリに配置されているかどうかを最終確認します。

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

自分が何をしようとしているのかを正確に理解している場合にのみ、このオプションを有効にしてください。これらのセキュリティへの影響は vsftpd に固有のものではなく、ローカル ユーザーを chroot ジェイルに入れることを提案するすべての FTP デーモンにも適用されることに注意することが重要です。

したがって、次のセクションでは、書き込み不可能な別のローカル ルート ディレクトリを設定するより安全な方法を見ていきます。

ステップ 5: 異なる FTP ユーザーのホーム ディレクトリを構成する

12. vsftpd 構成ファイルを再度開き、以下の安全でないオプションをコメント化することから始めます。

#allow_writeable_chroot=YES

次に、ユーザーの代替ローカル ルート ディレクトリ (ravi、実際のものはおそらく異なる) を作成し、このディレクトリに対するすべてのユーザーの書き込み権限を削除します。

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

13. 次に、ユーザーが自分のファイルを保存するディレクトリをローカル ルートの下に作成します。

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/ftp/files/

次に、vsftpd 構成ファイルに次のオプションを次の値で追加/変更します。

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

ファイルを保存して閉じます。もう一度、新しい設定でサービスを再起動しましょう。

systemctl restart vsftpd

14. ここでもう一度最終テストを実行し、ユーザーのローカル ルート ディレクトリがホーム ディレクトリに作成した FTP ディレクトリであることを確認します。

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

それでおしまい!この記事では、CentOS 7 で FTP サーバーをインストール、構成、保護する方法について説明しました。このガイドに関して返信したり、このトピックに関する有用な情報を共有したりするには、以下のコメント セクションを使用してください。

推奨事項: RHEL/CentOS 7 に ProFTPD サーバーをインストールする

次の記事では、CentOS 7 で SSL/TLS 接続を使用して FTP サーバーを保護する方法も説明します。それまでは、TecMint に接続したままにしておきます。