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


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

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

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

ステップ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ファイアウォールを有効にしている(デフォルトでは有効にしていない)場合、リモートマシンからFTPサービスへのアクセスを許可するために、FTPデーモンがリッスンしているポート21と20を開く必要があります。新しいファイアウォールルールは次のとおりです。

$ 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 u003d/etc/vsftpd.userlistにリストされているユーザーは、 userlist_enable u003d YES の場合、 userlist_deny u003d YES オプションを使用してログインアクセスを拒否されることに注意してください。

ただし、オプション userlist_deny u003d NO はデフォルト設定の意味をひねり、ユーザー名がuserlist_file u003d/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されたjailに配置されます。これは、FTPセッションのホームディレクトリとしてのみ機能するローカルルートディレクトリです。

次に、以下で説明するように、chrootされたjail(ローカルルート)ディレクトリを設定する方法の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を使用してこの設定を無効にすることができます。

ファイルを保存して閉じます。次に、上記の変更を有効にするには、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 u003d 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に注目してください。