解決策 1:
ねえ @emmdee シンプルで素敵なトリックがあることに気付くのに永遠にかかりました. root を sFTP したい場所の親フォルダーの所有者にし、force コマンドを使用して特定のユーザーに CHROOT ディレクトリ内の特定の DIR をロードするように指示するだけです。
00
が必要な場合に備えて 書き込み可能なディレクトリにするには、root にする必要があります 12
の所有者 ディレクトリに進み、Force Command he 29
そのユーザーまたはグループのランディング ディレクトリとして。
あなたの 39
次のようになります:
Match User sftpuser
ChrootDirectory /home
ForceCommand internal-sftp -d /sftpuser
AllowTCPForwarding no
X11Forwarding no
それが完了したら、前述のように適切なパーミッションを付与する必要があります。ルートは親 (chroot) ディレクトリ 47
を所有する必要があります。 ユーザーは final(-d) ディレクトリ 54
を所有する必要があります . sftpusers という名前の sFTP ユーザー グループがあると仮定します。 、そうでない場合;次のコマンドからグループを省略するか、代わりにユーザーに置き換えます (root 最初と sftpusers で 秒で)。継承のためにコマンド ラインで -R を使用しているため、次のようにユーザー所有権の前にルート所有権から始める必要があります。
sudo chown -R root:sftpusers /home
次に、ユーザーに対して次を実行できます:
sudo chown -R sftpuser:sftpusers /home/sftpuser
これが必要かどうかはわかりませんが、いつでも sshd サービスを再起動して、すべての設定が再度読み込まれるようにすることができます:
sudo systemctl restart sshd.service
うまくいけば、これは魔法のように機能するはずです.私は同様の問題を抱えていましたが、ほとんどの場合、解決策は私の目を見ていた.
乾杯!
解決策 2:
数年経ちましたが、この投稿で 98% 達成できました。長い間探した後。
ユーザーが chroot され、自動的に書き込み権限のある独自のディレクトリに移動できるようにするために、African Idiot が提案した方法を使用し、root ユーザーと ftp グループが所有する元の chroot ディレクトリも作成しました。
しかし、それらをそのフォルダーに保持し、他のユーザーのフォルダーを参照できないようにするための鍵は、フォルダーを 69
にすることでした ftp グループが internal-sftp -d /%u (つまり、ユーザーのサブディレクトリに cd を実行) を実行するようにします。 root 以外は読み取れないため、上位ディレクトリにコピーすると失敗します。
drwx--x--- 6 root sftpusers uarch 6 Feb 19 15:34 ./
drwxr-xr-x 5 root root uarch 5 Feb 4 09:13 ../
drwxrwx--- 3 anotheruser anotheruser uarch 3 Feb 24 15:34 anotheruser/
drwxrwx--- 3 ftpuser ftpuser uarch 12 Feb 25 10:55 ftpuser/
これが他の誰かにも役立つことを願っています.