搭建与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到的

相关推荐
在角落发呆19 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
裴东青21 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
哎呦,帅小伙哦21 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn21 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能
张小姐的猫21 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
CodeMartain1 天前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
xxx1x1x1 天前
极客向:DLL/运行库故障的底层逻辑与自动化修复方案
运维·自动化·dll文件·dll·dll修复·dll缺失·dll一键修复
YuanDaima20481 天前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能
lolo大魔王1 天前
Linux 数据文件处理实战:排序、搜索、压缩、归档一站式详解
linux·运维·服务器
llrraa20101 天前
配置docker国内镜像源
运维·docker·容器