Sftp

是否可以在沒有 shell 訪問權限的情況下授予使用者 sftp 訪問權限?如果是,它是如何實施的?

  • September 24, 2021

我有一組使用者只需要將文件上傳到他們設置的 homedirs。我認為 sftp 就足夠了,但我不希望他們通過 shell 登錄。那麼有可能嗎?我的平台是 centos 7,儲存使用者的 homedirs 比如說 /personal/$user

我使用這些設置創建了使用者

useradd -m -d /personal/user1 -s /sbin/nologin

給使用者分配了密碼,然後當我使用 sftp 登錄機器時,它說無法連接。

編輯你/etc/ssh/sshd_config的包含:

Match User [SFTP user]
ForceCommand internal-sftp

重啟sshd。如果您有多個使用者,請將它們全部放在以逗號分隔的匹配使用者行上,如下所示:

Match User User1,User2,User3

配置sftp為不允許 shell 訪問的關鍵是通過該ForceCommand 選項限制使用者。

我喜歡以下用於管理 SSH 訪問的設置,我用它來管理小型伺服器群上的一組使用者。安全性和易於管理是我的首要任務。

它的主要功能是通過 Unix 組成員身份輕鬆管理 SSH 權限,具有嚴格定義的權限,並且預設情況下是安全的。

配置

安裝軟體(可選但有用):

yum install members   # or apt install members

添加組:

addgroup --system allowssh
addgroup --system sftponly

/etc/ssh/sshd_config中,確保以下設置為No

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

並在末尾/etc/ssh/sshd_config添加以下兩節:

Match Group allowssh
   PubkeyAuthentication yes

Match Group sftponly
   ChrootDirectory %h
   DisableForwarding yes
   ForceCommand internal-sftp

(編輯文件後不要忘記重新啟動 SSH)

解釋

那麼,這一切有什麼作用呢?

  • 作為額外的安全措施,它總是禁用 root 登錄。
  • 它總是禁用基於密碼的登錄(弱密碼對於執行 sshd 的伺服器來說是一個很大的風險)。
  • 它只允許allowssh組中的使用者(pubkey)登錄。
  • 組中的使用者sftponly無法通過 SSH 獲得 shell,只能獲得 SFTP。

然後只需通過管理組成員來管理有權訪問的人(組成員更改立即生效,不需要重新啟動 SSH;但請注意,現有會話不受影響)。members allowssh將顯示所有允許通過 SSH 登錄的members sftponly使用者,並將顯示所有限制為 SFTP 的使用者。

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

請注意,您的 sftp 使用者需要同時是sftponly(以確保他們不會獲得 shell)和allowssh(以首先允許登錄)的成員。

更多的資訊

  1. 請注意,此配置不允許密碼登錄;所有賬戶都需要使用公鑰認證。這可能是您使用 SSH 可以獲得的最大安全性勝利,因此我認為即使您現在必須開始,也值得付出努力。

如果您真的不想要這個,那麼也添加PasswordAuthentication yes到該Match Group allowssh節中。這將允許allowssh使用者進行 pubkey 和密碼驗證。或者,您可以添加另一個組(和Match Group節)以選擇性地授予使用者基於密碼的登錄。 2. 此配置將任何sftponly使用者限制在他們的主目錄中。如果您不希望這樣做,請刪除該ChrootDirectory %h指令。

如果您確實希望 chrooting 工作,重要的是使用者的主目錄(以及它上面的任何目錄)root:root由 group/other 擁有並且不可寫。主目錄的子目錄可以是使用者擁有的和/或可寫的。

是的,使用者的主目錄必須是 root 擁有的並且對使用者不可寫。可悲的是,這種限制有充分的理由。根據您的情況,ChrootDirectory /home可能是一個不錯的選擇。 3. sftponly對於此解決方案,將使用者的 shell設置/sbin/nologin為既沒有必要也沒有害處,因為 SSHForceCommand internal-sftp會覆蓋使用者的 shell。

不過,使用/sbin/nologin可能有助於阻止他們通過其他方式(物理控制台、samba 等)登錄。 4. 此設置不允許root通過 SSH 直接登錄;這形成了額外的安全層。如果您確實需要直接 root 登錄,請更改PermitRootLogin指令。考慮將其設置為forced-commands-onlyprohibit-password和 (作為最後的手段)yes。 5. 對於獎勵積分,請查看限制誰可以su紮根;添加一個名為 的系統組,並在 中wheel添加/啟用。auth required pam_wheel.so``/etc/pam.d/su

引用自:https://unix.stackexchange.com/questions/503312