ChrootDirectoryとユーザーホームディレクトリはどのように連携しますか?

ChrootDirectoryとユーザーホームディレクトリはどのように連携しますか?

CentOS 7でSFTP専用ユーザーを作成する必要があります。私はこれを行う方法をさまざまなソースから読みました。この設定は、SFTP経由で単一のフォルダにアクセスする単一のユーザーのみをサポートできます。

ユーザーのホームディレクトリが/home/user次の場合、sshdはsshd_config次の点を考慮してディレクトリをchrootに変更します。ChrootDirectory%h/home/user

Chroot ディレクトリ 認証後にchroot(2)のディレクトリパス名を指定します。パス名のすべてのコンポーネントは、ルートが所有するディレクトリでなければならず、他のユーザーやグループが書き込めないようにする必要があります。chrootの後、sshd(8)は作業ディレクトリをユーザーのホームディレクトリに変更します。

どのように動作しますか? sshdがCDを試しているので、間違いなく失敗します/home/user/home/user

/home追加の質問:ユーザーが作成されたときに定義されたホームディレクトリからそのユーザーをchrootするか外部からchrootするかを決定するベストプラクティスはありますか/var/sftp/user?外部でchrootを作成するときのユーザーホームディレクトリの目的は何ですか/home?それでも読書に使用していますか~/.ssh/authorized_keys

ベストアンサー1

ディレクトリとして使用する場合は、知っておくべき追加の制限がありますChrootDirectoryパス名のすべてのコンポーネントは、ルートが所有するディレクトリでなければならず、他のユーザーやグループが書き込めないようにする必要があります。ユーザーがchroot内の自分のホームディレクトリに書き込むことができる必要がある場合、ホームディレクトリはChrootDirectory

歴史的記録:

OpenSSHのchrootサポートはもともと別々のパッチであり、デフォルトのOpenSSHディストリビューションに統合された後でもChrootDirectoryとして使用されるディレクトリの正確な要件はOpenSSHのバージョンによって変更されました。以前の設定で検出されたセキュリティの脆弱性に対応して、新しいバージョンは以前のバージョンよりも厳しい要件を適用することがよくあります。

また、同じホームディレクトリパスをchrootの内側と外側の両方に適用する必要があるという要件は明らかに次善であり、一部のディストリビューションでは動作を修正するためにパッチを適用しました。残念ながら、過去のすべてのパッチには、マニュアルページやその他の関連文書の更新は含まれていません。

ただし、書面の要件を満たすには、次のようにします。

mkdir -p /jail/username/home

# First, the chroot directory:
chown root:root /jail/username
chmod 755 /jail/username

# Then, the user's home directory:
chown username: /jail/username/home
chmod 750 /jail/username/home
usermod -d /jail/username/home username

# And here's the magic:
cd /jail/username
ln -s . jail       # this would normally be a silly thing to do
ln -s . username   # but with chroot it can be useful

これで設定できますChrootDirectory /jail/%u

chrootの外側から見ると、ユーザーのホームディレクトリは/jail/username/home一般的な命名規則から少し離れていますが、特別なものではありません。

chroot内で同じホームディレクトリパスが実際に参照されます /jail/username/jail/username/home。しかし、上記の2つの愚かなシンボリックリンクを見ましたか?それらを参照キャンセルすると取得されます/jail/username/././home。結果はまったく同じです/jail/username/home。したがって、同じパスはchrootの内側と外側の同じ場所を指します。

chroot内のユーザーは自分のホームディレクトリを/jail/username/home==と見て、正常に使用できます/././home/home彼らはホームディレクトリの上の1つの層を見ることができますが、/ルートだけそこに書くことができます。

これはまた、syslogスタイルのロギングなどを可能にします。ルート所有ディレクトリを作成し/jail/username/dev、ここrsyslogに追加のスタイルソケットを作成するように指示できます。 chrootユーザーはログメッセージを生成し、通常のsyslogサブシステムにそれを処理させることができます。/dev/log/jail/username/dev/log

これはchroot環境をソートする唯一の方法ではありませんが、上記の設定スタイルを使用すると、ユーザーのホームディレクトリがchrootの外部で処理できるようにできるだけ正常に作成できます(=シンボリックリンクやその他の奇妙な現象はありません)。

刑務所に閉じ込められたユーザーにできるだけ役に立たないchrootをしたい場合は、次のようにします。

mkdir -p /jail/username/username

# Prepare the chroot directory
chown root:root /jail /jail/username
chmod 755 /jail /jail/username

# Prepare the user's actual home directory
chown username: /jail/username/username
chmod 750 /jail/username/username

# Make it usable outside the chroot too
ln -s /jail/username/username /username

# And now it can be assigned to the user.
usermod -d /username username

もう一度設定してみましょうChrootDirectory /jail/%u

chrootの外側には/usernameそれを指すシンボリックリンクがあるため、/jail/username/usernameユーザーのホームディレクトリが有効です。

chrootプロセスでは、/usernameこれはユーザーのホームディレクトリとして使用できる一般的なディレクトリです。

はい、実際のパス名は少し反復的で、シンボリックリンクによってシステムルートが複雑になります。しかし、chroot環境には不要なものはありません。

もしただchrootユーザーに必要なのはSFTPです。この質問に対する答えは、より簡単なアプローチを説明します。

おすすめ記事