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


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

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

このガイドのすべてのコマンドは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 u003d/etc/vsftpd.userlist にリストされているユーザーは、userlist_enable u003d YESの場合、userlist_denyオプションをYESに設定してログインアクセスを拒否されます。

ただし、userlist_deny u003d NOは設定を変更します。つまり、userlist_file u003d/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された刑務所に入れられます。これは、FTPセッションのホームディレクトリとしてのみ機能するローカルルートディレクトリです。

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

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

chroot_local_user=YES
allow_writeable_chroot=YES

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

また、デフォルトでは、vsftpdはセキュリティ上の理由からchroot jailディレクトリを書き込み可能にすることを許可していませんが、オプションallow_writeable_chroot u003d YESを使用してこの設定を上書きできます。

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

SELinuxでFTPサーバーを保護する

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

# setsebool -P ftp_home_dir on

ただし、このバグレポート(https://bugzilla.redhat.com/show_bug.cgi?idu003d1097775)で説明されているように、 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サーバーをインストール、構成、および保護する方法について説明しました。以下のコメントセクションを使用して、このガイドに関する返信を送信し、このトピックに関する有用な情報を共有してください。

次の記事では、CentOS7でSSL/TLS接続を使用してFTPサーバーを保護する方法についても説明します。それまでは、TecMintに接続したままにしてください。