CentOS7 分离SSH和SFTP服务

目的:为了安全,只让某个用户只能连sftp, 不能连ssh,包括其它用户也不能ssh过来

系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config
配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。

1. 复制SSH相关文件,作为sftp的配置文件
cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service

2. 拷贝/etc/pam.d/目录下的sshd文件,放到同目录,命名为:sftpd
cp /etc/pam.d/sshd /etc/pam.d/sftpd

3. 拷贝/etc/ssh/目录下的sshd_config文件,放到同目录,命名为:sftpd_config
cp /etc/ssh/sshd_config /etc/ssh/sftpd_config

4. 对service和rcsftpd进行软连接
ln -s /usr/sbin/service /usr/sbin/rcsftpd

5. 对sshd和sftpd进行软连接
ln -sf /usr/sbin/sshd /usr/sbin/sftpd

6. 拷贝/etc/sysconfig/目录下的sshd文件,放到同目录,命名为:sftp
cp /etc/sysconfig/sshd /etc/sysconfig/sftp

7. 拷贝/var/run/目录下的sshd.pid文件,放到同目录,命名为:sftpd.pid
cp /var/run/sshd.pid /var/run/sftpd.pid


二.修改复制好的配置文件
1. 修改/etc/systemd/system/目录下sftpd.service文件
vi /etc/systemd/system/sftpd.service

[Unit]
Description=sftpd server daemon

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sftp
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config

2. 修改/etc/ssh/目录下的sftpd_config文件
vi /etc/ssh/sftpd_config

AllowUsers sftpuser test@192.168.1.1 //只充许指定的用户连接,但在设了/bin/false只能sftp
Port 2222
PermitRootLogin no #38行
PidFile /var/run/sftpd.pid #116行

注释

#Subsystem sftp /usr/libexec/openssh/sftp-server并添以下5行
Subsystem sftp internal-sftp
ChrootDirectory /data/MINISTRY_IIT/ftphome
Match User sftpuser
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

3.清空/var/run/目录下的sftpd.pid文件内容
> /var/run/sftpd.pid

4.添加sftp的专用账户

useradd -g sftp -s /sbin/nologin -M sftpuser
passwd sftpuser
usermod -s /bin/false sftpuser

(pass: sftp168#)


5.重启sftpd服务
systemctl daemon-reload
systemctl start sftpd

三 . 测试

如果你链接服务器的时候出现下面的提示:

Write failed: Broken pipe Couldn’t read packet: Connection reset by peer
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,
否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。
注意以下两点原则:


目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。

目录开始一直往上到系统根目录为止都不可以具有群组写入权限

posted @ 2021-05-11 17:51  莫让年华付水流  阅读(130)  评论(0编辑  收藏  举报