我需要让chroot
所有本地用户访问他们的主目录,但一个用户应该有权访问所有用户目录。如果我输入,admin_user
他chroot_list_file
有权访问整个文件系统。我想限制他只能访问/home
,但当他登录 ftp 服务器时,他的默认目录应该是/home/admin_user
。如何实现?我安装了 vsftpd,配置如下:
# /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=002
dirmessage_enable=YES
xferlog_enable=YES
dual_log_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
max_clients=0
max_per_ip=0
# /etc/vsftpd/chroot_list
admin_user
答案1
您可以使用 VSFTP 的 chroot() 功能将用户限制在其主目录中,或者不使用。
如果不这样做,那么整个文件系统就会暴露,您只能依靠正确的文件系统权限来保护您的非公开数据。
话虽如此,vsftp 确实有一个选项可以(在某种程度上)使用指令限制用户的操作deny_file
:
deny_file
This option can be used to set a pattern for filenames (and
directory names etc.) which should not be accessible in any way.
The affected items are not hidden, but any attempt to do
anything to them (download, change into directory, affect
something within directory etc.) will be denied. This option is
very simple, and should not be used for serious access control -
the filesystem's permissions should be used in preference.
However, this option may be useful ... ...
创建deny_file例如ls -d /*/ |grep -v home > /etc/vsftpd/forbidden_path
最好限制它deny_file
,使其仅适用于您的用户admin_user
,而不是所有用户:
将指令添加user_config_dir=/etc/vsftpd/user.overrides/
到主vsftpd.conf
配置并创建用户特定的覆盖:
# /etc/vsftpd/user.overrides/admin_user
# admin_user is excluded from chroot() but restrict his access to /home
deny_file=/etc/vsftpd/forbidden_path
并重新启动 ftp 服务器,测试行为是否符合预期。