Linux系の作業は、実務での頻度があまり無いため作業する度に手順を忘れてしまう。

今回は、新人の入社に伴い行ったFTP環境の構築手順を、備忘録としてまとめていく。

前提条件

OSは「CentOS7」、Apache、firewalldのインストールは済んでいるものとする。

また、以下の記事の手順で新規ユーザー「username」を追加しているものとする。

https://chusotsu-program.com/linux-useradd

vsftpdをyumでインストールする

まずはyumでvsftpdをインストールする。

yum -y install vsftpd

インストールが環境したら、サービスの起動、自動起動設定を行っておこう。

systemctl start vsftpd
systemctl enable vsftpd

vsftpd.confの設定変更

vsftpd.confファイルを開き、以下のとおり編集を行う。

だが、その前に必ずconfファイルのバックアップを取っておこう。

cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.bk

ファイルのバックアップを取ったら、confファイルを編集していく。

vim vsftpd.conf

# NOに変更(匿名ユーザーを拒否)
anonymous_enable=NO

# コメントイン(アスキーモードでの転送を許可)
ascii_upload_enable=YES
ascii_download_enable=YES

# 追記(タイムゾーン設定)
use_localtime=YES

# 追記(パッシブモードの許可)
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100

とりあえず、ここまでが最低限の設定。

続いてユーザーのパーミッション関連の設定を行っていく。

ホームディレクトリの上位階層にアクセスできないようにする

FTPアカウントを発行する際に気を付けたいのがパーミッション周りの設定。

特に発行したアカウントが、ホームディレクトリの上位階層にアクセスできてしまうと何かと問題が多いので、これを制限しなければならない。

では設定方法について詳しく見ていこう。

ユーザー単位の設定ファイルを作成

confファイルに以下の一行を追記する。

vim vsftpd.conf

# 追記(設定ファイル専用ディレクトリのパスを指定)
user_config_dir=/etc/vsftpd/vsftpd_user_conf

次にmkdirコマンドでディレクトリを作成。

mkdir /etc/vsftpd/vsftpd_user_conf

作成したディレクトリ内に、ユーザー名と同じファイル名で設定ファイルを作成する。

vim vsftpd_user_conf/username

# ホームディレクトリのパスを指定
local_root=/var/www/html/username

そしてApache公開ディレクトリに上記で指定したとおりのディレクトリを作成する。
パーミッションは777にしておこう。

mkdir /var/www/html/username
chmod 777 /var/www/html/username

user_listにユーザーを追加

vim vsftpd.conf

# 追記
userlist_enable=YES
userlist_deny=NO

confファイルに上記2行を追記したら、user_listを開き追加したいユーザー名を入力する。

vim user_list

# 追記
username

上位階層へアクセスできないよう設定

vim vsftpd.conf

# 追記
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES

confファイルでchroot_listを有効化し、以下のとおりchroot_listファイルにユーザー名を入力する。

vim chroot_list

# ユーザー名を入力して保存
username

ここまでの設定が完了したら、vsftpdを再起動しておこう。

systemctl restart vsftpd

firewalldの設定

vsftpdの設定が完了したら、次はファイアウォール(firewalld)の設定を行っていく。

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

これでOK。

あとは好きなFTPクライアントで接続を試してみよう。