RHEL系のディストリビューションであるRockyLinuxにFTPサーバー(vsftpd)をインストールして、基本的な設定をします。
環境
# cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)
#
# vsftpd -version
vsftpd: version 3.0.3
#LinuxのディストリビューションはRocky Linux 8.5、vsftpdのバージョンは3.0.3です。
インストール
dnfコマンドでvsftpdをインストールします。
# dnf -y install vsftpd# dnf -y install vsftpd
Last metadata expiration check: 21:07:12 ago on Wed Feb 23 16:54:48 2022.
Dependencies resolved.
=================================================================================================
Package Architecture Version Repository Size
=================================================================================================
Installing:
vsftpd x86_64 3.0.3-34.el8 appstream 180 k
Installing dependencies:
logrotate x86_64 3.14.0-4.el8 baseos 85 k
Transaction Summary
=================================================================================================
Install 2 Packages
Total download size: 265 k
Installed size: 490 k
Downloading Packages:
(1/2): logrotate-3.14.0-4.el8.x86_64.rpm 373 kB/s | 85 kB 00:00
(2/2): vsftpd-3.0.3-34.el8.x86_64.rpm 567 kB/s | 180 kB 00:00
-------------------------------------------------------------------------------------------------
Total 186 kB/s | 265 kB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: logrotate-3.14.0-4.el8.x86_64 1/2
Installing : logrotate-3.14.0-4.el8.x86_64 1/2
Installing : vsftpd-3.0.3-34.el8.x86_64 2/2
Running scriptlet: vsftpd-3.0.3-34.el8.x86_64 2/2
Verifying : vsftpd-3.0.3-34.el8.x86_64 1/2
Verifying : logrotate-3.14.0-4.el8.x86_64 2/2
Installed:
logrotate-3.14.0-4.el8.x86_64 vsftpd-3.0.3-34.el8.x86_64
Complete!
#設定
vsftpdの設定ファイルは/etc/vsftpd/vsftpd.confです。
今回は以下のとおり設定しました。
/etc/vsftpd/vsftpd.confanonymous_enable=NO
local_enable=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
pam_service_name=vsftpd
syslog_enable=NO
xferlog_enable=YES
xferlog_std_format=YES
vsftpd_log_file=/var/log/vsftpd.log
local_umask=022
ascii_upload_enable=YES
ascii_download_enable=YES
write_enable=YES
chmod_enable=YES
force_dot_files=YES
ls_recurse_enable=YES
dirmessage_enable=NO
use_localtime=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=61010
pasv_max_port=61015
listen_port=61000
ログイン関連(1~6行目)
- 匿名ユーザのログイン禁止
anonymous_enable=NO - ローカルユーザのログイン許可
local_enable=YES - ログイン許可されたユーザのみ接続させる
userlist_enable=YESuserlist_deny=NOuserlist_file=/etc/vsftpd/user_list
userlist_denyの設定でuserlist_fileの意味が変わります。
userlist_deny=YES
→userlist_fileに書かれたユーザをログイン拒否userlist_deny=NO
→userlist_fileに書かれたユーザをログイン許可
ここでは、userlist_deny=NOと設定したので、userlist_fileに書かれたユーザのみログインすることができます。
- PAMサービス名の指定
pam_service_name=vsftpd
PAMとは、ユーザー認証のためモジュールで、/etc/pam.d/vsftpdにユーザ認証に関する設定ファイルがあります。
まず、/etc/vsftpd/vsftpd.confにuser_config_dirを追加します。
user_config_dir=/etc/vsftpd/user_confuser_config_dirで指定したディレクトリを作成します。
# mkdir /etc/vsftpd/user_conf
#そのディレクトリの中に、ユーザ名と同じファイルを作成して、そのファイルの中でlocal_rootを指定します。
以下はユーザrockyのログインディレクトリを/var/www/rockyに変更する例です。
# vi /etc/vsftpd/user_conf/rocky
#
# cat /etc/vsftpd/user_conf/rocky
local_root=/var/www/rocky
#ログ出力関連(8~11行目)
- ログファイルをxferlogフォーマットで
/var/log/vsftpd.logに出力するsyslog_enable=NOxferlog_enable=YESxferlog_std_format=YESvsftpd_log_file=/var/log/vsftpd.log
ファイル・コマンド関連(13~21行目)
- 新規ファイル作成(アップロード)時のumask値
local_umask=022 - アスキーモードでの転送許可
ascii_upload_enable=YESascii_download_enable=YES - ファイルを変更するような FTP コマンドを許可
write_enable=YES - パーミッション変更コマンドを許可
chmod_enable=YES - 隠しファイル(ドットファイル)を表示させる
force_dot_files=YES - ディレクトリを再帰的に表示(
ls -Rの使用を許可)ls_recurse_enable=YES - メッセージファイルを表示しない
dirmessage_enable=NO - ローカルタイムを使用
use_localtime=YES
ユーザのディレクトリ移動関連(23~26行目)
- 許可されたユーザ以外のホームディレクトリより上層へのアクセス禁止
chroot_local_user=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_listallow_writeable_chroot=YES
chroot_local_user=YESとすることで、ユーザのログインディレクトリ(ホームディレクトリ)が、そのユーザのルートディレクトリに変更(chroot)されます。このため、ユーザはログインディレクトリ(ホームディレクトリ)より上層へ移動することができなくなります。
ただし、ユーザのホームディレクトリには、通常そのユーザの書き込み権限があるので、chrootすることができません。
(セキュリティー上、書き込み権限がないディレクトリへのchrootのみ許可されています)
# ls -l /home
total 0
drwx------. 2 rocky rocky 102 Feb 25 14:58 rocky
#そこで必要となるのが、allow_writeable_chrootです。allow_writeable_chroot=YESとすることで、そのユーザの書き込み権限があってもchrootすることが可能になります。
chroot_list_enable=YESとした場合、chroot_list_fileに書かれたユーザはchroot対象外となります。このため、ユーザのログインディレクトリ(ホームディレクトリ)より上層に移動することができるようになります。
また、chroot対象外のユーザがいない場合でも、空のchroot_list_fileを作成する必要があります。
ネットワーク関連(28,29行目)
- IPv4とIPv6での接続許可
listen=NOlisten_ipv6=YES
パッシブモード関連(31~35行目)
- パッシブモード有効
pasv_enable=YES - 制御コネクションとデータコネクションの同一IPからの接続チェック
pasv_promiscuous=NO - 制御コネクションで使用するポート
listen_port=61000 - データコネクションで使用するポート範囲
pasv_min_port=61010pasv_max_port=61015
ログイン許可ユーザの設定
/etc/vsftpd/user_listは、ログインを許可するユーザのみにします。
/etc/vsftpd/user_listrocky
また、/etc/vsftpd/ftpusersに書かれているユーザは、ログイン拒否されてしまうので、ログインを許可するユーザが/etc/vsftpd/ftpusersにいないことを確認します。
/etc/vsftpd/ftpusersroot
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
ディレクトリ移動許可ユーザの設定
/etc/vsftpd/chroot_listにホームディレクトリより上層への移動を許可するユーザを書きます。
今回は誰も許可しないため、空ファイルを作成しました。
# touch /etc/vsftpd/chroot_list
#
# cat /etc/vsftpd/chroot_list
#サービス(自動)起動設定
systemctlコマンドでvsftpdサービスを起動します。
(再起動時も自動的に起動するようにします)
# systemctl enable vsftpd --now# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
#
# systemctl enable vsftpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
#
# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2022-02-24 15:09:19 JST; 4s ago
Process: 4182 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCES>
Main PID: 4183 (vsftpd)
Tasks: 1 (limit: 23691)
Memory: 572.0K
CGroup: /system.slice/vsftpd.service
└─4183 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Feb 24 15:09:19 rockylinux systemd[1]: Starting Vsftpd ftp daemon...
Feb 24 15:09:19 rockylinux systemd[1]: Started Vsftpd ftp daemon.
#Firewall設定
パッシブモードで接続するため、firewall-cmdコマンドでファイアウォールのポートを開放します。
- 制御コネクション:61000番ポート
- データコネクション:61010番ポート~61015番ポート
# firewall-cmd --add-port=61000/tcp --permanent
# firewall-cmd --add-port=61010-61015/tcp --permanent
# firewall-cmd --reload# firewall-cmd --list-port
#
# firewall-cmd --add-port=61000/tcp --permanent
success
# firewall-cmd --add-port=61010-61015/tcp --permanent
success
# firewall-cmd --reload
success
#
# firewall-cmd --list-port
61000/tcp 61010-61015/tcp
#以上で、vsftpdのインストールと基本的な設定が完了です。
接続確認
WindowsのFTPクライアントソフトであるFFFTPで接続確認します。
「基本」タブの「ホスト名(アドレス)(N)」にFTPサーバのIPアドレス、「ユーザー名(U)」にユーザ名、「パスワード/パスフレーズ(P)」にパスワードを指定します。

「拡張」タブの「PASVモードを使う(V)」にチェック、「ポート番号(X)」を61000に変更して、「OK」ボタンをクリックします。

接続ボタンを押すとFTPサーバに接続することができます。





コメント