Назад | Перейти на главную страницу

VSFTPD, как chroot не chrooot пользователей в / home?

мне нужно 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

Вы либо используете возможность 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-сервер, и проверка поведения будет ожидаемой.