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