sftp 是 Secure File Transfer Protocol 的缩写,即安全文件传送协议,可为传输文件提供一种安全的加密方法。

sftp 为 SSH 的一部分,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的 FTP 要低,如果对网络安全性要求高,可使用 SFTP 代替 FTP。

因为安全需要,有时需要配置sshd以使得只允许sftp登录,而同时不允许ssh直接登录。

以下操作步骤在CentOS 7.6实际测试通过,可放心参考使用。

■ 添加用户组sftpgroup

groupadd sftpgroup

■ 添加用户sftpuser

useradd -g sftpgroup -d /home/sftp -s /sbin/nologin sftpuser

-s 指定不允许ssh登陆

■ 修改用户密码

passwd sftpuser

■ 配置sshd_config文件

vim /etc/ssh/sshd_config

增加或修改如下配置:

Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory /home/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Match Group sftpgroup 指定以下的子行配置是匹配 sftpgroup 用户组的。Match user userA,userB 则是匹配用户

ChrootDirectory /data/sftp/%u 设定用户访问的根文件夹。%h 代表用户 home 目录,%u 代表用户名

ForceCommand internal-sftp 该行强制执行内部 sftp,并忽略任何 ~/.ssh/rc 文件中的命令

AllowTcpForwarding no 是否允许 TCP 转发,默认值为 "yes"

X11Forwarding no 是否允许进行 X11 转发,默认值是 "no"

■ 设置正确的目录权限

要实现 Chroot 功能,目录权限设置非常重要,否则无法登录,给出的错误提示也很奇怪,难以排查、修正,导致踩坑半天,浪费很多时间!

以下为最佳设置实践,务必以此为准!

chown root:sftpgroup /home/sftp
chmod 755 /home/sftp

可以看到,ChrootDirectory的目录属主必须为root,属组必须为sftpgroup,其他用户或用户组为"只读+执行"

■ 重启sshd服务

systemctl restart sshd

■ 此时可以sftp登录

[root@node1:1 /home]# sftp sftpuser@node1
sftpuser@node1's password:
Connected to node1.
sftp> ls
sftp>
sftp>
sftp> pwd
Remote working directory: /

此时可以在sftp的根目录下建立指定用户的读写目录,即可正常使用sftp了,以下操作可参考。

sftp> mkdir test
Couldn't create directory: Permission denied
sftp> exit
[root@node1:1 /home]# cd /home/sftp
[root@node1:1 /home/sftp]# mkdir upload
[root@node1:1 /home/sftp]# chown -R sftpuser:sftpgroup upload
[root@node1:1 /home/sftp]# chmod -R 700 upload
[root@node1:1 /home/sftp]# ll
总用量 0
drwx------ 2 sftpuser sftpgroup 6 12月 22 10:55 upload
[root@node1:1 /home/sftp]# sftp sftpuser@node1
sftpuser@node1's password:
Connected to node1.
sftp> pwd
Remote working directory: /
sftp> cd upload
sftp> mkdir test
sftp> ls
test

作者后注:

网上搜到好几个类似的文章,都不能直接参考使用,再次验证了网文水平的参差不齐,真是让人头疼,浪费大家的时间。所以建议大家发出来的网文,一定要保证是确实可参考使用的,否则只会让人瞧不起

[最佳实践]配置sshd只允许sftp登录的更多相关文章

  1. 配置sshd的免密码登录

    在客户端上生成密钥: ssh-keygen -t rsa 然后上传到服务器上即可: ssh-copy-id username@remote-server -p22

  2. 大规模使用 Apache Kafka 的20个最佳实践

    必读 | 大规模使用 Apache Kafka 的20个最佳实践 配图来源:书籍<深入理解Kafka> Apache Kafka是一款流行的分布式数据流平台,它已经广泛地被诸如New Re ...

  3. Kafka在大型应用中的 20 项最佳实践

    原标题:Kafka如何做到1秒处理1500万条消息? Apache Kafka 是一款流行的分布式数据流平台,它已经广泛地被诸如 New Relic(数据智能平台).Uber.Square(移动支付公 ...

  4. 虚拟机最佳实践:单个 VM、临时存储和已上传磁盘

    大家好! 我是 Drew McDaniel,来自 Microsoft Azure虚拟机功能研发团队,我从团队成立之初就已加入. 在本博客文章中,我将分享一些最佳实践指南,帮助您充分利用您的Azure虚 ...

  5. 【转载】Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载六)Linux的网络配置

    本篇是Linux小白最佳实践第6篇,目的就是让白菜们了解Linux网络是如何配置的.Linux系统在服务器市场占有很大的份额,尤其在互连网时代,要使用计算机就离不开网络. 想每天能听到小妞的语音播报, ...

  6. ansible安装配置及最佳实践roles

    ansible是什么? ansible是一款轻量级配置管理工具,用于远程批量部署.安装.配置.类似的还有puppet.saltstack,各有所长,任君自选. 官方文档:http://docs.ans ...

  7. Windows Azure 安全最佳实践 - 第 5 部分:基于Claim 的标识,单点登录

    基于Claim的身份标识是处理网站与 Web 服务的身份认证和访问一种简单而强大的方式,无论您是在本地工作还是面向云工作.您可以通过减少自定义实施和使用基于Claim的单一简化标识模型,创建更安全的应 ...

  8. Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除

    最佳实践 SAML 授权仅仅在有限的时间进行校验.你需要确定运行你的应用的计算机时间与 IdP 的时间是同步的. 如果你应用中的用户和用户组是通过用户目录进行配置的,你通常希望用户来源目录和你的 Id ...

  9. maven 安装与配置最佳实践

    配置Maven环境变量 1.新建 maven home 环境变量      变量名:M2_HOME     变量值:D:\ProgramFiles\apache-maven-3.5.4       2 ...

  10. atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml

    atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml 1. yaml是个好的选择.. 1 2. 数据的层次结构--结构:hash,list,和block  ...

随机推荐

  1. 【webpack系列】从核心概念到上手配置

    前言 作为前端开发者,相信大家或多或少都接触过webpack,现如今webpack已经渗透在了前端的各个方面,所以我们有必要来了解并学习webpack,webpack 是一种用于构建 JavaScri ...

  2. 1.6 编写双管道ShellCode后门

    本文将介绍如何将CMD绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道.启动进程.传输数据等方面对这个功能进行详细讲解.此外,本文还将通过使用 ...

  3. P3134 [USACO16JAN] Lights Out G 关灯

    P3134 [USACO16JAN] Lights Out G 关灯 目录 P3134 [USACO16JAN] Lights Out G 关灯 [USACO16JAN] Lights Out G 题 ...

  4. Kali下载安装以及基础配置

    Kali官网:Kali Linux | Penetration Testing and Ethical Hacking Linux Distribution Kali下载地址:Get Kali | K ...

  5. AI 时代的视频云转码移动端化——更快、更好、更低、更广

    编者按: AI技术的落地是渐渐地从服务器端.云端落地,逐步到移动端及边缘设备上.这些年随着AI技术的进步,轻量级算法模型开始在移动端实时跑起来,并且移动端算法也在不断进行迭代和完善,而对于实时直播场景 ...

  6. Blazor如何跟随“系统主题”?

    1. 前言 跟随系统主题已经是绝大多数App和网站的标配 但是如何在Blazor中跟随系统主题? 只找到Masa Blazor技术团队发的 MAUI + Masa Blazor 开发界面跟随系统主题切 ...

  7. 2023-7-26 Dynamic替代部分反射的简单实现方式

    Dynamic与反射的使用 [作者]长生 实体类 public class School{ public int GetAge(){ return 100; } } 使用反射获取对象里的方法 Scho ...

  8. 暑假刷题记 B

    动态规划 字符串 杂题 A:Animals and Puzzle B:Vanya and Treasure 根号分治. 实际上是从 \((1, 1)\) 先找一个 \(1\),再找一个 \(2\dot ...

  9. JavaScript中单例模式这样用

    如果希望自己的代码更优雅.可维护性更高以及更简洁,往往离不开设计模式这一解决方案. 在JS设计模式中,最核心的思想:封装变化(将变与不变分离,确保变化的部分灵活,不变的部分稳定). 单例模式 那么来说 ...

  10. win10右键添加打开cmd窗口的命令

    创建文本文档,复制如下内容: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\b ...