Вопрос или проблема
Я пытаюсь использовать VSFTPD
с следующей конфигурацией на виртуальной машине с Ubuntu 14.04
. Я могу войти на свой виртуальный sftp-сервер нормально, но пользователь client
может перемещаться между папками, где этого не должно быть. Кто-нибудь знает, почему это происходит?
# Пример конфигурационного файла /etc/vsftpd.conf
#
# Скомпилированные настройки по умолчанию довольно осторожны. Этот пример файла
# немного ослабляет ограничения, чтобы сделать ftp-демона более удобным.
# Пожалуйста, смотрите vsftpd.conf.5 для всех скомпилированных параметров по умолчанию.
#
# ПРОЧИТАЙТЕ ЭТО: Этот пример файла НЕ является исчерпывающим списком опций vsftpd.
# Пожалуйста, ознакомьтесь с руководством vsftpd.conf.5, чтобы получить полное представление о возможностях vsftpd.
#
#
# Запуск в отдельном режиме? vsftpd может работать как из inetd, так и как отдельный
# демон, запущенный из initscript.
listen=YES
#
# Запуск в отдельном режиме с IPv6?
# Подобно параметру listen, но vsftpd будет слушать на сокете IPv6
# вместо сокета IPv4. Этот параметр и параметр listen являются взаимоисключающими.
#listen_ipv6=YES
#
# Разрешить анонимный FTP? (Отключено по умолчанию)
anonymous_enable=NO
#
# Уберите комментарий, чтобы разрешить локальным пользователям входить в систему.
local_enable=YES
#
# Уберите комментарий, чтобы включить любую форму FTP-команды записи.
write_enable=YES
#
# Значение umask по умолчанию для локальных пользователей - 077. Вы можете изменить его на 022,
# если ваши пользователи этого ожидают (022 используется многими другими ftpd)
#local_umask=022
#
# Уберите комментарий, чтобы позволить анонимному FTP-пользователю загружать файлы. Это будет
# иметь эффект только если вышеуказанное глобальное разрешение записи активно. Также вам
# очевидно нужно будет создать директорию, доступную для записи FTP-пользователем.
#anon_upload_enable=YES
#
# Уберите комментарий, если хотите, чтобы анонимный FTP-пользователь мог создавать
# новые директории.
#anon_mkdir_write_enable=YES
#
# Активировать сообщения о директориях - сообщения, отправляемые удаленным пользователям, когда они
# заходят в определенную директорию.
dirmessage_enable=YES
#
# Если включено, vsftpd будет отображать списки директорий с временем
# в вашем местном часовом поясе. По умолчанию отображается GMT. Времена, возвращаемые
# командой FTP MDTM, также подвержены действию этого
# параметра.
use_localtime=YES
#
# Активировать ведение логов загрузок/выгрузок.
xferlog_enable=YES
#
# Убедитесь, что соединения передачи PORT происходят с порта 20 (ftp-data).
connect_from_port_20=YES
#
# Если хотите, вы можете организовать так, чтобы загруженные анонимные файлы принадлежали
# другому пользователю. Внимание! Использование "root" для загруженных файлов не
# рекомендуется!
#chown_uploads=YES
#chown_username=whoever
#
# Вы можете переопределить место, куда будет записываться файл журнала, если хотите. По умолчанию это показано
# ниже.
#xferlog_file=/var/log/vsftpd.log
#
# Если хотите, вы можете иметь свой файл журнала в стандартном формате ftpd xferlog.
# Обратите внимание, что в этом случае местоположение файла журнала по умолчанию - /var/log/xferlog.
#xferlog_std_format=YES
#
# Вы можете изменить значение по умолчанию для таймаута бездействующей сессии.
#idle_session_timeout=600
#
# Вы можете изменить значение по умолчанию для таймаута соединения данных.
#data_connection_timeout=120
#
# Рекомендуется определить на вашей системе уникального пользователя, который будет
# использоваться ftp-сервером как полностью изолированный и неприоритетный пользователь.
#nopriv_user=ftpsecure
#
# Включите это, и сервер будет распознавать асинхронные запросы ABOR. Не
# рекомендуется для безопасности (код не тривиален). Не включая это,
# вы можете запутать старые FTP-клиенты.
#async_abor_enable=YES
#
# По умолчанию сервер будет делать вид, что разрешает ASCII-режим, но на самом деле игнорирует
# запрос. Включите следующие параметры, чтобы сервер действительно выполнял
# ASCII-искажение файлов в ASCII-режиме.
# Обратите внимание, что на некоторых FTP-серверах поддержка ASCII позволяет осуществить атаку отказа в обслуживании
# (DoS) через команду "SIZE /big/file" в ASCII-режиме. vsftpd
# предсказал эту атаку и всегда оставался безопасным, сообщая размер
# необработанного файла.
# ASCII-искажение - ужасная особенность протокола.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# Вы можете полностью настроить строку баннера для входа:
#ftpd_banner=Добро пожаловать в blah FTP-сервис.
#
# Вы можете указать файл с запрещенными анонимными адресами электронной почты. Это, по-видимому,
# полезно для борьбы с некоторыми атаками DoS.
#deny_email_enable=YES
# (по умолчанию)
#banned_email_file=/etc/vsftpd.banned_emails
#
# Вы можете ограничить локальных пользователей только их домашними директориями. Смотрите FAQ для
# возможных рисков перед использованием chroot_local_user или
# chroot_list_enable ниже.
chroot_local_user=YES
#
# Вы можете указать явный список локальных пользователей, которых следует chroot() к их домашней
# директории. Если chroot_local_user установлен на YES, тогда этот список станет списком
# пользователей, которых НЕ следует chroot().
# (Внимание! chroot может быть очень опасным. Если используете chroot, убедитесь, что
# пользователь не имеет прав на запись в верхнюю директорию внутри
# chroot)
#chroot_local_user=YES
#chroot_list_enable=YES
# (по умолчанию)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# Вы можете активировать опцию "-R" для встроенной команды ls. Это отключено по
# умолчанию, чтобы избежать чрезмерного ввода-вывода со стороны удаленных пользователей на больших
# сайтах. Тем не менее, некоторые неработающие FTP-клиенты, такие как "ncftp" и "mirror", предполагают
# наличие опции "-R", поэтому есть серьезные основания для ее включения.
#ls_recurse_enable=YES
#
# Настройка
#
# Некоторые из настроек vsftpd по умолчанию не подходят для файловой системы.
#
# Эта опция должна быть именем директории, которая пуста. Также,
# директория не должна быть записываемой пользователем ftp. Эта директория используется
# как безопасная тюрьма chroot() в те моменты, когда vsftpd не требует доступа к файловой системе.
secure_chroot_dir=/var/run/vsftpd/empty
#
# Эта строка - имя сервиса PAM, который будет использовать vsftpd.
pam_service_name=vsftpd
#
# Эта опция указывает местоположение RSA-сертификата, который будет использоваться для SSL
# зашифрованных соединений.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# Эта опция указывает местоположение RSA-ключа, который будет использоваться для SSL
# зашифрованных соединений.
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
require_ssl_reuse=NO
ssl_ciphers=HIGH
Насколько я понимаю, vsftpd использует существующих системных пользователей. И у них всегда
одни и те же права доступа, что и у этого пользователя.
Если вы хотите, чтобы кто-то мог получать доступ только к определенным папкам, вам нужно будет добавить нового системного пользователя (или виртуального пользователя) с соответствующими правами доступа и использовать его для входа в систему.
Вам нужно будет раскомментировать строку:
chroot_local_user=YES
Также измените режим доступа на 555
sudo chmod [the_users_directory] 555
Затем перезапустите сервис vsftpd, чтобы изменения вступили в силу:
sudo restart vsftpd
Вы также можете указать это поведение только для определенных пользователей, раскомментировав строки chroot_list_enable=YES
и chroot_list_file=/etc/vsftpd.chroot_list
и создав список конкретных пользователей в файле /etc/vsftpd.chroot_list
.
Для конкретных пользователей (строки в /etc/vsftpd.conf, которые затрагиваются):
chroot_list_enable=YES
chroot_list_enable=YES
Ответ или решение
Чтобы ограничить доступ к пользовательской папке с помощью VSFTPD на вашем сервере Ubuntu 14.04, необходимо внести некоторые изменения в файл конфигурации vsftpd.conf и убедиться, что права доступа к папкам настроены правильно. Вот подробное руководство по этому процессу:
1. Откройте файл конфигурации vsftpd
Сначала вы должны отредактировать файл конфигурации vsftpd. Откройте терминал и выполните следующую команду:
sudo nano /etc/vsftpd.conf
2. Включите переменные chroot
Чтобы ограничить пользователей их домашними директориями, вам нужно раскомментировать следующие строки в файле конфигурации:
chroot_local_user=YES
Это ограничит всех местных пользователей их домашними папками.
Если вы хотите ограничить только определённых пользователей, раскомментируйте следующие строки:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
3. Настройка прав доступа к папкам
Папка, к которой вы хотите ограничить доступ, должна иметь правильные права доступа. Обычно это права 555
, что представляет собой режим только для чтения. Для этого выполните следующую команду:
sudo chmod 555 /path/to/user/directory
Замените /path/to/user/directory
на реальный путь к директории пользователя.
4. Создание файла chroot_list (при необходимости)
Если вы выбрали опцию ограничения доступа только для некоторых пользователей, создайте файл /etc/vsftpd.chroot_list
и добавьте в него имена пользователей, которых вы хотите ограничить. Например:
sudo nano /etc/vsftpd.chroot_list
Добавьте имена пользователей (по одному на строку), которым вы хотите запретить доступ к другим директориям:
user1
user2
5. Перезапустите службу vsftpd
После внесения всех изменений необходимо перезапустить службу, чтобы они вступили в силу. Выполните следующую команду:
sudo service vsftpd restart
6. Проверка конфигурации
После перезапуска службы проверьте, может ли пользователь входить в систему и ограничен ли он своей домашней директорией. Попробуйте подключиться к FTP-серверу от имени пользователя и убедитесь, что он не может перемещаться за пределами своей домашней директории.
Заключение
Следуя этим шагам, вы сможете успешно ограничить доступ пользователей к их домашним папкам на сервере с установленным VSFTPD. Обязательно проверяйте права доступа и настройки безопасности, чтобы обеспечить надёжность вашего FTP-сервера. Если у вас возникли вопросы или трудности, обратитесь к документации к VSFTPD или к сообществам, специализирующимся на администрировании серверов.