Ssh

OpenSSH - sshd_config - 允許 sftp-chroot 和普通 ssh 登錄同一個使用者

  • April 21, 2022

希望不是一個騙局,但找不到這個問題的答案……我找到了這個,表面上看起來是一樣的,但是很老,唯一的答案沒有回答實際的問題: 設置使用者作為 sftp 的 chroot 使用者,但允許使用者登錄 SSH

我已經通過 sftp 為組 ‘sftp_users’ 中的使用者成功設置了一個工作 ChrootDirectory 環境。它執行良好,所有適當的權限等,限制對僅 sftp 的訪問,並且它們可以在 ChrootDirectory 內的子目錄中 rw。這對於非特權使用者來說非常有用,不允許 ssh 訪問並且只允許 rw 在 ChrootDirectory 內的子文件夾中。

我希望有更多的特權使用者仍然能夠正常使用 ssh,但是當通過 sftp 登錄時將擁有 ChrootDirectory 環境。這不是一個安全問題,因為它們被認為是私有的,並且 obvi 可以在其正常使用者權限內瀏覽 ssh 中的文件系統。問題是,當他們在 sftp 下登錄而不阻止 ssh 登錄時,我沒有看到 Chroot 的方法。這更多是為了標準化和方便,所以當他們 sftp 時,他們就像只使用 sftp 的使用者一樣到達他們的 Chrooted 位置。

我認為如果我將他們的 shell 保留為預設值(不是 /bin/false 或 nologin),這將起作用。不幸的是,當他們在 sftp_only 組中時,它根本不允許他們 ssh 進入,只有 sftp。除了擁有兩個單獨的帳戶之外,是否有解決此問題的方法——一個添加到“sftp_users”,一個不在該組中?到目前為止,我只能找到有關限制 sftp Chroot 並同時禁止 ssh(如果它們在該組中)的文件。

範例使用者是“測試”。’test’ 在 sftp_users 組中,因此可以通過 sftp 登錄並被 Chroot 到他指定的文件夾(’/sftp/test’)並讀取或寫入綁定安裝在 ‘/sftp/test/home’ 的主文件夾. 這一切都有效。但是即使他的 shell 仍然在 /etc/passwd 中設置為 /bin/bash,如果添加到 sftp_users 組,’test’ 也無法通過 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

OpenSSH 不支持根據送出的命令覆蓋全域關鍵字。您必須區分 OpenSSH 為Match聲明提供的一些(組合)標準。

可用的標準是使用者、組、主機、LocalAddress、LocalPort、RDomain 和地址(RDomain 代表接收到連接的 rdomain(4))

– man 5 sshd_config

一個常見的選擇是在通過備用域訪問的備用 IP 上提供有意限制的服務,例如snapshot.backup.examplesftp.backup.example.


不過,對連結問題的評論清楚地說明了問題。

如果您認為您希望為特權使用者進行 sftp 訪問 chroot,那麼您可能會將不同的角色轉換為相同的使用者,這會帶來安全風險。 大多數情況下,通過使用不同的使用者來更好地解決審計和權限分離問題,讓您考慮設置 chroot 設置,即使對於不受此限制的使用者也是如此。如果有兩個不同的任務,即使是由同一個人執行,如果故意限制一個更安全,那麼一定要設置一個新的系統使用者(例如,擁有使用者personperson-task共享大多數限制和身份驗證方法,並且只限制一個它們在 ssh 中)。

引用自:https://serverfault.com/questions/1099081