
サーバーに新しい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.com
、sftp
そのユーザーで コマンドを使用して接続できなくなります。シェルの出力は次のようになります。
www.example.com への接続がリモート ホストによって閉じられました。パケットを読み取れませんでした: ピアによって接続がリセットされました
確かにそうしました:
- ディレクトリ
incoming
にフォルダがあることを確認しました/var/www/www.example.com
/var/www/www.example.com
との両方を所有権/var/www/www.example.com/incoming
に設定するguestuser:sftpusers
/
次のようにしてユーザーのホームディレクトリを設定しようとしました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
ユーザーの作成時または編集時にパラメータを使用してそのディレクトリをユーザーのホームとして設定する必要があります。
いずれかの時点で所有権が変更され、 がChrootDirectory
FTP 接続を試行しているユーザーによって所有されると、broken pipe
メッセージが再度表示されます。所有権を に戻すとroot
、ユーザーは再度接続できます。