Centos7配置SFTP服務


背景:

因工作上要接收外部機構發來的文件,采取FTP的方式保密性差,SFTP方式則采取了加密了傳輸,安全性更好。因此需要搭建SFTP服務,首選Linux環境,本文使用Centos7來演示。

一、操作步驟

環境:

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

 

1. 創建用戶組和用戶

[root@localhost ~]# groupadd sftp  --創建用戶組
[root@localhost ~]# useradd -g sftp -s /sbin/nologin sftp1 --創建用戶
[root@localhost ~]# passwd sftp1
Changing password for user sftp1.
New password:
[root@localhost ~]# mkdir -p /data/sftp/sftp1
[root@localhost ~]# usermod -d /data/sftp/sftp1 sftp1 --指定用戶默認目錄

 

2. 修改ssh服務配置

[root@localhost ~]# vi /etc/ssh/sshd_config
-- 在末尾添加
#Subsystem     sftp  /usr/libexec/openssh/sftp-server   --這里注釋掉
# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server
--從這里開始增加
Subsystem sftp internal-sftp  
Match Group sftp  --匹配用戶組
    ChrootDirectory /data/sftp/%u  --限定了訪問目錄
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp 

 

3. 設置目錄權限

[root@localhost ~]# chown root:sftp /data/sftp/sftp1  --設置root為目錄所有者
[root@localhost ~]# chmod 755 /data/sftp/sftp1  --不能超過755,sftp1可讀可執行、不可寫(也可設置為644)
[root@localhost ~]# mkdir /data/sftp/sftp1/upload  
[root@localhost ~]# chown sftp1:sftp /data/sftp/sftp1/upload –-設置sftp1為目錄所有者
[root@localhost ~]# chmod 755 /data/sftp/sftp1/upload  --sftp1可讀可寫可執行
[root@localhost ~]# systemctl restart sshd.service –-重啟sshd服務,讓sshd_config配置生效

 

4.檢測登錄是否正常

[root@localhost ~]# sftp sftp1@127.0.0.1
sftp1@127.0.0.1's password:
Connected to 127.0.0.1.
sftp> exit  --成功!

--
也可以在windows上也可以用winscp驗證登錄

 

 

二、常見報錯

1. Permmission Denied

原因:(1)密碼錯誤;(2)目錄權限設置有問題

2. Broken pipe. Couldn't read packet...

原因:目錄權限設置問題。可以用將訪問用戶的用戶組改為root,看是否還會報錯,如果不報錯,則就是之前目錄權限設置的問題。

 

三、特殊需求

1. 增加SFTP訪問端口

出於安全角度考慮,有外部機構提出不能使用默認22端口,要額外新增訪問端口。這里以新增22345端口為例,只需要再次修改sshd配置文件就可以。

[root@localhost ~]# vi /etc/ssh/sshd_config
-- 中間位置
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#
Port 22 --這一行取消注釋,保留22端口用於內部遠程控制
Port 22345 --端口增加22345

-- 如果開啟了防火牆,還需要額外放行端口
[root@localhost ~]# netstat –nlptu [root@localhost ~]# firewall-cmd --permanent --add-port=22345/tcp  --防火牆放行 success [root@localhost ~]# systemctl restart firewalld  --重啟防火牆

最后用WinSCP訪問新端口22345驗證鏈接。

 

2. 用戶登錄的默認路徑可以直接上傳文件

默認情況下,用戶登錄的第一層目錄是不能操作的,我們會創建一個upload子目錄,把所有者賦予用戶,用戶要上傳文件必須要進入upload子目錄進行。

現在有機構提出要登錄后直接可上傳文件,去掉進入子目錄這一步。搜索網上資料,發現最簡單的方式是通過修改sshd配置文件中的ForceCommand internal-sftp參數。

-- 假設用戶sftpuser對應默認路徑/home/sftpuser,但僅在子目錄/home/sftpuser/upload下可上傳文件,我們可以讓其登錄后自動進入upload目錄。
[root@localhost ~]# vi /etc/ssh/sshd_config
-- 在最后添加
Match User sftpuser  --匹配用戶sftpuser
    ChrootDirectory /home/sftpuser --用戶root目錄
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp -d /upload  --登錄后自動執行命令進入upload目錄,用戶仍可回到默認root目錄

 

3. 添加一個SFTP管理員用戶,可以訪問所有SFTP用戶目錄

隨着外部SFTP用戶增多,需要有個管理員用戶來統一查看所有用戶的文件。直接用root不安全,要新建用戶來實現。

-- 新建一個sftpadmin用戶,歸屬於root用戶組
[root@localhost ~]# useradd -g root sftpadmin --創建用戶 [root@localhost ~]# passwd sftpadmin
-- 修改sshd配置文件,配置sftpadmin用戶的默認root目錄為父目錄。假設用戶目錄為/data/sftpgroup01/sftpuser01,那么父目錄就是/data/sftpgroup01。 [root@localhost
~]# vi /etc/ssh/sshd_config Match User sftpadmin ChrootDirectory /data/sftpgroup01 --限定訪問目錄 ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no

 

 

參考:

https://blog.csdn.net/axing2015/article/details/83755143 --操作成功

https://blog.csdn.net/tingjie/article/details/80887463 --報錯如下,應該是目錄權限設置問題,待研究。

 

https://www.cnblogs.com/gz9218/p/85d25b3aeaea9b1f8455a889abedfdf2.html  --報錯:同上

https://www.cnblogs.com/heqiuyong/p/11072829.html -- 修改SSH服務端口。

https://serverfault.com/questions/910789/chroot-sftp-possible-to-allow-user-to-write-to-current-chroot-directory --用戶登錄后的默認路徑可寫入


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM