Sftpユーザーを/ var/wwwにchrootしてもらい、それらを自動的にディレクトリに移動させたいと思います。私は私を大いに助けたこの答えを見つけました: Chroot SFTP-ユーザーが現在の(chroot)ディレクトリに書き込むことを許可することが可能です 。しかし、代わりに(var/wwwのサブディレクトリである)ユーザーをホームディレクトリ(=/=ユーザーの名前)に移動したいと思います。私は試した:
Match Group sftpusers
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www
ForceCommand internal-sftp -d %h
しかし、私はfatal: percent_expand: unknown key %h [postauth]
。
編集:%d
はユーザーディレクトリですが、/ var/wwwに基づいて検索しているため、機能していないようです。
私が理解しているように、あなたが直面している問題は、chrootが配置された後にinternal-sftp呼び出しが発生しているため、%h(および試行された%d)がchroot内で展開されていることです。ユーザーが/var/www/$USERNAME
に住んでいる場合でも、%dを使用すると、当然、internal-sftpに/var/www/var/www/$USERNAME
が不足するように指示されます。
%uはこの問題を回避する必要があります:
Match Group sftpusers
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www
ForceCommand internal-sftp -d /%u
したがって、internal-sftpに/$USERNAME
というディレクトリが不足するように指示します。この呼び出しはchrootが確立された後に発生するため、chrootの外部の/var/www/$USERNAME
を逆参照する必要があります。
コメントで説明されているように、ユーザー名とホームディレクトリ名は異なるため、回避策は上記の構成を使用してから、ユーザーごとに/ var/www/USERNAMEを作成し、マウント/ var/www/USERNAMEを/ var /にバインドすることです。 www/CURRENT_HOMEDIR_NAME、次のように:mkdir /var/www/USERNAME; mount -o bind /var/www/USERNAME /var/www/CURRENT_HOMEDIR_NAME
。
これで、ユーザー名ごとに/ var/wwwの下に2つのディレクトリができますが、一方はもう一方を指すだけです。internal-sftpは期待どおりに機能し、ホームディレクトリに/ var/www/CURRENT_NAMEとしてアクセスする必要があります。壊れません。