搭建与ssh端口分离的sftp服务

实现SFTP 与 SSH 服务分开,以增强安全性和管理性,只允许指定用户sftp通过指定端口(此处为2222端口)传输文件,没有ssh的权限。

目录

一、配置ssh和sftp服务

1、配置文件分离

2、修改sftpd服务相关文件

[2.1 /etc/systemd/system/sftpd.service文件](#2.1 /etc/systemd/system/sftpd.service文件)

[2.2 /etc/ssh/sftpd_config文件](#2.2 /etc/ssh/sftpd_config文件)

[2.3 /var/run/sftpd.pid文件](#2.3 /var/run/sftpd.pid文件)

[2.4 /etc/selinux/config文件](#2.4 /etc/selinux/config文件)

3、取消22端口的sftp功能

4、服务重启

二、新建sftp用户

1、修改/etc/ssh/sftpd_config文件并重启服务

2、修改ChrootDirectory目录权限

3、新增测试用户

4、验证端口分离

三、只允许用户sftp,不允许ssh

1、新建用户

2、原有用户

四、sftp上传和下载

1、本机操作(get&put)

2、验证

一、配置ssh和sftp服务

1、配置文件分离

sftp是ssh的子服务,所以我们需要先拷贝ssh的服务文件作为sftp使用

复制代码
#复制ssh配置文件框架新建为sftp服务配置文件
cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sftpd.service
cp /etc/pam.d/sshd  /etc/pam.d/sftpd
cp /etc/ssh/sshd_config  /etc/ssh/sftpd_config
cp /etc/sysconfig/sshd  /etc/sysconfig/sftp
cp /var/run/sshd.pid  /var/run/sftpd.pid

#软链接将 service 和 sshd 命令替换为 rcsftpd 和 sftpd
ln -sf  /usr/sbin/service  /usr/sbin/rcsftpd
ln -sf  /usr/sbin/sshd  /usr/sbin/sftpd

2、修改sftpd服务相关文件

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.target
Wants=sshd-keygen.target

[Service]
Type=notify
EnvironmentFile=/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=/etc/sysconfig/sshd-permitrootlogin
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 /etc/ssh/sftpd_config文件

复制代码
# 修改端口,与ssh端口区分
Port 2222
复制代码
# 修改存储sftp运行pid文件
PidFile /var/run/sftp.pid
复制代码
# 若有以下配置,我们先把这里先注释掉后面统一按需加
# Subsystem       sftp    /usr/libexec/openssh/sftp-server
#Match  User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand internal-sftp
复制代码
# 在文件中(任意位置,但是为了方便查看在文件最后)添加如下配置
Subsystem sftp internal-sftp

# Match这里是sftp登录匹配规则,这里按照需要配置
# 我这里配置的是sftpgroup用户组的所有用户都能登录
# 原配置是针对单个user
Match Group sftpgroup

# 这里是ftp的根目录,所有ftp用户登录后强制重定向到该目录
# 这里配置的/%u指跳转到该用户名同名的文件夹下
# 例如创建/ftpdata/ftpa目录,那么ftpa用户登录后就直接访问到/ftpdata/ftpa,不能访问高层级目录
# 这里需要特别注意,配置的这个根目录的用户权限一定只能是root:root
ChrootDirectory /ftpdata/%u
ForceCommand internal-sftp

2.3 /var/run/sftpd.pid文件

清空sftp进程号文件

复制代码
echo ''>/var/run/sftpd.pid
或者
vi /var/run/sftpd.pid慢慢dd删除

2.4 /etc/selinux/config文件

复制代码
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
########################修改下面这行
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

3、取消22端口的sftp功能

注释/etc/ssh/sshd_config文件的Subsystem sftp /usr/libexec/openssh/sftp-server

注释后的22端口只能用于ssh登录

复制代码
vim /etc/ssh/sshd_config
# Subsystem     sftp    /usr/libexec/openssh/sftp-server

4、服务重启

复制代码
systemctl daemon-reload
systemctl restart sftpd
systemctl restart sshd
systemctl enable sftpd

二、新建sftp用户

1、修改**/etc/ssh/sftpd_config文件并重启服务**

复制代码
vim /etc/ssh/sftpd_config
# 指定使用sftp服务使用系统自带的internal-sftp
Subsystem sftp internal-sftp
# 匹配sftp的用户组
Match Group sftpusers
# 禁止用户使用端口转发
X11Forwarding no
# 禁止用户使用端口转发
AllowTcpForwarding no
# 只能用于sftp登录
ForceCommand internal-sftp
# 限制用户的根目录
ChrootDirectory /home/sftp
复制代码
systemctl restart sftpd

2、修改ChrootDirectory目录权限

目录权限设置原则:

ChrootDirectory设置的目录权限及其所有的上级目录权限,用户(user)和组(group)必须是root;

ChrootDirectory设置的目录权限及其所有的上级目录权限,只有用户(user)能拥有写权限,权限最大只能是755

复制代码
# 需要设置ChrootDirectory的路径为root用户和root组
chown root:root /home/sftp

3、新增测试用户

用户组需要和/etc/ssh/sftpd_config文件中Match Group sftpusers一致,
用户目录需要在/etc/ssh/sftpd_config文件中ChrootDirectory /home/sftp目录下

复制代码
#指定用户组为sftpusers,家目录位于/home/sftp/下,密码自定
useradd -g sftpusers -d /home/sftp/zhuo01 zhuo01
passwd zhuo01

useradd -g sftpusers -d /home/sftp/zhuo02 zhuo02
passwd zhuo02

4、验证端口分离

此处使用zhuo01演示,zhuo02相同

复制代码
#失败
ssh -p 2222 zhuo01@192.168.79.86
sftp -P 22 zhuo01@192.168.79.86

#成功
ssh -p 22 zhuo01@192.168.79.86
sftp -P 2222 zhuo01@192.168.79.86

三、只允许用户sftp,不允许ssh

1、新建用户

复制代码
useradd -g sftpusers -d /home/sftp/zhuo03 -s /sbin/nologin zhuo03
passwd zhuo03
复制代码
#失败
ssh -p 2222 zhuo01@192.168.79.86
sftp -P 22 zhuo01@192.168.79.86
ssh -p 22 zhuo01@192.168.79.86

#成功
sftp -P 2222 zhuo01@192.168.79.86

2、原有用户

此处拿zhuo01演示

复制代码
usermod -s /sbin/nologin zhuo01

四、sftp上传和下载

此处拿zhuo01演示,本机IP地址为192.168.79.87,目标主机(配置过分离的主机)IP地址为192.168.79.86

1、本机操作(get&put)

复制代码
sftp -P 2222 zhuo01@192.168.79.86
cd zhuo01

#使用get从目标主机下载文件到本机
sftp> get sftptest.txt 

#使用put将本机文件上传到目标主机
sftp> put /var/log/messages  

2、验证

本机get到的

目标主机put到的

相关推荐
Fcy6481 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满1 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9031 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技3 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀3 小时前
Linux环境变量
linux·运维·服务器
zzzsde3 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º4 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~5 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流5 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器