Вопрос или проблема
Я пытаюсь настроить свой FTP-сервер (vsftpd), чтобы предоставить доступ как локальным пользователям, так и анонимным пользователям.
Я хотел бы, чтобы локальные пользователи имели возможность записывать в свою домашнюю директорию, а анонимные входы имели только доступ на чтение к директории, в которую я могу помещать файлы для скачивания широкими массами.
Во-первых, это вообще возможно? Или все входы должны иметь либо доступ на чтение, либо доступ на запись, но не комбинацию обоих?
Если это возможно, у меня это не получается. Моя текущая настройка выдает ошибку “Доступ запрещен”, когда я пытаюсь войти анонимно. Доступ для локальных пользователей работает так, как я и хотел.
Может кто-нибудь увидеть, где я ошибаюсь или что я пропускаю в следующей настройке?
Следующее — это настройка директории для FTP-папок. Путь /var/ftp/ (обратите внимание, что локальный пользователь здесь не имеет оболочки или конкретной домашней директории, поэтому он был перемещен в общую FTP-папку):
dr-xr-xr-x 2 ftp ftp-users 4.0K Apr 17 13:19 anon
drwxr-xr-x 2 localuser ftp-users 4.0K Apr 17 15:08 localuser
Пользователь anon не имеет доступа на запись в свою домашнюю директорию, но локальный пользователь имеет. Существует группа ftp-users, частью которой являются все пользователи FTP.
Ниже приведен фрагмент из файла /etc/passwd для двух вышеупомянутых пользователей:
ftp:x:109:115:ftp daemon,,,:/var/ftp/anon:/bin/false
localuser:x:1002:1002::/var/ftp/localuser:/bin/false
Следующее — это файл vsftpd.config, который я использую (все комментарии удалены для краткости):
listen=NO
listen_ipv6=YES
anonymous_enable=YES
ftp_username=ftp
no_anon_password=YES
anon_root=/var/ftp/anon
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_max_rate=52000
local_enable=YES
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.allowed_users
write_enable=YES
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=ftp
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
Все пользователи, которые могут войти, перечислены в userlist_file (включая ftp).
Я смог ответить на свой вопрос после небольших экспериментов. Я подробно изложу ответ для справки.
-
Да, возможно иметь привилегированных ‘именованных’ пользователей и непривилегированных анонимных пользователей. Фрагмент конфигурационного файла выше позволяет такую настройку.
-
В конфигурационном файле есть параметры userlist_enable=YES и userlist_file=…, которые контролируют имен пользователей, имеющих возможность использовать FTP. Это предотвращает вход по умолчанию созданных пользователей (например, pi на Raspbian) с паролем по умолчанию, если он не был изменен. (Пароль по умолчанию, очевидно, следует изменить.)
-
Чтобы использовать вышеприведенные директивы и разрешить анонимные входы, пользователь ‘anonymous’ должен быть указан в файле вместе с одобренными именованными пользователями.
Ответ или решение
Настройка FTP-сервера на базе vsftpd с доступом как для локальных пользователей, так и для анонимных пользователей может представлять определенные трудности. Однако, как вы уже заметили, это вполне возможно. Давайте детально рассмотрим, как правильно организовать такой сервер, а также какие шаги необходимо предпринять для устранения ошибок, с которыми вы столкнулись.
Возможность одновременного доступа локальных и анонимных пользователей
Да, вы абсолютно правы: можно настроить FTP-сервер таким образом, чтобы он предоставлял разные уровни доступа для локальных и анонимных пользователей. Локальные пользователи могут иметь возможность записи в свои домашние директории, в то время как анонимные пользователи могут только читать файлы в определенной директории.
Конфигурация vsftpd
Ваш текущий файл настроек vsftpd выглядит довольно хорошо, но давайте пройдемся по ключевым параметрам, которые влияют на работу анонимных пользователей:
-
anonymous_enable=YES
– этот параметр позволяет включить доступ анонимных пользователей. -
anon_root=/var/ftp/anon
– указывает на директорию, к которой будут иметь доступ анонимные пользователи. Убедитесь, что в этой директории выставлены корректные права доступа. -
anon_upload_enable=NO
иanon_mkdir_write_enable=NO
– эти параметры отключают возможность анонимных пользователей загружать файлы и создавать директории, что соответствует вашим целям. -
userlist_enable=YES
иuserlist_file=/etc/vsftpd.allowed_users
– позволяет контролировать список аутентифицированных пользователей. Убедитесь, что в этом файле имеется учетная записьanonymous
(илиftp
), чтобы этот пользователь мог успешно войти.
Проверка прав доступа к директориям
Ваши права доступа к директориям следующие:
/var/ftp/anon
:dr-xr-xr-x
/var/ftp/localuser
:drwxr-xr-x
Права dr-xr-xr-x
на директории анонимных пользователей означают, что они могут видеть содержимое, но не могут записывать в эту директорию. Это правильная настройка для вашей ситуации. Однако не забудьте проверить, чтобы файлы внутри /var/ftp/anon
были доступны для чтения.
Проверка входа и устранение ошибок
Если анонимный вход все еще дает ошибку "Permission denied", стоит обратить внимание на следующие моменты:
-
Загрузка 파일ов: Убедитесь, что в директории
/var/ftp/anon
есть хотя бы один файл, который может быть доступен для чтения анонимным пользователям. Если там нет файлов, то доступ может быть закрыт. -
Логи: Изучите логи ftp-сервера, которые могут находиться в
/var/log/vsftpd.log
или аналогичных файлах. Это поможет лучше понять, почему именно происходит ошибка. -
Общее правило доступа: Обратите внимание на общие разрешения, которые могут касаться группы
ftp-users
. Убедитесь, что пользователи этой группы имеют доступ к директориям и файлам.
Заключение
С настройками, указанными вами, доступно соответствие уровней доступа между локальными и анонимными пользователями. Убедитесь в том, что настройки директории и права доступа выставлены корректно. Что касается проблем с анонимными пользователями, ваши логи и наличие файлов в их директории будут наилучшим способом диагностики.
Если что-то останется неясным, дополнительные идеи можно извлечь из документации по vsftpd и специфических форумы сообщества, где многие специалисты готовы поделиться своим опытом.