Ubuntu搭建SFtp

本文介绍如何在服务器上配置SFTP服务,使特定用户组仅能通过SFTP传输文件,无法使用SSH终端访问,同时限制他们只能访问指定的共享文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:在服务器上开通SFTP文件服务,允许某些用户上传及下载文件。但是这些用户只能使用SFTP传输文件,不能使用SSH终端访问服务器,并且SFTP不能访问系统文件(即所谓的“Jail(监狱)”)。系统管理员则既能使用SFTP传输文件,也能使用SSH远程管理服务器。

 为了便于讨论,我假设我将允许sftp-users用户组内的用户使用SFTP,但不允许使用SSH Shell,且该组用户将被"监狱"(修改系统根目录)。我将在sftp-users组内创建一个用户“alice”。而我将允许ssh-users使用SFTP以及SSH。系统管理员的账户名为admin。

第01步,如果还没有安装OpenSSH服务器,先安装它。

sudo apt-get install openssh-server

第02步,为SFTP访问创建用户组,便于管理权限。

sudo addgroup sftp-users

第03步,创建SFTP用户,并配置相应权限。这里第二行的意思是将alice从所有其他用户组中移除并加入到sftp-users组,并且关闭其Shell访问。如果想深入了解usermod命令,可以使用以下”man usermod”命令查看帮助文档。

sudo adduser alice
sudo usermod -G sftp-users -s /bin/false alice

第04步,创建SSH用户组,并把管理员加入到该组(注意usermod中的-a参数的意思是不从其他用户组用移除)。

sudo addgroup ssh-users
sudo usermod -a -G ssh-users admin

第05步,准备“监狱”的根目录及共享目录。这里解释一下,“监狱”的根目录必须满足以下要求:所有者为root,其他任何用户都不能拥有写入权限。因此,为了让SFTP用户能够上传文件,还必须在“监狱”根目录下再创建一个普通用户能够写入的共享文件目录。为了便于管理员通过SFTP管理上传的文件,我把这个共享文件目录配置为:由admin所有,允许sftp-users读写。这样,管理员和SFTP用户组成员就都能读写这个目录了。

sudo mkdir /home/sftp_root
sudo mkdir /home/sftp_root/shared
sudo chown admin:sftp-users /home/sftp_root/shared
sudo chmod 770 /home/sftp_root/shared

第06步,修改SSH配置文件。

sudo vi/etc/ssh/sshd_config

在sshd_config文件的最后,添加以下内容:

AllowGroups ssh-users sftp-users
Match Group sftp-users
    ChrootDirectory /home/sftp_root
    AllowTcpForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

这些内容的意思是:
只允许ssh-uers及sftp-users通过SSH访问系统;
针对sftp-users用户,额外增加一些设置:将“/home/sftp_root”设置为该组用户的系统根目录(因此它们将不能访问该目录之外的其他系统文件);禁止TCP Forwarding和X11 Forwarding;强制该组用户仅仅使用SFTP。

第07步,重启系统以便使新配置生效。

sudo reboot now

搭建完成用WinScp工具即可完成上传与下载。如果权限不够请参考Ubuntu给用户授权

### 如何在 Ubuntu 上安装和配置 SFTP 服务 #### 创建新的 SFTP 用户并添加到组 为了增强系统的安全性,可以创建一个新的用户专门用于 SFTP 访问,并将其分配给特定的用户组。以下是实现此操作的具体命令: ```bash sudo groupadd sftp_users sudo useradd -m sftpuser -g sftp_users sudo passwd sftpuser ``` 通过以上命令完成了一个名为 `sftpuser` 的新用户的创建,并将其加入到 `sftp_users` 组中[^1]。 #### 设置 SFTP 目录及其权限 为了让 SFTP 用户能够安全地访问指定目录而不影响其他部分的数据,需合理设置目标目录以及其权限结构。假设要让该用户只读写 `/srv/sftp/sftpuser` 下的内容,则可执行如下步骤来准备这个环境: ```bash sudo mkdir -p /srv/sftp/sftpuser/files sudo chown root:root /srv/sftp/sftpuser/ sudo chmod 755 /srv/sftp/sftpuser/ # 将实际工作区设为子文件夹 files sudo chown sftpuser:sftp_users /srv/sftp/sftpuser/files sudo chmod 700 /srv/sftp/sftpuser/files ``` 这里需要注意的是父级目录应由超级管理员拥有以防止越权行为发生;而具体的工作区域则赋予对应用户适当的操作权利[^1]。 #### 修改 SSH 配置启用内部 SFTP 子系统 编辑SSH守护进程的主要配置文件 `/etc/ssh/sshd_config` ,修改其中关于SFTP的部分以便更严格地限制连接方式与功能范围: ```bash Subsystem sftp internal-sftp Match Group sftp_users ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no ``` 上述更改实现了对于属于`sftp_users`群组成员更加精细化的管控措施——强制他们进入自己的家目录作为根路径(`ChrootDirectory`),同时禁用了不必要的附加特性如TCP转发或X窗口支持等功能[^3]。 最后重启SSH服务使得改动生效: ```bash sudo systemctl restart sshd ``` 至此完成了整个基于Ubuntu平台下的标准SFTP服务器搭建过程描述[^2]。 ### 注意事项 尽管SFTP提供了较高的安全保障,但在大规模数据交换场景下可能存在性能瓶颈等问题。因此,在规划部署方案前还需综合考虑业务需求及其他潜在因素的影响。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一缕阳光直射你的心扉

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值