ここではvsftpd (Very Secure FTP Daemon) サーバーをLinuxにインストールする手順を説明します。
vsftpdプログラムのインストール
Linux 9環境にFTPサービスをインストールするために以下のコマンドを実行します。
[root@svr ~]# yum install vsftpd
パッケージがインストールされたかとうかは以下のコマンドで確認できます。
[root@svr ~]# yum search vsftpd
vsftpdサービスの登録
以下のコマンドでインストールしたvsftpdのサービスを活性化します。
[root@svr ~]# systemctl start vsftpd.service
[root@svr ~]# systemctl enable vsftpd.service
vsftpd設定変更
以下のようにvsftpd.confファイルを修正します。
[root@svr ~]# vi /etc/vsftpd/vsftpd.conf
…
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
…
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
…
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
…
# with the listen_ipv6 directive.
listen=NO
…
# Make sure, that one of the listen options is commented !!
listen_ipv6=YES
なお、vsftpd.confの最後尾に以下のオプションを追加します。
pam_service_name=vsftpd
local_root=public_html
use_localtime=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
allow_writeable_chroot=YES
chroot環境
/etc/vsftpd/chroot_list は、vsftpd (Very Secure FTP Daemon) サーバーの設定ファイルの一つで、FTPユーザーのchroot設定を管理します。chrootは、特定のユーザーがログインした際にそのユーザーのルートディレクトリを変更する機能で、ユーザーが指定されたディレクトリ外にアクセスすることを防ぎ、セキュリティを向上させます。
以下のchroot_listファイルにユーザー名を追加します。
[root@svr ~]# vi /etc/vsftpd/chroot_list
user01
user02
user03
chroot環境とvsftpd.conf設定との関係
このリスト(/etc/vsftpd/chroot_list)の動作「chrootする/chrootしない」はvsftpd.conf設定ファイルの設定によって異なります。
- chroot_local_user=YES
- 全てのローカルユーザーをchroot環境に配置します。ただし、chroot_list にリストされているユーザーはchrootしないとして扱われます。
- chroot_list_enable=YES
- chroot_list ファイルを有効にします。
- chroot_list_file=/etc/vsftpd/chroot_list
- chroot_listファイルのパスを指定します。通常、このファイルは /etc/vsftpd/chroot_list です。
リストにあるユーザーはchrootしない
# すべてのローカルユーザーをchrootするが、リストにあるユーザーはchrootしない
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
リストにあるユーザーはchrootする
# すべてのローカルユーザーをchrootしないが、リストにあるユーザーはchrootする
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
FTPアクセス禁止
/etc/vsftpd/ftpusers は、vsftpd (Very Secure FTP Daemon) サーバーの設定ファイルの一つであり、FTPアクセスを禁止するユーザーリストを管理します。このファイルに記載されたユーザーは、FTPサーバーにログインすることができません。
以下のftpusersファイルに接続しようとするユーザーは削除、または#コメントアウトします。
[root@svr ~]# vi /etc/vsftpd/ftpusers
#root
bin
daemon
#admin
adm
nobody
編集後は、vsftpd サービスを再起動することで変更を反映させることができます
[root@svr ~]# systemctl restart vsftpd
SELINUX=permissive に設定する理由
トラブルシューティング
- SELinuxが enforcing モードの場合、vsftpd が正しく動作しないことがあります。これは、SELinuxポリシーがvsftpd のファイルアクセスやネットワーク通信をブロックすることが原因です。
- permissive モードにすると、ポリシー違反がログに記録されるだけで操作は拒否されません。これにより、何が問題になっているのかを調査しやすくなります。
設定確認
- permissive モードでvsftpd を実行することで、SELinuxポリシーの影響を受けずに設定を確認できます。このモードで問題が発生しない場合、SELinuxポリシーが原因であることが明確になります。
ポリシーの調整
- permissive モードでのログを元に、必要なSELinuxポリシーの調整を行うことができます。適切なポリシーが設定された後に enforcing モードに戻すことができます。
以下のconfigファイルにSELINUXオプションを修正します。
[root@svr ~]# vi /etc/selinux/config
SELINUX=permissive
変更を適用するには、システムを再起動する必要あります:
[root@svr ~]# reboot
または、システムを再起動せずに現在のセッションで一時的に permissive モードに変更するには、以下のコマンドを使用します
[root@svr ~]# setenforce 0
ファイヤーウォール設定
上の設定は終わってもファイヤーウォールにより、接続が制限されます。次のコマンドでftpサービスを許可します。
[root@svr ~]# firewall-cmd --permanent --zone=public --add-service=ftp
[root@svr ~]# firewall-cmd --reload
–permanentを入れるとサービスを再起動しても変更事項が保存されます。入れないと再起動時、修正前の設定に戻ります。