栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

SSH和SFTP服务分离

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSH和SFTP服务分离

SSH和SFTP服务分离
  • 1.原理
    • 1.1 daemon和service
    • 1.2 sftp
  • 2.分离SSH和SFTP服务
    • 2.1 复制SSH相关文件,作为sftp的配置文件
      • 2.1.1 /usr/lib/systemd/system/sshd.service
      • 2.1.2 /etc/pam.d/sshd
      • 2.1.3 /etc/ssh/sshd_config
      • 2.1.4 /usr/sbin/service
      • 2.1.5 /usr/sbin/sshd
      • 2.1.6 /etc/sysconfig/sshd
      • 2.1.7 /var/run/sshd.pid
    • 2.2 修改SFTP配置文件
      • 2.2.1 /etc/systemd/system/sftpd.service
      • 2.2.2 /etc/ssh/sftpd_config
        • 2.2.2.1 Port
        • 2.2.2.2 PermitRootLogin
        • 2.2.2.3 PidFile
        • 2.2.2.4 Subsystem
        • 2.2.2.5 添加sftpusers用户组并创建用户目录
  • 3.启动sftp服务
    • 3.1 禁用SELINUX
    • 3.1 启动服务
    • 3.2 登录验证
  • 4. 22端口禁止sftpusers用户登录(非必须)
    • 4.1

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/881967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号