OpenSSH - sshd_config - 允許使用相同使用者進行 sftp-chroot 和正常 ssh 登入

OpenSSH - sshd_config - 允許使用相同使用者進行 sftp-chroot 和正常 ssh 登入

希望不是重複,但找不到這個問題的答案...我發現了這個,表面上似乎是相同的,但很舊,其中唯一的答案並沒有回答實際的問題: 將使用者設定為 sftp 的 chroot,但允許使用者透過 SSH 登入

我已透過 sftp 為「sftp_users」群組中的使用者成功設定了一個工作 ChrootDirectory 環境。它運作得很好,所有適當的權限等等,限制只能存取 sftp,而且它們可以在 ChrootDirectory 內的子目錄中進行讀寫。這對於非特權使用者來說非常有用,禁止 ssh 存取並只允許在 ChrootDirectory 內的子資料夾內進行 rw。

我希望有稍微特權的使用者仍然能夠正常使用 ssh,但是當透過 sftp 登入時將具有 ChrootDirectory 環境。這不是一個安全問題,因為它們被認為是特權的,並且 obvi 可以在其正常用戶權限內透過 ssh 瀏覽檔案系統。問題是,當他們在 sftp 下登入時,我沒有找到一種方法來 Chroot 他們,而不阻止 ssh 登入。這更多的是為了標準化和方便,因此當他們進行 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

答案1

OpenSSH 不支援基於提交的命令覆蓋全域關鍵字。您必須區分 OpenSSH 為該Match聲明提供的一些標準(組合)。

可用標準包括使用者、群組、主機、本機位址、本機連接埠、RDomain 和位址(RDomain 代表接收連線的 rdomain(4))

-- 男人 5 sshd_config

常見的選擇是在透過備用網域(例如snapshot.backup.example和)到達的備用 IP 上提供有意限制的服務sftp.backup.example


的評論連結問題不過,要把問題說清楚。

如果你認為你sftp 存取權限針對特權使用者進行了 chroot,您可能會破壞不同的角色變成相同的使用者,這會帶來安全風險。 大多數情況下,審計和特權分離問題可以透過以下方式得到更好的解決:使用不同的用戶無論什麼原因讓您考慮設置 chroot 設置,甚至對於不受此限制的用戶也是如此。如果有兩個不同的任務,即使由同一個任務執行,如果有意限制,則更安全,然後無論如何設定新的系統使用者(例如,擁有使用者personperson-task共享大多數限制和身份驗證方法,並且僅在 ssh 中限制其中之一)。

答案2

我也對這個問題感到困惑,當我為用戶設定 chroot sftp 時,他們無法透過 ssh 登入。我的場景略有不同,我需要為使用者提供有限的shell環境,同時使用者仍然需要sftp和scp來存取他們的RW主目錄,以及指定的公共目錄,例如RDONLY的/home/public。

首先我開發了一個jailed shell,我希望這個shell可以與openssh inside-sftp配合來實現我的要求。然後我發現它失敗了,因為 openssh 不允許用戶在啟用 chroot 內部 sftp 的情況下進行 ssh 登入。

所以我只好修改jailed shell來支援家用jailed sftp和scp。我使用 ptrace 系統呼叫來實現被監禁的 sftp 有點棘手。如果這些資訊對您有用,您可以參考 https://github.com/diggerwoo/jsh

相關內容