SSH和SFTP服务分离

1.原理

1.1 daemon和service

Linux操作系统提供的服务称为Service,而提供服务的程序称为Daemon。举例来说,达成循环型例行性工作排程服务(service)的程序为crond这个daemon。我理解通过servie启动特定配置的daemon。

1.2 sftp

SFTP是SSH的一部分,SFTP没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接操作。
通过新建另一个‘sshd’进程,作为sftp服务的deamon,完成服务分离。

2.分离SSH和SFTP服务

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

2.1 复制SSH相关文件,作为sftp的配置文件

2.1.1 /usr/lib/systemd/system/sshd.service

拷贝/usr/lib/systemd/system/目录下的sshd.service文件,放到/etc/systemd/system/目录下,命名为:sftpd.service

cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sftpd.service

2.1.2 /etc/pam.d/sshd

cp /etc/pam.d/sshd  /etc/pam.d/sftpd

2.1.3 /etc/ssh/sshd_config

cp /etc/ssh/sshd_config  /etc/ssh/sftpd_config

2.1.4 /usr/sbin/service

对sshd和sftpd进行软连接

ln -sf  /usr/sbin/service  /usr/sbin/rcsftpd

2.1.5 /usr/sbin/sshd

对sshd和sftpd进行软连接

ln -sf  /usr/sbin/sshd  /usr/sbin/sftpd

2.1.6 /etc/sysconfig/sshd

cp /etc/sysconfig/sshd  /etc/sysconfig/sftp

2.1.7 /var/run/sshd.pid

复制并清空

cp /var/run/sshd.pid  /var/run/sftpd.pid
> /var/run/sftpd.pid

2.2 修改SFTP配置文件

2.2.1 /etc/systemd/system/sftpd.service

vim /etc/systemd/system/sftpd.service

修改红框中的部分
在这里插入图片描述
如下红色字体部分


[Unit]
Description=sftpd server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sftp
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target


2.2.2 /etc/ssh/sftpd_config

vim /etc/ssh/sftpd_config

输入:set nu

2.2.2.1 Port

找到第17行,将

Port 22 

改成

Port 2222
2.2.2.2 PermitRootLogin

找到第38行,将

#PermitRootLogin yes

改成

PermitRootLogin no

就是取消该行的注释,并将yes改成no,这行参数的目的是拒绝root用户登录

2.2.2.3 PidFile

③找到116行,将

#PidFile /var/run/sshd.pid

改成

PidFile /var/run/sftpd.pid

就是取消该行的注释,并将sshd.pid改成sftpd.pid

2.2.2.4 Subsystem

找到第132行,将

Subsystem  sftp  /usr/libexec/openssh/sftp-server

注释

#Subsystem  sftp  /usr/libexec/openssh/sftp-server并添以下6行
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp

Match Group sftpusers   # 匹配sftp组的用户,若要匹配多个组,可用逗号分开

X11Forwarding no # 禁止用户使用端口转发

AllowTcpForwarding no # 禁止用户使用端口转发

ForceCommand internal-sftp # 只能用于sftp登录

ChrootDirectory /home/sftp   # 限制用户的根目录
2.2.2.5 添加sftpusers用户组并创建用户目录
groupadd sftpusers
mkdir -p /home/sftp
chown root:root /home/sftp
chmod 755 /home/sftp
mkdir -p /u01/scripts
vim /u01/sftpuseradd.sh

输入以下内容

#! /bin/bash
useradd -g sftpusers -d /home/sftp/$1 $1
chown $1:sftpusers /home/sftp/$1
# 文件所属用户读写执行,属组用户、其他用户无权限
chmod 700 /home/sftp/$1
echo $2 | passwd --stdin $1

增加执行权限,并添加用户

chmod 755 /u01/sftpuseradd.sh
# 第一个参数账号,第二个参数密码
sh /u01/sftpuseradd.sh sftpu xxxxxxxx
sh /u01/sftpuseradd.sh sftpu2 xxxxxxxx

3.启动sftp服务

3.1 禁用SELINUX

setenforce 0

sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config
若不设置,启动sftp时将报错,无法使用上面绑定的2222端口

3.1 启动服务

systemctl daemon-reload #使修改的sshd配置生效

systemctl start sftpd #启动sftp

3.2 登录验证

在这里插入图片描述
不能访问sftpu2用户文件夹
在这里插入图片描述
上传文件成功
在这里插入图片描述

4. 22端口禁止sftpusers用户登录(非必须)

4.1

编辑配置文件

vim /etc/ssh/sshd_config

个性化配置

#禁止指定用户登录,多个用户时用空格分隔
DenyUsers sftpu sftpu2
#禁止指定用户组登录,多个组时用空格分隔
DenyGroups sftpusers
#只允许这两个用户从192.168.0.101登录
AllowUsers   sftpu sftpu2@192.168.0.101

重启sshd服务

systemctl restart sshd

参考博文: link
参考博文: link
参考博文: link

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了将SSHSFTP服务分离,你可以按照以下步骤操作。 首先,找到你的SSH配置文件,通常在/etc/ssh/sshd_config。在这个文件中,你可以找到一个称为Subsystem的行,它指定了使用哪个程序来处理SFTP连接。在第132行,你会找到类似于"Subsystem sftp /usr/libexec/openssh/sftp-server"的内容。 接下来,你需要通过编辑SSHD配置文件来进行设置。通过使用编辑器打开你的SSHD配置文件,找到并修改"Subsystem sftp"行。将其修改为"Subsystem sftp internal-sftp"。这将使SSHD守护进程内部处理SFTP连接,而不是使用单独的sftp-server守护进程。保存并关闭文件。 最后,在修改完SSHD配置文件后,你需要重新加载SSH配置。你可以通过运行"systemctl reload sshd"命令来重新加载。这将使你的更改生效并将SSHSFTP服务分离。 这样,你就成功地将SSHSFTP服务分离了。现在,SSH将继续处理SSH连接,而SSHD守护进程将内部处理SFTP连接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SSHSFTP服务分离](https://blog.csdn.net/xx244/article/details/124709735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值