Sftp是安全文獻傳輸協議,本身沒有守護進程,包含在ssh中,端口也默認為22號端口。
如想分離搭建,需要添加一個sftpd單獨的守護進程 用來監聽sftp服務。
以下以創建sftp用戶組,添加psbc用戶,登錄路徑在opt/file/psbc 為例,具體步驟如下:
1. 創建一個用戶組 命名為sftp
Groupadd sftp
2. 創建一個用戶
#用戶名psbc 密碼psbc
useradd -g sftp -s /bin/false psbc
passwd psbc
3. 修改用戶所在文件夾
sftp組用戶 統一放到 opt/file下,再按照用戶名區分
mkdir -p /opt/file/psbc #添加文件夾
usermod -d /opt/file/psbc psbc #將用戶psbc登錄目錄換為 /opt/file/psbc
4.開始添加一個sftpd單獨的守護進程 用來監聽sftp服務
4.1 拷貝/usr/lib/systemd/system/目錄下的sshd.service文件,放到/etc/systemd/system/目錄下,命名為:sftpd.service
cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service
4.2 拷貝/etc/pam.d/目錄下的sshd文件,放到同目錄,命名為:sftpd
cp /etc/pam.d/sshd /etc/pam.d/sftpd
4.3 拷貝/etc/ssh/目錄下的sshd_config文件,放到同目錄,命名為:sftpd_config
cp /etc/ssh/sshd_config /etc/ssh/sftpd_config
4.4 對service和rcsftpd進行軟連接
ln -sf /usr/sbin/service /usr/sbin/rcsftpd
4.5 對sshd和sftpd進行軟連接
ln -sf /usr/sbin/sshd /usr/sbin/sftpd
4.6 拷貝/etc/sysconfig/目錄下的sshd文件,放到同目錄,命名為:sftp
cp /etc/sysconfig/sshd /etc/sysconfig/sftp
4.7 拷貝/var/run/目錄下的sshd.pid文件,放到同目錄,命名為:sftpd.pid
cp /var/run/sshd.pid /var/run/sftpd.pid
5.修改復制好的配置文件
5.1修改/etc/systemd/system/目錄下sftpd.service文件
vim /etc/systemd/system/sftpd.service
修改為下圖圈紅部分:
5.2 修改/etc/ssh/目錄下的sftpd_config文件
vim /etc/ssh/sftpd_config
(1)首先修改端口號 第十七行端口號改為想分離的端口
(2)其次修改 拒絕root用戶登錄
將
#PermitRootLogin yes
改成
PermitRootLogin no
就是取消該行的注釋,並將yes改成no
(3)修改PidFile路徑:
將
#PidFile /var/run/sshd.pid
改成
PidFile /var/run/sftpd.pid
就是取消該行的注釋,並將sshd.pid改成sftpd.pid
(4) 開通sftp服務 添加sftp用戶組 並設置根目錄
注釋
#Subsystem sftp /usr/libexec/openssh/sftp-server並添以下6行
Subsystem sftp internal-sftp
Match Group sftp #這行是添加sftp用戶組
ChrootDirectory /opt/file/%u #添加用戶登錄根目錄,此目錄上級的目錄不可訪問
#這里%u 指的是用戶名的意思
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
6.清空/var/run/目錄下的sftpd.pid文件內容
> /var/run/sftpd.pid
7.設定Chroot目錄權限
#上面配置的ChrootDirectory目錄,往上的路徑,所屬用戶必須為root,用戶組只有讀權限
chown root:sftp /opt/file
chmod 755 /opt/file
chown root:sftp /opt/file/psbc
chmod 755 /opt/file/psbc
8.建立SFTP用戶登入后可寫入的目錄
#照上面設置后,在重啟sshd服務后,用戶psbc已經可以登錄。但使用chroot指定根目錄后,根應該是無法寫入的,所以要新建一個upload目錄供psbc上傳文件。
#這個目錄所有者為psbc,所有組為sftp,所有者有寫入權限,而所有組無寫入權限。命令如下:
mkdir /opt/file/psbc/upload
chown psbc:sftp /opt/file/psbc/upload
chmod 755 /opt/file/psbc/upload
9.修改/etc/selinux/config
vi /etc/selinux/config
#將文件中的SELINUX=enforcing 修改為 SELINUX=disabled ,然后保存。
#再輸入命令
setenforce 0
10、重啟sshd服務及sftpd
#輸入命令重啟服務。
service sshd restart
service sftpd start
一、測試訪問sftp服務器
Sftp和ftp不同,不能在瀏覽器上直接訪問,需要專用連接工具
1. 在其他服務器上嘗試連接:
# sftp -oPort=5022 psbc@ ip地址
2.通過專用軟件(如fileZilla)連接
二、搭建失敗常見問題:
一些錯誤問題: Connection reset by peer
這個是要求自sftp文件夾之上的組都沒有寫入權限 路徑以上文件夾權限為(drwxr -xr -x)
且文件夾所屬用戶 為 root
三、搭建好的添加新用戶
無需改動配置 只需要添加sftp用戶 配置好文件夾即可
例子:
#添加用戶abc
useradd -g sftp -s /bin/false abc
#添加abc文件夾 設置為abc用戶初始登錄文件夾
mkdir /opt/file/abc
usermod -d /opt/file/abc abc
# 改變讀寫權限
chown root:sftp /opt/file/abc
chmod 755 /opt/file/abc
#建立可供abc讀寫權限的文件夾upload
mkdir /opt/file/abc/upload
chown abc:sftp /opt/file/abc/upload
chmod 755 /opt/file/abc/upload
# 重啟sftpd服務
systemctl start sftpd.service