在我的应用程序中,我有一个文件夹/LD
和一个用户test_user
。我希望该用户只能访问该/LD
文件夹。
但是,当我通过 Filezilla FTP 客户端连接时,默认情况下/LD
会加载,但用户也可以导航到其他文件夹。
我使用的是Linux 4.9嵌入式系统。我有chroot
、adduser
、addgroup
和chmod
命令。我没有这个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
来设置目录的所有权/LD
并chmod
设置权限:
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
,他们可以删除“损坏的”链接。