是否可以在沒有 shell 訪問權限的情況下授予使用者 sftp 訪問權限?如果是,它是如何實施的?
我有一組使用者只需要將文件上傳到他們設置的 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
(以首先允許登錄)的成員。更多的資訊
- 請注意,此配置不允許密碼登錄;所有賬戶都需要使用公鑰認證。這可能是您使用 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-only
、prohibit-password
和 (作為最後的手段)yes
。 5. 對於獎勵積分,請查看限制誰可以su
紮根;添加一個名為 的系統組,並在 中wheel
添加/啟用。auth required pam_wheel.so``/etc/pam.d/su