嵌入式系统上的 VSFTPD:仅限制用户访问特定文件夹

嵌入式系统上的 VSFTPD:仅限制用户访问特定文件夹

在我的应用程序中,我有一个文件夹/LD和一个用户test_user。我希望该用户只能访问该/LD文件夹。

但是,当我通过 Filezilla FTP 客户端连接时,默认情况下/LD会加载,但用户也可以导航到其他文件夹。

我使用的是Linux 4.9嵌入式系统。我有chrootadduseraddgroupchmod命令。我没有这个usermod命令

我想要的可能吗?

答案1

首先,您必须将 设为/LD的主目录test_user。你说你没有usermod指挥权;然后使用vipw,或者如果也不可用,只需确保用户当前未登录并/etc/passwd直接编辑。

然后,检查vsftpd.conf 手册页chroot_local_user并阅读选项、chroot_list_enable和的说明chroot_list_file

如果您希望所有(或大多数)用户的 FTP 连接仅限于其主目录,则可以设置chroot_local_user为 YES 并使用/etc/vsftpd.chroot_list文件(或该选项指定的任何文件chroot_list_file)来指定例外。

如果仅test_user必须限制,则保留chroot_local_user为“否”,而设置chroot_list_enable为“是”,然后添加test_user/etc/vsftpd.chroot_list文件(或该选项指定的任何文件chroot_list_file)。如果该文件尚不存在,您可以创建该文件。

由于这些操作,当test_user登录 FTP 连接时,他们将看到该/LD目录为根目录 ( /)。因此,他们将无法在/LD目录树之外导航,因为对于他们的 FTP 连接,文件系统的其余部分将不存在。用户仍然可以访问 的任何子目录/LD;如果这是不可取的,请使用文件系统权限来阻止它。


首先确定需要访问 /LD 子目录的用户和/或组。理想情况下, /LD 子目录的所有用户都应该属于一个组(我们称之为LDsub),并且test_user不应该属于该组。应该test_user单独在另一个组中(我们以它为例LDftp)。该组的成员LDsub可能也是也可能不是该LDftp组的成员,具体取决于他们是否需要对/LD目录本身的写访问权限。

如果您没有usermod或命令,您可以通过或仅通过编辑 来groupmod编辑组成员身份。vigr/etc/group

现在,您可以使用命令chown来设置目录的所有权/LDchmod设置权限:

chown root:LDftp /LD
chmod 775 /LD        #this will be drwxrwxr-x 

现在test_user将通过组成员身份拥有对该/LD目录的写入权限,但他们不会是该目录的所有者,因此他们无法更改其权限。 “everyone rx”权限将允许该组的成员LDsub通过该目录访问其权限允许的子目录。

/LD 的子目录可以根据需要由任何人拥有,只要它不是test_user.这些子目录的组LDsub和权限应设置如下:

chgrp LDsub /LD/subdirectory  # or chown <not_test_user>:LDsub /LD/subdirectory
chmod 770 /LD/subdirectory   # this will be drwxrwx---

请注意,如果test_user具有对 的写访问权限/LD,则必然意味着他们可以重命名任何子目录、创建新目录以及删除任何子目录空的子目录。

如果您的要求比这更复杂,那么确保在文件系统中启用 ACL 支持并使用 ACL 指定允许访问子目录的用户和/或组可能会更容易/LD。请参阅getfacl和命令的手册页setfacl,和/或这个网页了解详情。


或者,您可以考虑将 的子目录移动/LD到另一个位置并使用符号链接使目录路径像以前一样工作。

mv /LD/subdirectory /elsewhere/subdirectory
ln -s /elsewhere/subdirectory /LD/subdirectory

对于 FTP 会话之外的任何用户test_user,这些符号链接将照常使用。但由于test_user的 FTP 会话将被 chroot 到/LD,因此对于他们来说,这些符号链接将显示为不可用的损坏链接。如果test_user具有 的写入权限/LD,他们可以删除“损坏的”链接。

相关内容