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

相关推荐
zzzhpzhpzzz13 分钟前
Ubuntu如何查看硬件型号
linux·运维·ubuntu
蜜獾云16 分钟前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
陌北v118 分钟前
Docker Compose 配置指南
运维·docker·容器·docker-compose
只会copy的搬运工38 分钟前
Jenkins 持续集成部署——Jenkins实战与运维(1)
运维·ci/cd·jenkins
娶不到胡一菲的汪大东1 小时前
Ubuntu概述
linux·运维·ubuntu
阿里嘎多学长1 小时前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_1 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
灯火不休➴1 小时前
[Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
linux·运维·服务器
小峰编程1 小时前
独一无二,万字详谈——Linux之文件管理
linux·运维·服务器·云原生·云计算·ai原生
张国荣家的弟弟2 小时前
【Yonghong 企业日常问题04】永洪BI可视化工具Linux部署全攻略(部署详解版)
linux·运维·github