OpenSSH - sshd_config - 同じユーザーで sftp-chroot と通常の ssh ログインを許可する

OpenSSH - sshd_config - 同じユーザーで sftp-chroot と通常の ssh ログインを許可する

重複ではないことを願いますが、この質問に対する回答が見つかりません... 表面上は同じように見えますが、非常に古く、唯一の回答は実際の質問に答えていません。これを見つけました: sftp ではユーザーを chroot に設定し、SSH ではユーザーがログインできるようにします。

グループ 'sftp_users' のユーザー用に、sftp 経由で ChrootDirectory 環境を正常にセットアップしました。正常に動作し、適切な権限などがすべて付与され、アクセスが sftp のみに制限され、ユーザーは ChrootDirectory 内のサブディレクトリで rw を実行できます。これは、特権のないユーザーにとって最適で、ssh アクセスを禁止し、ChrootDirectory 内のサブフォルダ内で rw のみを許可します。

ssh を通常どおり使用できる、もう少し権限のあるユーザーが欲しいのですが、sftp 経由でログインすると ChrootDirectory 環境になります。これはセキュリティ上の問題が少なくなります。権限のあるユーザーと見なされ、通常のユーザー権限内で ssh のファイル システムを自由に閲覧できるためです。問題は、sftp でログインするときに、ssh ログインを妨げずに Chroot する方法が見つからないことです。これは何よりも標準化と利便性のためであり、sftp を使用すると、sftp のみのユーザーと同様に、Chroot された場所に到着します。

シェルをデフォルトのままにしておけば (/bin/false や nologin ではない)、これは機能すると思いました。残念ながら、ユーザーが sftp_only グループに属している場合は、ssh はまったく許可されず、sftp のみが許可されます。2 つの別々のアカウント (1 つは 'sftp_users' に追加し、もう 1 つはそのグループに属さない) を持つ以外に、この問題を回避する方法はありますか? これまでのところ、sftp Chroot を制限し、そのグループに属している場合は同時に ssh を禁止するドキュメントしか見つかりません。

例として、ユーザーは「test」です。「test」は sftp_users グループに属しているため、sftp 経由でログインして、指定されたフォルダ (「/sftp/test」) に Chroot され、「/sftp/test/home」にバインドマウントされたホームフォルダに読み取りまたは書き込みを行うことができます。これはすべて機能します。ただし、/etc/passwd でシェルが /bin/bash に設定されている場合でも、「test」は sftp_users グループに追加されると ssh 経由でログインできません。そのグループのメンバーシップを削除すると、両方を実行できますが、sftp で Chroot できなくなります。

グループ「sftp_users」に属していないユーザーは、ssh または sftp 経由でログインできますが、sftp では Chroot されません。

使用されているプロトコルを一致させる方法や、別のグループに追加の一致を設定する方法はありますか? sftp 経由でログインする場合のみ chroot を探しています。これらのユーザーの場合、ssh 経由の非 chroot で問題ありません。

以下は私の sshd_config です:

Port XXXX
#ListenAddress ::
#ListenAddress 0.0.0.0

Protocol 2

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

SyslogFacility AUTH
LogLevel INFO

LoginGraceTime 120
PermitRootLogin no
StrictModes yes

PubkeyAuthentication yes

IgnoreRhosts yes
HostbasedAuthentication no

PermitEmptyPasswords no

ChallengeResponseAuthentication no

X11Forwarding yes
X11DisplayOffset 10
PrintMotd yes
PrintLastLog yes

ClientAliveCountMax 10
ClientAliveInterval 3600
TCPKeepAlive no

#Banner /etc/issue.net

AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server -u 0027

UsePAM yes
PasswordAuthentication yes



Match Group sftp_users
  ChrootDirectory /sftp/%u
  ForceCommand internal-sftp -u 0027
  X11Forwarding no
  AllowTcpForwarding no
  PasswordAuthentication yes

答え1

OpenSSH は、送信されたコマンドに基づいてグローバル キーワードを上書きすることをサポートしていません。ステートメントに対して OpenSSH が提供するいくつかの基準 (の組み合わせ) に基づいて区別する必要がありますMatch

利用可能な基準は、ユーザー、グループ、ホスト、ローカルアドレス、ローカルポート、RDomain、アドレス(RDomainは接続が受信されたrdomain(4)を表す)です。

-- man 5 sshd_config

一般的な選択肢としては、 や などの代替ドメインを介してアクセスされる代替 IP で意図的に制限されたサービスを提供することが挙げられsnapshot.backup.exampleますsftp.backup.example


コメントは関連質問ただし、問題点をはっきりと説明してください。

もしあなたが欲しい特権ユーザーのためにsftpアクセスをchrootすると、異なる役割同一のユーザー、それはセキュリティ上のリスクを招きます。 監査と権限分離の懸念は、ほとんどの場合、別のユーザーを使用するchroot設定を、それによって制限されないユーザーに対しても設定することを検討した理由は何ですか。同じユーザーによって実行されたとしても、2つの異なるタスクがある場合意図的に制限する方がより安全に実行できる場合は、必ず新しいシステム ユーザーを設定してください (たとえば、ユーザーを作成しpersonperson-taskほとんどの制限と認証方法を共有し、ssh ではそのうちの 1 つだけを制限します)。

答え2

私もこの問題に困惑しました。ユーザー用に chroot sftp を設定すると、ssh でログインできなくなります。私のシナリオは少し異なり、ユーザー用に制限付きのシェル環境を提供する必要がありますが、ユーザーは RW のホーム ディレクトリと、RDONLY の /home/public などの指定されたパブリック ディレクトリにアクセスするために sftp と scp を必要とします。

まず、jailed シェルを開発しました。このシェルが openssh internal-sftp と連携して要件を満たすことを望みました。その後、openssh は chroot internal-sftp が有効になっている状態ではユーザーの ssh ログインを許可しないため、失敗することがわかりました。

そこで、jailed シェルをホーム jailed sftp と scp をサポートするように変更する必要がありました。jailed sftp を実装するために ptrace システムコールを使用するのは少しトリッキーです。この情報が役立つ場合は、以下を参照してください。 https://github.com/diggerwoo/jsh

関連情報