vsftpdの設定

家庭内サーバのCentOSにFTP(File Transfer Protocol:ファイル転送プロトコル)を使用するサーバをインストールしました。今回、記事にする理由はインターネットで検索したサイトで説明している内容では「ホームディレクトリより上を参照禁止にする 」ことができないためです。備忘録を兼ねています。

目次

vsftpdの設定

vsftpdのインストール
次のコマンドでvsftpdをインストールします。

# yum -y install vsftpd

バージョンは以下の通りです。

# vsftpd -v
vsftpd: version 3.0.2

以下のものがインストールされます。

# rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-3.0.2
/usr/share/doc/vsftpd-3.0.2/AUDIT
/usr/share/doc/vsftpd-3.0.2/BENCHMARKS
/usr/share/doc/vsftpd-3.0.2/BUGS
/usr/share/doc/vsftpd-3.0.2/COPYING
/usr/share/doc/vsftpd-3.0.2/Changelog
/usr/share/doc/vsftpd-3.0.2/EXAMPLE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/hosts.allow
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README
/usr/share/doc/vsftpd-3.0.2/FAQ
/usr/share/doc/vsftpd-3.0.2/INSTALL
/usr/share/doc/vsftpd-3.0.2/LICENSE
/usr/share/doc/vsftpd-3.0.2/README
/usr/share/doc/vsftpd-3.0.2/README.security
/usr/share/doc/vsftpd-3.0.2/REWARD
/usr/share/doc/vsftpd-3.0.2/SECURITY
/usr/share/doc/vsftpd-3.0.2/SECURITY/DESIGN
/usr/share/doc/vsftpd-3.0.2/SECURITY/IMPLEMENTATION
/usr/share/doc/vsftpd-3.0.2/SECURITY/OVERVIEW
/usr/share/doc/vsftpd-3.0.2/SECURITY/TRUST
/usr/share/doc/vsftpd-3.0.2/SIZE
/usr/share/doc/vsftpd-3.0.2/SPEED
/usr/share/doc/vsftpd-3.0.2/TODO
/usr/share/doc/vsftpd-3.0.2/TUNING
/usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub

vsftpdの設定ファイルは「/etc/vsftpd」以下にあります。

# ls -la
合計 40
drwxr-xr-x.   3 root root   124  2月  3 14:57 .
drwxr-xr-x. 166 root root 12288  2月  3 15:48 ..
-rw-------.   1 root root     5  5月  1  2020 chroot_list
-rw-------.   1 root root   125  6月 10  2021 ftpusers
drwxr-xr-x.   2 root root    18  2月  3 13:26 user_conf
-rw-------.   1 root root   287  5月  2  2020 user_list
-rw-------.   1 root root  5426  2月  3 14:57 vsftpd.conf
-rwxr--r--.   1 root root   338  6月 10  2021 vsftpd_conf_migrate.sh

設定はvsftpd.confに行います。

anonymous_enable=No
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=NO
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=172.16.1.3
pasv_min_port=60001
pasv_max_port=60010
use_localtime=YES
force_dot_files=YES
user_config_dir=/etc/vsftpd/user_conf
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES
allow_writeable_chroot=YES

重要な箇所だけ解説

匿名(anonymous)ログインの拒否
anonymous_enable=No
anonymousftpのユーザー名でログインできないようにします。

ローカルユーザのログイン許可
local_enable=YES
有効になると、ローカルユーザーがシステムにログイン可能となります。

ユーザ制限
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

userlist_enableが有効になるとuserlist_fileに指定されたファイル内にリストされたユーザはアクセスを拒否されます。

userlist_enableと共に使用してuserlist_denyがNOに設定されているとuserlist_fileに指定されたファイル内にリストされたユーザ以外はアクセスを拒否されます。
上の例ではuserlist_fileにリストされたユーザのみアクセス可能です。

chroot jailによる封じ込め
この箇所が不正確なサイトが多かったです。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
user_config_dir=/etc/vsftpd/user_conf

chroot_local_user=YESはあくまでユーザがログイン後のホームディレクトリにルートディレクトリが変更されますがその上に移動できないわけではありません。
chroot_list_enable=YES,chroot_list_file=/etc/vsftpd/user_confはセットで使用、chroot_local_user=YESの場合はchroot_list_fileのファイル内にはユーザを登録しないことでルートディレクトリより上に移動できなくなります。chroot_local_user=NOの場合はchroot_list_fileにユーザを登録することでそのユーザはルートディレクトリより上に移動できなくなります。

chroot_list_fileに指定されたファイルが存在しない場合、ログインが拒否されます。ユーザ名を登録しなくても空のファイルを作成する必要があります。

chroot_local_userが有効になっていると、ログイン後にローカルユーザーのホームディレクトリにルートディレクトリが変更されます。user_config_dirはユーザー固有の設定が格納されている設定ファイルを格納するディレクトリへのパスを指定します。ファイル名がユーザ名のファイルを作成し、個別の設定を記述します。
# cat user_conf/user1
local_root=/home/samba/user1

この例では、ユーザ名:user1のログイン後のディレクトリを指定しています。

この設定はあくまでもログインしたときのディレクトリを指定しているだけです。
ホームディレクトリより上に移動することが可能です。

以下のコマンドでvsftpdデーモンを有効化します。

# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

以下のコマンドを実行して、vsftpdデーモンを起動します。

# systemctl start vsftpd

以降、設定ファイルを更新した場合はvsftpdを再起動します。

# systemctl restart vsftpd

以上でvsftpdのインストールは終了です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大阪府門真市に生まれ、高校卒業まで京都府福知山市で育ち、大学は工学部電子工学科を卒業。半導体設計会社に勤務ののちインフラエンジニアとして監視基盤の運用設計業務に就く。現在は都内の施設に勤務。横浜在住。人の役に立てることができればいいなと日々思っています。

目次