linux如何限制指定賬戶不能SSH只能SFTP在指定目錄

概述

由於某臺服務器需要對指定用戶進行限制,只允許訪問指定目錄,這個需求在很多場景應該是比較常見的,下面介紹一種解決方案。

以下限制了sftp用戶組只能sftp 連接上去至指定目錄(/projects/tms_prod),ssh 連接就提示只接受sftp 連接。

方案具體流程如下:


1、創建用戶及目錄:

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/ # 主目錄授權

mkdir -p /projects/tms_prod # 為用戶建立子目錄
chown tms:sftp /projects/tms_prod # 修改子目錄所屬用戶和組
chmod 755 /projects/tms_prod # 子目錄授權
linux如何限制指定賬戶不能SSH只能SFTP在指定目錄


2、配置sshd_config

Subsystem sftp internal-sftp #指定使用sftp服務使用系統自帶的internal-sftp
#Match User tms
Match Group sftp
ChrootDirectory /projects/
X11Forwarding no #禁止X11轉發
AllowTcpForwarding no # 禁止tcp轉發
ForceCommand internal-sftp #指定sftp命令,不能ssh連接
linux如何限制指定賬戶不能SSH只能SFTP在指定目錄


注意:

1.由ChrootDirectory指定的目錄開始一直往上到系統根目錄為止的目錄擁有者都只能是root

2.由ChrootDirectory指定的目錄開始一直往上到系統根目錄為止都不可以具有群組寫入權限


3、重啟ssh服務:

service sshd restart


4、測試驗證

linux如何限制指定賬戶不能SSH只能SFTP在指定目錄


補充:

1、Subsystem sftp /usr/lib/openssh/sftp-server 更為 internal-sftp,這兩者有什麼區別呢?

簡單的說默認sftp 進程由單獨的二進制文件:/usr/lib/openssh/sftp-server啟動,而internal-sftp 則無需外部二進制文件額外啟動一個進程,整合在sshd進程內了。

internal-sftp相較於 /usr/lib/openssh/sftp-server 優點在於:

1)性能好,無需額外進程了嘛;

2)安全性好,無需用戶登錄shell,且可使用ChrootDirectory 限制sftp行為活動的目錄;

3)sftp-server 的存在主要是向後兼容。

2、ChrootDirectory directory

一般出現問題會在ChrootDirectory directory上,這個地方的目錄不能直接配置到目標目錄,需要配置到他的上一級;即給 /A/B/C的C目錄做chroot,要對C能讀寫,所以C目錄不能做ROOT目錄,對B做chroot。


覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~

linux如何限制指定賬戶不能SSH只能SFTP在指定目錄


分享到:


相關文章: