https://www.howtoforge.com/tutorial/how-to-setup-an-sftp-server-on-centos/
本教程主要是關於如何在CentOS上設置和使用SFTP服務器。使用FTP傳輸數據,很容易被匿名入侵者入侵(如果不使用TLS),因為它的端口對任何人都是開放的。可以使用SFTP作為更安全的替代方案。
SFTP使用SSH文件傳輸協議來提供安全的連接。
教程將展示如何為客戶端提供對SFTP服務器的訪問權限,但無法通過SSH登錄到服務器本身。
1.查看是否有SSH環境
只要服務器存在SSH環境皆可以使用SFTP服務,不需要安裝其他程序,運行以下代碼進行檢測
rpm -qa | grep ssh
出現以下結果說明已經安裝了ssh軟件包,可以使用SFTP
[root@localhost ~]# rpm -qa|grep ssh
libssh2-1.4.3-10.el7_2.1.x86_64
openssh-7.4p1-13.el7_4.x86_64
openssh-server-7.4p1-13.el7_4.x86_64
openssh-clients-7.4p1-13.el7_4.x86_64
2.配置SFTP
我們需要創建一個組和用戶,方便管理所有的SFTP賬戶。先創建一個目錄,作為SFTP服務的主目錄。 SFTP用戶目錄對應該目錄下的子目錄。
mkdir -p /data/sftp
chmod 701 /data
- 添加用戶組
groupadd sftpusers
- 創建用戶username,並添加到sftpusers用戶組
useradd -g sftpusers -d /upload -s /sbin/nologin username
為該用戶添加密碼
passwd username
- 現在我們有了一個用戶名為username的用戶,該用戶在sftpusers用戶組中。
- -d /upload 命令制定了該用戶的SFTP根目錄位於服務器/data/sftp/upload
- 限制了用戶通過shell進行SSH登錄,只能通過SFTP進行訪問
- 為用戶設置了密碼
- 創建用戶使用目錄並配置權限
mkdir -p /data/sftp/upload
chown -R root:sftpusers /data/sftp
chown -R chown -R username:sftpusers /data/sftp/upload
驗證目錄/data下的文件夾是否存在,以及配置是否正確。
ls -ld /data/
drwx-----x. 5 root root 54 Mar 22 14:29 /data/
ls -ld /data/sftp
drwxr-xr-x. 3 root sftpusers 20 Mar 22 14:29 /data/sftp
ls -ld /data/sftp/upload
drwxr-xr-x. 2 username sftpusers 6 Mar 22 14:29 /data/sftp/upload
cat /etc/passwd | grep username
username:x:1001:1001::/upload:/sbin/nologin
創建用戶使用的upload目錄
mkdir -p /data/sftp/upload
編輯/ etc/ssh/sshd_config配置文件,配置SSH協議創建SFTP進程。
vi /etc/ssh/sshd_config
文件末尾添加下面的配置
Match Group sftpusers
ChrootDirectory /data/sftp
ForceCommand internal-sftp
或者對單用戶指定配置
Match User username
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /data/sftp/upload
# 開啟下列配置 不允許匿名登錄
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand cvs server
查看sshd狀態
service sshd status
Redirecting to /bin/systemctl status sshd.service
● sshd.service - OpenSSH server daemon
#......
Feb 26 19:32:16 JD sshd[30788]: Server listening on 0.0.0.0 port 22.
Feb 26 19:32:16 JD sshd[30788]: Server listening on :: port 22.
重啟服務
service sshd restart
我們先來創建一個文件
touch /data/sftp/test.tst
啟動SFTP
sftp username@127.0.1
在SFTP環境中運行命令試試
ls
pwd
lpwd
exit
現在已經可以愉快的玩耍了,遠程訪問試一下吧
注意:如果出現Broken pipe的錯誤 一般都是ChrootDirectory指定的目錄權限配置錯誤
- ChrootDirectory指定Group匹配:所指向的文件夾 /data/sftp擁有者必須是root,所屬用戶組必須是username所屬的sftpusers用戶組。
- ChrootDirectory指定用戶匹配:所指向的文件夾 /data/sftp/upload擁有者必須是username,所屬用戶組必須是username所屬的sftpusers用戶組。
- ChrootDirectory所指向的文件夾到系統根路徑上的所有途徑文件夾,owner必須是root,且不允許群組和用戶的寫入權限(即權限為7xx,其中x小於7)
如果出現Failed to start OpenSSH Server daemon錯誤 一般是配置文件錯誤或者目錄權限錯誤 可以通過ssht -t來進行檢查
sshd -t
通過SSH key訪問SFTP可以參考這篇文章:
https://tufora.com/tutorials/linux/general/setup-an-sftp-server-on-centos