如何在Ubuntu上创建安全的SFTP服务? 时间: 2023-08-29 17:27 分类: 猿码 热度: 5261°C 评论 ###什么是 SFTP? SFTP 代表安全文件传输协议。与代表文件传输协议的 FTP 不同,SFTP 对传输的数据进行加密,确保安全性和完整性。这意味着您的文件将保持机密并且在传输过程中不会被篡改。 ###一、前提条件 ####1、安装有Ubuntu系统的云服务器 推荐阿里云、腾讯云或华为云这样的厂商的服务器,比较稳定。 - 阿里云服务器:https://iil.ink/aliecs - 腾讯云服务器:https://iil.ink/tengxuncvm - 华为云服务器:https://iil.ink/huaweiyunyouhui ####2、有root或sudo访问权限 服务器购买之后,就会给你root帐号和密码。 ###二、安装OpenSSH服务 Ubuntu 通常预装了 SSH 客户端。但是,出于今天的目的,我们需要单独 OpenSSH 服务。 ``` sudo apt update sudo apt install openssh-server ``` 安装完成后,检查服务的状态: ``` sudo systemctl status ssh ``` 在“Active”看到“active (running)” ![](https://image.gaomeluo.com/blog/2023/08/1693373072.png) 检查systemctl服务状态 如果该服务未运行,可以使用以下命令启动它: ``` sudo systemctl start ssh ``` ###三、配置SFTP ####1、创建专用 SFTP 组和用户 建议(根据个人经验)为 SFTP 设置专门的组和用户。这可确保隔离并更好地控制权限。 创建一个群组: ``` sudo groupadd sftp_users ``` 使用sftpuser创建一个用户 ``` sudo useradd -m sftpuser -g sftp_users ``` 为该用户设置密码: ``` sudo passwd sftpuser ``` ![](https://image.gaomeluo.com/blog/2023/08/1693373613.png) 创建专用 SFTP 组和用户 ####2、配置 SSHD 配置文件 用编辑器打开 SSHD 配置文件。我通常使用nano,或者使用vim等: ``` sudo nano /etc/ssh/sshd_config ``` 向下滚动并查找`Subsystem sftp /usr/lib/openssh/sftp-server`。#通过在行首添加 a 将其注释掉。在其下方添加: ``` Subsystem sftp internal-sftp ``` 在文件的最底部添加以下代码: ``` Match Group sftp_users ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ``` ![](https://image.gaomeluo.com/blog/2023/08/1693373878.png) 配置sftp服务 这是最终的编辑: 按 CTRL X 保存并退出编辑器,然后按“Y”保存文件。 这里做的目的是告诉 SSH 服务器限制该组的sftp_users用户他们的主目录使用 SFTP 协议。 ####3、调整目录权限 为了使 chroot 环境正常工作,用户的主目录需要有 root 权限: ``` sudo chown root:root /home/sftpuser ``` 用户需要有上传和下载文件的权限,因此为此创建一个目录: ``` sudo mkdir /home/sftpuser/files sudo chown sftpuser:sftp_users /home/sftpuser/files ``` ####4、重新启动 SSH 服务 重新启动 SSH 服务 ``` sudo systemctl restart ssh ``` ![](https://image.gaomeluo.com/blog/2023/08/1693374253.png) 调整目录权限并重启SSH服务 ####5、测试 SFTP 服务 我们测试一下我们的设置: ``` sftp sftpuser@your_server_ip ``` sftpuser出现提示时输入您设置的密码。 ![](https://image.gaomeluo.com/blog/2023/08/1693374364.png) 如果一切都正确完成,需要登录files到sftpuser. 继续使用put、get和ls命令上传、下载或列出文件。 ###温馨提示: - 安全第一:始终保持系统和软件更新。定期更新 OpenSSH 服务器以受益于最新的安全补丁。 - 备份:在更改任何配置文件之前,进行备份是一个好习惯。 - 用户管理:虽然我们仅创建了一个用户进行演示,但你可以创建更多用户并将其添加到组中sftp_users以向他们提供访问权限。 ###常见故障排除技巧 设置 SFTP 服务器时,尤其是使用 chroot 环境等配置时,遇到问题并不罕见。但是,借助正确的故障排除技巧,你可以有效解决大多数问题: ####1、检查 SSHD 配置: 遇到问题时要做的第一件事是验证你的sshd_config文件: ``` sshd -t ``` 该命令将检查语法错误。如果你的配置存在问题,这通常会直接指出问题所在。 ####2、详细日志记录: 当遇到连接问题时,详细日志记录可以成为救星: - 在客户端:使用以下命令-vvv的选项sftp:`sftp -vvv sftpuser@10.0.2.15` - 在服务器端:检查日志。在 Ubuntu 上,SSH 日志通常存储在`/var/log/auth.log`. 跟踪日志,然后尝试连接:`tail -f /var/log/auth.log` ####3、目录权限: 如果你要对用户进行 chroot,请记住: - chroot 目录(及其之上的所有目录)必须由root任何其他用户或组拥有且不可写入。 - 在 chroot 目录中,用户应该有一个他们拥有并且可以写入的目录。 ####4、确保 SSH 服务正在运行: 看起来很简单,但有时该服务可能无法运行: ``` sudo systemctl status ssh ``` 如果它没有运行,请使用以下命令启动它: ``` sudo systemctl start ssh ``` ####5、防火墙和端口设置: 确保你的防火墙设置允许 SSH 的端口(通常为 22): ``` sudo ufw status ``` 如果不允许端口 22,您可以使用以下命令启用它: ``` sudo ufw allow 22 ``` ####6、不要使用 Chroot 进行测试: 暂时禁用 chroot 设置sshd_config并尝试连接。如果问题出在 chroot 或设置的其他部分,这可以帮助你缩小范围。 ####7、检查用户的Shell: 确保用户拥有有效的 shell。如果 shell 设置为`/sbin/nologin`或`/bin/false`,则 SFTP 可以,但确保用户不需要通过 SSH 登录。 ####8、更改后重新启动服务: 每次更改sshd_config后,请记住重新启动 SSH 服务: ``` sudo systemctl restart ssh ``` ####9、子系统配置: 确保 SFTP 子系统中定义了一个sshd_config。chroot 设置的首选是`ForceCommand internal-sftp`. ####10、磁盘配额和空间: 有时,由于磁盘配额或磁盘空间不足,用户无法上传。检查可用空间: ``` f -h ``` 请确保对其进行适当设置。 ###扩展阅读: 【[Nginx如何配置一个静态WEB服务?](https://blog.gaomeluo.com/archives/nginxpeizhiweb/ "Nginx如何配置一个静态WEB服务?")】 【[Linux命令大全 摆脱死记Linux命令的烦恼](https://blog.gaomeluo.com/archives/linuxdaquan/ "Linux命令大全 摆脱死记Linux命令的烦恼")】 【[如何限制Linux系统服务器上传文件的大小?](https://blog.gaomeluo.com/archives/linuxscfjdx/ "如何限制Linux系统服务器上传文件的大小?")】 【[如何在Linux中轻松删除源安装的软件包?](https://blog.gaomeluo.com/archives/start/ "如何在Linux中轻松删除源安装的软件包?")】 【[如何优化Vue项目性能?](https://blog.gaomeluo.com/archives/vuexingnengyouhua/ "如何优化Vue项目性能?")】 【[Nginx如何配置一个静态WEB服务?](https://blog.gaomeluo.com/archives/nginxpeizhiweb/ "Nginx如何配置一个静态WEB服务?")】 【[如何在CentOS 7上安装Odoo 12](https://blog.gaomeluo.com/archives/centos7odoo12/ "如何在CentOS 7上安装Odoo 12")】 【[如何在 Ubuntu 上安装 Nagios?](https://blog.gaomeluo.com/archives/UbuntuNagios/ "如何在 Ubuntu 上安装 Nagios?")】 【[如何在 CentOS 8 上安装 OpenCV?](https://blog.gaomeluo.com/archives/CentOS8OpenCV/ "如何在 CentOS 8 上安装 OpenCV?")】 【[如何在 Ubuntu 上安装和使用 Nginx?](https://blog.gaomeluo.com/archives/UbuntuNginx/ "如何在 Ubuntu 上安装和使用 Nginx?")】 【[怎么给Node.js后端项目启用https+域名访问接口?](https://blog.gaomeluo.com/archives/nodejshttps/ "怎么给Node.js后端项目启用https+域名访问接口?")】 标签: Linux 服务器 ubuntu sftp
评论已关闭