新しい SFTP ユーザーが別のディレクトリで動作しないのはなぜですか?

新しい SFTP ユーザーが別のディレクトリで動作しないのはなぜですか?

サーバーに新しいSFTPアカウントを作成しようとしています。以下の手順に従うとその通りすると、すべて正常に動作します。https://www.thegeekstuff.com/2012/03/chroot-sftp-setup/

guestuser経由でユーザーに接続しsftp、ホーム ディレクトリを参照し、 から 1 レベル上の に移動incomingできます/sftp/guestuser

パラメータを実装する代わりに、ChrootDirectoryの値を/etc/ssh/sshd_config具体的に に変更することもできます。そのため、ハードコードされたディレクトリ名は正常に機能します。/sftp/guestuser%u

ChrootDirectoryしかし、その時点から、グループの を のsftpusers実際の Web サイトのディレクトリに変更するだけでは/var/www/www.example.comsftpそのユーザーで コマンドを使用して接続できなくなります。シェルの出力は次のようになります。

www.example.com への接続がリモート ホストによって閉じられました。パケットを読み取れませんでした: ピアによって接続がリセットされました

確かにそうしました:

  1. ディレクトリincomingにフォルダがあることを確認しました/var/www/www.example.com
  2. /var/www/www.example.comとの両方を所有権/var/www/www.example.com/incomingに設定するguestuser:sftpusers
  3. /次のようにしてユーザーのホームディレクトリを設定しようとしましたusermod guestuser -d /

ディレクトリ/sftp/guestuser(動作していたもの) は の所有権であるためroot:root、 の権限が/var/wwwオンになっていることはroot:root問題にならないはずです(?)

新しい SFTP ユーザーのホーム ディレクトリを変更できないのはなぜですか?

アップデート

ディレクトリを次のように変更できます:

  • /sftp
  • /
  • /var
  • /var/www

/var/wwwこれらはすべて機能します。しかし、 のさらに 1 つ下、たとえばに移動するとすぐに/var/www/test、機能しなくなります。 であった元のディレクトリ名からドットを削除してみましたwww.example.comが、違いはありませんでした。

サブディレクトリ レベルの数の制限についても問題はありません。これ/sftp/guestuser/incomingは機能したからです。新しいディレクトリでテストしても/web/www.example.com機能しませんでした。

答え1

さて、原因を特定することができました。ChrootDirectoryユーザーの として定義したディレクトリは、 が所有している必要がありますroot

ユーザーがコンテンツをアップロードできるようにしたい場合 (当然、ルート所有のディレクトリではアップロードできません)、そこにサブディレクトリを作成し、-dユーザーの作成時または編集時にパラメータを使用してそのディレクトリをユーザーのホームとして設定する必要があります。

いずれかの時点で所有権が変更され、 がChrootDirectoryFTP 接続を試行しているユーザーによって所有されると、broken pipeメッセージが再度表示されます。所有権を に戻すとroot、ユーザーは再度接続できます。

関連情報