VSFTPD 如何 chroot 而不是 chrooted /home 中的用户?

VSFTPD 如何 chroot 而不是 chrooted /home 中的用户?

我需要让chroot所有本地用户访问他们的主目录,但一个用户应该有权访问所有用户目录。如果我输入,admin_userchroot_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 服务器,测试行为是否符合预期。

相关内容