RockyLinuxへのFTPサーバ(vsftpd)のインストールと基本設定

Rocky Linux

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.conf
anonymous_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=YES
    userlist_deny=NO
    userlist_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.confuser_config_dirを追加します。

user_config_dir=/etc/vsftpd/user_conf

user_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=NO
    xferlog_enable=YES
    xferlog_std_format=YES
    vsftpd_log_file=/var/log/vsftpd.log

ファイル・コマンド関連(13~21行目)

  • 新規ファイル作成(アップロード)時のumask値
    local_umask=022
  • アスキーモードでの転送許可
    ascii_upload_enable=YES
    ascii_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=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

    allow_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=NO
    listen_ipv6=YES

パッシブモード関連(31~35行目)

  • パッシブモード有効
    pasv_enable=YES
  • 制御コネクションとデータコネクションの同一IPからの接続チェック
    pasv_promiscuous=NO
  • 制御コネクションで使用するポート
    listen_port=61000
  • データコネクションで使用するポート範囲
    pasv_min_port=61010
    pasv_max_port=61015

ログイン許可ユーザの設定

/etc/vsftpd/user_listは、ログインを許可するユーザのみにします。

/etc/vsftpd/user_list
rocky

また、/etc/vsftpd/ftpusersに書かれているユーザは、ログイン拒否されてしまうので、ログインを許可するユーザが/etc/vsftpd/ftpusersにいないことを確認します。

/etc/vsftpd/ftpusers
root
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サーバに接続することができます。

コメント

タイトルとURLをコピーしました