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

相关推荐
薛定谔的猫19821 天前
RAG(二)基于 LangChain+FAISS + 通义千问搭建轻量级 RAG 检索增强生成系统
运维·服务器·langchain
米高梅狮子1 天前
4. Linux 进程调度管理
linux·运维·服务器
再创世纪1 天前
让USB打印机变网络打印机,秀才USB打印服务器
linux·运维·网络
fengyehongWorld1 天前
Linux ssh端口转发
linux·ssh
昨夜见军贴06161 天前
IACheck AI审核如何实现自动化来料证书报告审核,全面提升生产效率与合规水平
运维·人工智能·自动化
化名三爷1 天前
SSH 公钥设置
git·gitee·ssh·ssh公钥·git公钥
浩子智控1 天前
电子产品设计企业知识管理
运维·服务器·eclipse·系统安全·硬件工程
龙月1 天前
journalctl命令以及参数详解
linux·运维
Tony_long74831 天前
锐捷交换机忘记密码怎么办
运维·网络·信息与通信
vortex51 天前
AppArmor 受限 Shell 环境绕过技术分析:利用动态链接器路径差异实现 Profile 逃逸
linux·运维·服务器·网络安全