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

相关推荐
todoitbo3 小时前
用虚拟局域网打通 Win/Mac/Linux 三端:跨设备协作的实用方案
linux·运维·macos
Sylvia-girl4 小时前
Linux下的基本指令1
linux·运维·服务器
CDN3605 小时前
360CDN SDK 游戏盾:轻量化接入 + 强防护实测
运维·游戏·网络安全
Stewie121385 小时前
Docker 面试题
运维·docker·容器
星纬智联技术5 小时前
GEO E2E 自动化验证测试文章
运维·自动化·geo
jarreyer6 小时前
CentOS 7 无法使用 yum 安装软件
linux·运维·centos
脆皮的饭桶6 小时前
结合使用,实现IPVS的高可用性、利用VRRP Script 实现全能高可用
运维·服务器·网络
RisunJan7 小时前
Linux命令-md5sum(计算和校验文件报文摘要的工具程序)
linux·运维
抹茶咖啡7 小时前
IT运维的365天--042 骚操作之--用IPSec给远程桌面上把锁
运维·网络·it运维
王琦03187 小时前
第三章 linux文件类型和根目录结构
linux·运维·服务器