質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

CentOS7&Vsftpdで非SSHユーザーをFTPできるようにしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,503

m6u

FuelPHP総合1位

前回の質問の続きになります:「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での接続テスト結果

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

(不足情報などありましたらご指摘ください、追加します。)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

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の技術書

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る