Linux如何限制指定賬戶不能SSH只能SFTP在指定目錄
概述
由于某臺(tái)服務(wù)器需要對(duì)指定用戶進(jìn)行限制,只允許訪問指定目錄,這個(gè)需求在很多場(chǎng)景應(yīng)該是比較常見的,下面介紹一種解決方案。
以下限制了sftp用戶組只能sftp 連接上去至指定目錄(/projects/tms_prod),ssh 連接就提示只接受sftp 連接。
方案具體流程如下:
1. 創(chuàng)建用戶及目錄:
- mkdir -p /projects/
- groupadd sftp # 新建組
- useradd -g sftp -s /bin/false tms -d /projects/tms_prod # 新建用戶
- passwd tms
- chown root:sftp /projects/ # 修改主目錄所屬用戶和組
- chmod 755 /projects/ # 主目錄授權(quán)
- mkdir -p /projects/tms_prod # 為用戶建立子目錄
- chown tms:sftp /projects/tms_prod # 修改子目錄所屬用戶和組
- chmod 755 /projects/tms_prod # 子目錄授權(quán)
2. 配置sshd_config
- Subsystem sftp internal-sftp #指定使用sftp服務(wù)使用系統(tǒng)自帶的internal-sftp
- #Match User tms
- Match Group sftp
- ChrootDirectory /projects/
- X11Forwarding no #禁止X11轉(zhuǎn)發(fā)
- AllowTcpForwarding no # 禁止tcp轉(zhuǎn)發(fā)
- ForceCommand internal-sftp #指定sftp命令,不能ssh連接
注意:
- 由ChrootDirectory指定的目錄開始一直往上到系統(tǒng)根目錄為止的目錄擁有者都只能是root
- 由ChrootDirectory指定的目錄開始一直往上到系統(tǒng)根目錄為止都不可以具有群組寫入權(quán)限
3. 重啟ssh服務(wù):
service sshd restart
4. 測(cè)試驗(yàn)證
補(bǔ)充:
1. Subsystem sftp /usr/lib/openssh/sftp-server 更為 internal-sftp,這兩者有什么區(qū)別呢?
簡(jiǎn)單的說(shuō)默認(rèn)sftp 進(jìn)程由單獨(dú)的二進(jìn)制文件:/usr/lib/openssh/sftp-server啟動(dòng),而internal-sftp 則無(wú)需外部二進(jìn)制文件額外啟動(dòng)一個(gè)進(jìn)程,整合在sshd進(jìn)程內(nèi)了。
internal-sftp相較于 /usr/lib/openssh/sftp-server 優(yōu)點(diǎn)在于:
- 性能好,無(wú)需額外進(jìn)程了嘛;
- 安全性好,無(wú)需用戶登錄shell,且可使用ChrootDirectory 限制sftp行為活動(dòng)的目錄;
- sftp-server 的存在主要是向后兼容。
2. ChrootDirectory directory
一般出現(xiàn)問題會(huì)在ChrootDirectory directory上,這個(gè)地方的目錄不能直接配置到目標(biāo)目錄,需要配置到他的上一級(jí);即給 /A/B/C的C目錄做chroot,要對(duì)C能讀寫,所以C目錄不能做ROOT目錄,對(duì)B做chroot。