質問: 前回の質問の続きになります:「CentOS - CentOS7&Vsftpdでweb更新専用ユーザーを作りたい(74769)|teratail」 【目的】 CentOS7サーバーへの接続には基本的にSSH必須にしていますが、 特定目的のために特定ユーザーだけは対象外にしたいです。 なお、社内業務用のサーバーとしての構築中で、 一般公開するつもりのないサーバーですが、 コンテンツはhttpでみせるようになっています(要ログイン)。 (条件が整えばhttps化も検討します。) 【経緯】 Server-Worldさんのドキュメント: CentOS 7 : Vsftpd over TLS/SSL : Server World と前回いただいた回答を参考に、 webコンテンツ更新専用ユーザーグループを作り、 それに属するユーザーがSFTP接続できるように設定できました。 それとは別に、データベースから切り出すデータ(CSVファイル)を送受信するために、 SSHを使わないFTPユーザーも確保したいです。 業務システムからFTP利用するのに、 まだSFTP接続できるめどが立たないため、 やむを得ず現行のFTP接続の仕組みをそのまま使いたいのです。 (サーバーからデータをダウンロードするのに、webの処理phpを動かしてcsvファイルを作らせ、ftpでダウンロードする、 逆は、ftpでアップロードしてから、phpの処理を動かしてデータベースに反映。) 【現状】 前回と同様にユーザーを作ってwebグループに属させています。 FTPで接続させようとすると、拒否されたというメッセージが表示されます。 試しにWinSCPで接続しようとするとFTPではこうなりました。 ![WinSCPでの接続テスト結果](https://teratail.storage.googleapis.com/uploads/contributed_images/6108bb1a40a8f3a2e41c495affaf0369.png) Vsftpdにはユーザー個別で設定を変える方法もあると、 [CentOS][vsftpd]ログインユーザ毎に個別の設定ファイルを適用する | ごった煮 - tips about programming and building a server に書いてありますが、SSH適用外にするところまでは触れられておらず、 かといってサーバー全体をSSH適用を外すのこ怖いので、 うまい方法がありましたら教えて下さい。 【サーバー環境】 [root@localhost vsftpd]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@localhost vsftpd]# vsftpd -v vsftpd: version 3.0.2 [root@localhost vsftpd]# ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013 (不足情報などありましたらご指摘ください、追加します。)
回答: isseium's blogのブログ記事: ssh の認証方法をユーザごとに設定する - isseium's blog の通りにやったら、とりあえず接続拒否は免れました。 `/etc/ssh/sshd_config`ファイルを点検して、 ファイル末尾に「Match User foobarbaz」などと追加して、 「PasswordAuthentication yes」を加えました。 さらに、 ごった煮 - tips about programming and building a serverさんのブログ記事: [CentOS][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」 みたいにしました。 「# systemctl restart sshd」 「# systemctl restart vsftpd」 でこの設定が反映され、パスワード認証のみで決めたところだけアクセスできました。 余談ですが、ファイルのアップロードやリモートディレクトリ上のファイル削除については、 該当ディレクトリやファイルのオーナーユーザーやグループを適切に変更したら解決しました。 接続先ディレクトリにユーザーの書き込み可能属性が付与されていると 「500 OOPS: vsftpd: refusing to run with writable root inside chroot()」 というエラーが発生するようで、 対策として、vsftpdのユーザー個別定義ファイルに、 「allow_writeable_chroot=YES」も付け加えました。 参考:vsftpdの設定で謎のエラーにハマった - TomoProgの技術書