如何在 CentOS 或 Ubuntu 中设置 FTP 隔离

使用用户隔离配置多用户 FTP

本文旨在概述 chroot 环境和配置 FTP 服务以实现用户隔离。 这是通过 FTP 服务的主配置文件中的几行来完成的。

本文还旨在为我们在没有控制面板的情况下运行 CentOS 或 Ubuntu 的核心托管 VPS 服务器提供指南。 我们使用 cPanel 软件的完全托管服务器已经默认配置了 FTP 用户隔离,并且还提供了用于创建 FTP 用户的实用程序。

什么是 Chroot?

Chroot 或 change-root 是为用户可以访问的环境设置新根目录的实现。 通过这样做,从用户的角度来看,似乎没有用户可以逃到的更高目录。 他们将被限制在他们开始的目录中,并且只能看到该目录中的内容。

如果用户尝试列出系统根目录 (/) 的内容,它将返回其 chroot 环境的内容,而不是服务器的实际根目录。 在下面阅读更多关于此的信息 Chroot 维基页面。

安装 ProFTPd

由于有许多 FTP 选项可用,ProFTPd、Pure-FTPd、vsftpd 等等,为了简单和简洁,本文将只关注 ProFTPd 的使用。 这也不是安装 FTP 服务的指南,因为它在我们的知识库文章如何在 CentOS 7 上安装 ProFTPD 和如何在 Ubuntu 14.04 LTS 上安装和配置 ProFTPD 中有所介绍。

ProFTPd 的用户隔离

用户设置

默认情况下,ProFTPd 会读取系统 /etc/passwd 文件。 此文件中的这些用户是普通系统用户,不需要在普通用户创建之外创建。 有许多方法可以创建额外的 FTP 用户,但这是开始的一种方法。

以下是系统 passwd 文件中的一些典型条目。 从左到右,您可以看到用户名、用户和组 ID、主目录以及为该用户配置的默认 shell。

user1:x:506:521::/home/user1:/bin/bashuser2:x:505:520::/home/user2:/bin/bash

要创建这些用户,您可以使用 用户添加 命令行中的命令或您通常用于在服务器上创建用户的任何其他方法。

创建用户

useradd -m -d /home/homedir newuser

设置用户密码

passwd newuser

如果您要设置多个都需要访问同一目录的用户,则需要确保这些用户都在同一个组中。 在同一个组中意味着每个用户都可以对目录具有组级别的访问权限,并允许组中的每个人访问每个用户上传的文件。 这种级别的用户管理超出了本文的范围,但请注意,这种性质的事情是可能的。

ProFTPd 用户配置

要将用户监禁到 ProFTPd 中的主目录,您必须设置 默认根 值~。

vim /etc/proftpd.conf

DefaultRoot ~

有了这个设置,它告诉 FTP 服务只允许用户访问他们的主目录。 ~ 是一个快捷方式,它告诉系统从 /etc/passwd 文件中读取用户的主目录并使用该值。

使用 ProFTPd 中的此功能,您还可以定义多个 DefaultRoot 指令并根据某些条件匹配这些限制。 如果需要,您可以监禁一些用户,而不是其他用户,或者将一组用户全部监禁到同一目录。 这是通过匹配用户所属的组来完成的。

当一个新用户被创建时,如上所示,他们的默认组将与他们的用户名相同。 但是,如有必要,您可以在创建后添加或修改分配给用户的组。

把所有不属于“特殊群体”的人都关进监狱

DefaultRoot ~ !special-group

监狱 Group1 和 Group2 到同一个目录

DefaultRoot /path/to/uploads group1,group2

在对 配置文件 文件,您需要重新启动 FTP 服务。

CentOS 6.x (初始化)

/etc/init.d/proftpd restart

CentOS 7.x (systemd)

systemctl restart proftpd

使用 SFTP (SSH) 进行用户隔离

您还可以隔离 SFTP 用户或将一部分 SSH 用户限制为仅具有 SFTP 访问权限。 同样,这适用于使用 用户添加 命令。

虽然您可以使用 SSL 保护 FTP 通信,但这是额外级别的设置和配置。 相比之下,SFTP 用于通过 SSH 连接进行文件传输。 SSH 是与服务器的加密连接,默认情况下是安全的。 如果您担心安全性并且不确定将 SSL 添加到您的 FTP 配置中,这可能是另一种选择。

SFTP 用户设置

就像使用 FTP 用户一样创建用户及其主目录,但在这里我们确保将 shell 设置为不允许正常的 SSH 登录。 我们假设您正在寻找仅限 SFTP 的用户,而不仅仅是普通的 shell 用户,因此我们在 shell 上添加了限制以防止非 SFTP 登录。

useradd -m -d /home/homedir/ -s /sbin/nologin username

passwd username

我们需要确保将主目录设置为root拥有的权限和所有权,并且上传目录归用户所有。

chmod 755 /home/homedir/

chown root. /home/homedir/

mkdir -p /home/homedir/upload-dir/

chown username. /home/homedir/upload-dir/

SFTP 配置

特此设置 Chroot目录%H 变量,我们将用户限制在创建用户时设置的主目录。 使用 强制命令 指令还将允许用户执行的命令限制为仅用于文件传输的 SFTP 命令,再次消除了用户能够突破监狱并进入正常 shell 环境的可能性。

/etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User user1,user2,user3
ChrootDirectory %h
ForceCommand internal-sftp

将多个 FTP 用户关押到一个位置

或者,如果您想让多个用户都被关押到同一个位置,您可以将它们都设置在同一个组中,拥有相同的主目录,然后使用 匹配组 SSH 配置中的指令。

vim /etc/ssh/sshd_config

Subsystem sftp internal-sftp
Match Group groupname
ChrootDirectory %h
ForceCommand internal-sftp

在对 sshd_config 文件,重启SSH服务。 以下命令之一应该适合您。

CentOS 6.x (初始化)

/etc/init.d/sshd restart

CentOS 7.x (systemd)

systemctl restart sshd

进一步阅读可以在 proftpd.org 上找到