ウェブサイト検索

Ubuntu に FTP サーバーをインストールして構成する方法


FTP (ファイル転送プロトコル) は比較的古く、最もよく使用されている標準ネットワーク プロトコルで、ネットワークを介して 2 台のコンピュータ間でファイルをアップロード/ダウンロードするために使用されます。ただし、FTPは、ユーザーの資格情報(ユーザー名とパスワード)とともに暗号化せずにデータを送信するため、元の状態では安全ではありません。

警告: FTP を使用する予定の場合は、SSL/TLS を使用して FTP 接続を構成することを検討してください (後で説明します)。次の記事)。それ以外の場合は、SFTP などの安全な FTP を使用することをお勧めします。

推奨読書: CentOS 7 に FTP サーバーをインストールして保護する方法

このチュートリアルでは、FTP サーバー (VSFTPD 完全な「非常に安全な FTP デーモン」) をインストール、構成、保護する方法を説明します。 FTP の脆弱性に対する強力なセキュリティを備えたUbuntu

ステップ 1: Ubuntu に VsFTP サーバーをインストールする

1. まず、システム パッケージ ソース リストを更新し、次のように VSFTPD バイナリ パッケージをインストールする必要があります。

sudo apt-get update
sudo apt-get install vsftpd

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

------------- On SystemD ------------- 
systemctl start vsftpd
systemctl enable vsftpd

------------- On SysVInit ------------- 
service vsftpd start
chkconfig --level 35 vsftpd on

3. 次に、サーバー上で UFW ファイアウォールが有効になっている場合 (デフォルトでは有効になっていません)、ポート 2120 を開く必要があります。リモート マシンから FTP サービスへのアクセスを許可するために、FTP デーモンがリッスンしている場所で、次のように新しいファイアウォール ルールを追加します。

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw status

ステップ 2: Ubuntu での VsFTP サーバーの構成とセキュリティ保護

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

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

次に、vsftpd 構成ファイルを開いてみましょう。

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

次の値を使用して次のオプションを追加/変更します。

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 アクセスを許可または拒否するように VSFTPD を構成します。

デフォルトでは、userlist_file=/etc/vsftpd.userlist にリストされているユーザーは、userlist_enable=YES の場合、userlist_deny=YES オプションを使用してログイン アクセスを拒否されることに注意してください。 。

ただし、オプション userlist_deny=NO はデフォルト設定の意味をねじ曲げるため、ユーザー名が userlist_file=/etc/vsftpd.userlist に明示的にリストされているユーザーのみに許可されます。 FTPサーバーにログインします。

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 セッションのホーム ディレクトリとして機能するローカル ルート ディレクトリです。のみ。

次に、以下で説明するように、chrooted ジェイル (ローカル ルート) ディレクトリを設定する方法について考えられる 2 つのシナリオを見ていきます。

6. この時点で、FTP ユーザーをホーム ディレクトリに制限するために、次の 2 つのオプションを追加/変更/コメント解除しましょう。

chroot_local_user=YES
allow_writeable_chroot=YES

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

また、VSFTPD はセキュリティ上の理由から、デフォルトでは chrootjail ディレクトリへの書き込みを許可していませんが、 オプション allow_writeable_chroot=YES を使用してこの設定を無効にできることも理解する必要があります。

ファイルを保存して閉じます。次に、上記の変更を有効にするために、VSFTPD サービスを再起動する必要があります。

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

ステップ 3: Ubuntu で VsFTP サーバーをテストする

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

sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
sudo passwd aaronkilik

次に、以下のように echo コマンドと tee コマンドを使用して、 ファイル /etc/vsftpd.userlist にユーザー aaronkilik を明示的にリストする必要があります。

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

8. 次に、上記の構成が必要に応じて機能するかどうかをテストします。まず匿名ログインをテストします。以下の出力から、FTP サーバーでは匿名ログインが許可されていないことが明確にわかります。

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

9. 次に、ファイル /etc/vsftpd.userlist にリストされていないユーザーにログイン権限が付与されるかどうかをテストします。これは、次の出力からは当てはまりません。 :

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

10. 次に、ファイル /etc/vsftpd.userlist にリストされているユーザーが実際にホーム ディレクトリに配置されるかどうかを判断するための最終テストを実行します。ログイン。これは、以下の出力からも当てはまります。

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

警告: オプション allow_writeable_chroot=YES を設定すると、特にユーザーがアップロード権限を持っている場合、セキュリティに影響を与える可能性があります。さらに言えば、シェルへのアクセスです。自分が何をしているのかを正確に理解している場合にのみ使用してください。

これらのセキュリティへの影響は VSFTPD に固有のものではなく、ローカル ユーザーを chroot ジェイルに入れることを提案する他のすべての FTP デーモンにも影響を与える可能性があることに注意してください。

このため、以下のセクションでは、ユーザーに対して別の書き込み不可のローカル ルート ディレクトリを設定する、より安全な方法について説明します。

ステップ 4: Ubuntu で FTP ユーザー ホーム ディレクトリを構成する

11. 次に、VSFTPD 構成ファイルをもう一度開きます。

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

次に示すように、# 文字を使用して安全でないオプションをコメント アウトします。

#allow_writeable_chroot=YES

次に、ユーザーの代替ローカル ルート ディレクトリ (aaronkilik、あなたのディレクトリは同じではない可能性があります) を作成し、このディレクトリに対する他のすべてのユーザーの書き込み権限を無効にして、必要な権限を設定します。

sudo mkdir /home/aaronkilik/ftp
sudo chown nobody:nogroup /home/aaronkilik/ftp
sudo chmod a-w /home/aaronkilik/ftp

12. 次に、適切な権限を持つローカル ルートの下に、ユーザーがファイルを保存するディレクトリを作成します。

sudo mkdir /home/aaronkilik/ftp/files
sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
sudo chmod -R 0770 /home/aaronkilik/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

ファイルを保存して閉じます。そして、最新の設定で VSFTPD サービスを再起動します。

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

13. 次に、最終チェックを実行して、ユーザーのローカル ルート ディレクトリがホーム ディレクトリに作成した FTP ディレクトリであることを確認しましょう。

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

それでおしまい!以下のコメント フォームを介してこのガイドに関するご意見を共有していただくか、このトピックに関する重要な情報を提供してください。

最後になりましたが、次の記事をお見逃しなく。そこでは、Ubuntu 16.04/16.10 で SSL/TLS 接続を使用して FTP サーバーを保護する方法について説明します。それまでは、常に TecMint に注目してください。