IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> SSH和SFTP服务分离 -> 正文阅读

[系统运维]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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:14:48  更:2022-05-14 10:16:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:55:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码