背景
CentOS7サーバーを立てていて、古いシステムを移植しているのですが、FTP接続するのにSCP/SFTPでなくFTPを使わざるを得ない状況になり、急遽やり方を調べてみました。
なお、この記事については、teratailでの質問:「CentOS - CentOS7&Vsftpdで非SSHユーザーをFTPできるようにしたい(96994)」を再構成したものです。
SSH側とvsftpd側の両方で穴を開ける
なお、前提として、追加したユーザー名「foobarbaz」をグループ「web」に所属させています。
SSH(6.6.1p1-35.el7_3)側
定義ファイル「/etc/ssh/sshd_config」を点検して、ファイル末尾に「Match User foobarbaz」行を追加して、「PasswordAuthentication yes」を加えました。 こんな感じです↓
Match User foobarbaz PasswordAuthentication yes
vsftpd(3.0.2-21.el7)側
ユーザー定義用ファイルを置くディレクトリ「userconf」を「/etc/vsftpd」の下に作り:
「# mkdir /etc/vsftpd/userconf」
vsftpdの定義ファイル「/etc/vsftpd/vsftpd.conf」に下記の行を追加し
「user_config_dir=/etc/vsftpd/userconf」
そのディレクトリにfoobarbazというユーザー名そのもののファイル名で定義を
「local_root=/var/www/html/path/to/target/directory」
みたいにしました。
しかし、これだけでは足りず、ファイルを書き込んだり削除できるようにするのと、ルートディレクトリ書き込み権限問題の対策も入れて、最終的にはこうなりました:
write_enable=YES allow_writeable_chroot=YES local_root=/var/www/html/path/to/target/directory
rootディレクトリに書き込めるようにしたものの、そもそもlocal_rootの定義で実ルートディレクトリを操作できるようにしているわけでなく、web公開ディレクトリの奥底深くを指定しているので、rootディレクトリを書き込みできる状態になっていても問題ないのです。
それぞれサービスをリスタート
二つのサービスの定義ファイルをいじったわけなので、それぞれ再起動させます。
「# systemctl restart sshd」
「# systemctl restart vsftpd」
参考記事
ssh の認証方法をユーザごとに設定する - isseium's blog
ログインユーザ毎に個別の設定ファイルを適用する | ごった煮 - tips about programming and building a server
vsftpdの設定で謎のエラーにハマった - TomoProgの技術書
ありがとうございます。 これらの記事のおかげで解決できました。