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