
通常、 経由で正常にログインしてコマンドsftp
を実行すると、put
ログインしたユーザーのディレクトリにファイルが転送されるはずです。 これはすぐに機能しますが、ユーザーを自分のディレクトリに$HOME
制限したいと思います(たとえば、それ以上のレベルには移動できないようにします)。sftp
$HOME
cd
これは私が使用しているところですChrootDirectory
- ドキュメントによると(参考:)
ChrootDirectory: 認証後にchroot(2)するパスを指定します。このパスとそのすべてのコンポーネントは、他のユーザーやグループが書き込みできないルート所有のディレクトリである必要があります。
フォルダー/権限は正しく設定されていると思います。ドキュメントの次の文は機能していないか、期待どおりに動作していないと思います。
chroot後、sshd(8)は作業ディレクトリをユーザーのホームディレクトリに変更します。
sshd_config
を使用するように変更しChrootDirectory
、ユーザーの作業ディレクトリ経由でサーバーに正常にアクセスするとsftp
、ユーザーの $HOME ディレクトリに設定されず、実際には 1 つ上のレベルに設定されます。(例:/home
の代わりに/home/userTest
) ユーザーにとって明らかな修正方法は、1 つ下の正しいディレクトリに cd することですが、現在の作業ディレクトリにデータを FTP するだけの自動化システムを使用している場合、これは非常に問題になる可能性があります。
まず一般的なケースを示し、次にそれを修正して、デフォルトの作業ディレクトリの動作がどのように変化するかを示しますChrootDirectory
。sshd_config
これは期待どおりに動作します:
- ユーザーを作成します (
-m
このユーザーのホーム ディレクトリを作成するために使用します):sudo useradd -m userTest
- ユーザーにパスワードを付与します:
sudo passwd userTest
userTest
$HOMEディレクトリに 注意してください:cat /etc/passwd
->userTest:x:1002:1004::/home/userTest:/bin/sh
- 作成したユーザーのサーバーに sftp で接続します。
sftp userTest@<your-server>
- ログインに成功した後の作業ディレクトリをメモします:
pwd
->Remote working directory: /home/userTest
上記の例は期待どおりに動作していますが、唯一の問題はuserTest
作業ディレクトリにロックされておらず、cd ..
ファイル システムがリセットされる可能性があることです。
いくつかのガイドでは、この問題に対する基本的な解決策がすべて同じでした(https://linuxconfig.org/how-to-setup-sftp-server-on-ubuntu-20-04-focal-fossa-linux)
前の手順に追加
Match
sftp グループを追加します (これはのブロックのキーとして使用されますsshd_config
)。sudo addgroup sftp
userTest
ユーザーをグループに追加:sudo usermod -a -G sftp userTest
- 編集
sshd_config
:sudo nano /etc/ssh/sshd_config
- ファイルの末尾に次の行を追加します
Match group sftp
ChrootDirectory /home
ForceCommand internal-sftp
(これは基本的に、グループに属するすべてのユーザーがおよびルールsftp
の対象となることを意味します)ChrootDirectory
ForceCommand
ファイルを保存して ssh を再起動します。 sudo systemctl restart ssh
指定されたディレクトリがChrootDirectory
上記のドキュメントの要件を満たしていることを確認します: ls -ltr
-> drwxr-xr-x 4 root root 4096 Jun 10 09:02 home
(これで合格すると思います)
すぐに使えるセットアップの結果と、userTest
再度使用して新しい sftp 構成の結果を比較します。sftp userTest@<your-server>
現在の作業ディレクトリに注意してください: pwd
->Remote working directory: /
これは何かが間違っているという決定的な証拠ではありません。作業ディレクトリが変更されることが予想されます...ただし、現在の作業ディレクトリの内容を簡単に確認してみましょう。
ls -ltr
-> drwxr-x--- 3 1002 1004 4096 Jun 10 09:10 userTest
(!!!)
ドキュメントによると:
chroot後、sshd(8)は作業ディレクトリをユーザーのホームディレクトリに変更します。
ls -ltr
作業ディレクトリがuserTest
ホームディレクトリ内になく、実際には 1 つ上のレベルにあることがわかります。
これを期待どおりに動作させるための設定方法ChrootDirectory
またはその他の方法はありますか?
注: ForceCommand
sshd_config から削除すると、実際には 11 年前に ERRATA としてクローズされた別の問題が発生しますか?
バグ報告