linux作為一款開源的操作系統,由於其穩定性和可靠性為眾多用戶所青睞,這也是很多大型數據庫、服務等依托linux系統搭建的主要原因。最近,被linux的sftp折騰的夠嗆,在無數個日夜鑽研之下,終於破解了其中的奧秘。為了讓像我一樣的初學者或者被工作需求被逼迫接觸的學習的職場人,通過這篇文章之后,能夠快速的搭建linux系統的sftp用戶。

小編這里演示使用的linux操作系統是Red Hat Enterprise Linux7。在linux中,默認提供的sftp服務的有vsftpd和internal-sftp,小編這里研究的是通過系統自帶的internal-sftp服務單擊sftp服務的。在下面的內容中,小編不但會向大家說明每一步的步驟,還會為大家解釋每一個命令的具體作用。

這里我們需要先創建一個sftp的用戶,比如說sftpuser的sftp用戶,使用的命令是useradd,但是這里必須要注意兩點,一是禁止該用戶通過ssh登錄,二是不需要創建家目錄。可能很多人對家目錄不是很理解,這里解釋一下,家目錄簡單來說,就是在/home下的用戶命令,默認每個用戶在/home中都是有與用戶名一樣的一個文件夾。這里創建的命令是:useradd -s /sbin/nologin -M sftpuser。創建用戶之后當然就是為創建的用戶設置密碼,使用的命令是:passwd sftpuser。設置密碼之后如果出現:passwd :all authentication tokens updated successfully .這句話,那就是說明該用戶密碼設置成功了。

sftp的用戶sftpuser創建后,當然就是為該sftpuser用戶創建指定的根目錄,主要的作用就是確保所有的sftp用戶都將在該根目錄中進行活動。首先需要使用mkdir的命令創建根目錄,比如這里給更目錄中創建sftp的文件夾,命令為:mkdir /sftp。創建該/sftp目錄之后,需要設置該目錄的權限,確保該目錄及該目錄以上的系統根目錄的擁有者都只能是root用戶,命令為:chown root:root /sftp;其次要確保該跟目錄往上的根目錄都不可以具有群組寫入權限,命令為:chmod 755 /home/sftp

接下來,我們來創建用戶sftpuser目錄,目錄名可以隨意設置,這里我們設置為用戶名620100,命令為:mkdir /sftp/620100。同時給該用戶賦予sftpuser該sftp用戶的目錄權限:chown root:sftpuser /sftp/620100。這里重點解釋一下,這里命令的意思為該620100的目錄的擁有者為root和sftpuser,但是sftp用戶sftpuser沒有權限去讀寫/sftp/620100的目錄,但是我們一般都需要對該命令進行讀寫操作,所以必須執行命令:chown sftpuser:sftpuser /sftp/620100和chmod 755 /sftp/620100來為它設置權限。(這里的目錄sftp的權限也只能是755,否則無法限制目錄,切記切記)

又一個重點,就是配置sshd_config。使用命令:vi /etc/ssh/sshd_config進行編輯。修改內容包括:
注釋掉這行:#Subsystem sftp /usr/libexec/openssh/sftp-server
添加這行:Subsystem sftp internal-sftp(#指定使用sftp服務使用系統自帶的internal-sftp,如果不添加,用戶無法通過sftp登錄。)
配置文件末尾添加:
Match User sftpuser#匹配用戶,如果要匹配多個組,多個組之間用逗號分隔
ChrootDirectory /home/sftp/620100#用chroot將指定用戶的根目錄
ForceCommand internal-sftp#指定sftp命令
X11Forwarding no#這兩行,如果不希望該用戶能使用端口轉發的話就加上,否則刪掉
AllowTcpForwarding no

配置后重啟sshd服務器,命令為:systemctl restart sshd.service,如果需要查詢sshd啟動狀態,命令為:systemctl status sshd.service。這我們來對sftpuser用戶進行登錄測試,命令為:sftp -oPort=22 sftpuser@ip,可以看到sftp用戶能夠正常登錄,說明這里就完成了sftp創建用戶,並修改了權限,限制了根目錄。當然,也可以通過第三方工具比如filezilla來進行測試,都是只能訪問到限定的路徑,而無法對其他目錄進行操作。

增加配置多個sftp用戶,並限制他們在各自的文件夾下面。
(1)在vi /etc/ssh/sshd_config這一步
Match Group sftp#匹配用戶組,如果要匹配多個組,多個組之間用逗號分隔,
ChrootDirectory /home/sftp/u% #用chroot將指定用戶的根目錄,u%指的是用戶名命名的文件夾
(2)設置文件夾權限
/home/sftp必須是root權限
/home/sftp/必須是root:u%權限
在u%文件夾下面創建u%:u%權限的文件夾
成功
參考:https://blog.51cto.com/u_11046152/2348514