linux ssh和sftp服务分离

一、简介

默认linux的ssh和sftp端口都是22,有时候为了安全考虑,我们只想给某些用户sftp传输文件,不想他们拥有ssh的权限,这该怎么做呢?这篇博客我就讲讲如何将ssh和sftp的端口分离。

二、分离ssh和sftp

1、配置分离

默认情况下,linux的ssh和sftp服务都是用的sshd_config文件,所以我们需要配置文件分离,先拷贝配置,root用户执行命令:

cp /etc/ssh/sshd_config /etc/ssh/sftpd_config

修改配置

vi /etc/ssh/sftpd_config

在#Port 22的下面增加2行(必选)

# 设置sftp端口
Port 20022

在#MaxStartups 10:30:100下方添加3行(可选)

# 最大并发数调整为1000
# 调整sftp连接数,默认值是10,所以如果用的人比较多,则需要酌情调整
MaxStartups 1000:30:1000

在#PermitRootLogin yes的下面增加2行(可选)

# 不允许root用户登录sftp
PermitRootLogin no

在#PidFile /var/run/sshd.pid的下面增加1行(必选)

# 设置sftp进程文件
PidFile /var/run/sftpd.pid

注释Subsystem sftp /usr/libexec/openssh/sftp-server,并在其下方增加13行(必选)

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

2、服务分离

默认情况下,sftp是ssh的子服务,所以我们需要先拷贝ssh的服务文件作为sftp使用,root用户执行命令:

cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service

cp /etc/pam.d/sshd /etc/pam.d/sftpd

cp /etc/sysconfig/sshd  /etc/sysconfig/sftp

修改配置:

vi /etc/systemd/system/sftpd.service

将Description=OpenSSH server daemon改成Description=sftpd server daemon

Description=sftpd server daemon

将EnvironmentFile=/etc/sysconfig/sshd改成EnvironmentFile=/etc/sysconfig/sftp

# 配置文件从sshd改成sftp专用的
EnvironmentFile=/etc/sysconfig/sftp

将ExecStart=/usr/sbin/sshd -D $OPTIONS改成ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config

# sftp服务绑定sftp、配置文件
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config

3、软连接

root执行命令

ln -sf  /usr/sbin/service  /usr/sbin/rcsftpd
ln -sf  /usr/sbin/sshd  /usr/sbin/sftpd

4、生成sftp进程号文件

root执行命令

touch /var/run/sftpd.pid

5、取消22端口的sftp功能

注释/etc/ssh/sshd_config文件的Subsystem sftp /usr/libexec/openssh/sftp-server
注释后的22端口只能用于ssh登录

# Subsystem     sftp    /usr/libexec/openssh/sftp-server

6、修改目录权限

目录权限设置原则:
ChrootDirectory设置的目录权限及其所有的上级目录权限,用户(user)和组(group)必须是root;
ChrootDirectory设置的目录权限及其所有的上级目录权限,只有用户(user)能拥有写权限,权限最大只能是755

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

7、新增两个测试用户

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

否则会出现很多棘手问题,密码自行设置

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

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

8、启动sftp服务

关闭selinux,否则无法启动sftpd服务

vi /etc/selinux/config

将SELINUX=enforcing改成SELINUX=permissive

SELINUX=permissive

使selinux生效

setenforce 0

重载配置

systemctl daemon-reload

启动服务

systemctl start sftpd

重启服务(如果需要的话)

systemctl restart sftpd

9、重启sshd服务

如果有执行第5点,则需要重启sshd服务

systemctl restart sshd

三、验证

1、使用20022端口无法登陆ssh

[root@localhost ~]# ssh -P 20022 test1@192.168.109.133
ssh: connect to host 20022 port 22: Invalid argument

2、使用22端口无法登陆ssh

[root@localhost ~]# ssh -P 22 test1@192.168.109.133
ssh: connect to host 22 port 22: Invalid argument

3、使用22端口无法登陆sftp

[root@localhost ~]# sftp -P 22 test1@192.168.109.133
test1@192.168.109.133's password: 
subsystem request failed on channel 0
Couldn't read packet: Connection reset by peer

4、使用20022端口可以登陆sftp

[root@localhost ~]# sftp -P 20022 test1@192.168.109.133
test1@192.168.109.133's password: 
Connected to 192.168.109.133.
sftp> 

# 查看文件夹(这里test1用户可以看到test2的目录,但是cd test2后会报无权限查看文件)
sftp> ls -ltr
drwx------    3 1001     1001           78 Dec  7 06:14 test1
drwx------    3 1002     1001          108 Dec  7 06:44 test2

# 进入test1目录可以看到test1用户的文件
sftp> cd test1
sftp> ls -ltr
-rw-r--r--    1 1001     1001          109 Dec  7 06:44 DEV.bat
-rw-r--r--    1 1001     1001            0 Dec  7 06:44 abc.txt
# 进入test2目录提示无权限查看文件
sftp> cd ../test2
sftp> ls -ltr
remote readdir("/test2"): Permission denied

其他用户组的用户可以使用22端口的ssh和sftp功能,这个就不演示了。

四、总结

以上就是博主在ssh和sftp分离时候的操作,博主新建一个虚拟机,按照上述步骤,一次成功。有不懂的可以在评论区留言。

五、遗留问题

ChrootDirectory这个属性,有其他博主说可以设置成%h或者%u,这个我测试出来有问题,总是报错:bad ownership or modes for chroot directory “/home/sftp/test1” [postauth],也希望有大佬能指点一二。

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
为了将SSHSFTP服务分离,你可以按照以下步骤操作。 首先,找到你的SSH配置文件,通常在/etc/ssh/sshd_config。在这个文件中,你可以找到一个称为Subsystem的行,它指定了使用哪个程序来处理SFTP连接。在第132行,你会找到类似于"Subsystem sftp /usr/libexec/openssh/sftp-server"的内容。 接下来,你需要通过编辑SSHD配置文件来进行设置。通过使用编辑器打开你的SSHD配置文件,找到并修改"Subsystem sftp"行。将其修改为"Subsystem sftp internal-sftp"。这将使SSHD守护进程内部处理SFTP连接,而不是使用单独的sftp-server守护进程。保存并关闭文件。 最后,在修改完SSHD配置文件后,你需要重新加载SSH配置。你可以通过运行"systemctl reload sshd"命令来重新加载。这将使你的更改生效并将SSHSFTP服务分离。 这样,你就成功地将SSHSFTP服务分离了。现在,SSH将继续处理SSH连接,而SSHD守护进程将内部处理SFTP连接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SSHSFTP服务分离](https://blog.csdn.net/xx244/article/details/124709735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九二战歌

原创不易,尽量不白瓢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值