Как настроить виртуальных пользователей для vsftpd с доступом к определенной подкаталоге?

Мне нужно иметь возможность добавлять виртуальных пользователей в vsftpd, которые имеют доступ только к подпапке. Причина, по которой я хочу использовать виртуальных пользователей, заключается в том, что я хочу, чтобы на сервере был только один реальный пользователь.

Структура FTP:

  • www
    • website_name1
      • sub_folder1
      • website_name2
        • sub_folder2
        • sub_folder3
        • website_name3
        • website_name4

      Основная учетная запись имеет доступ к папке www и всем подкаталоги, и я хочу добавить виртуального пользователя, который может иметь доступ к sub_folder1 и только sub_folder1

      Также, чтобы избежать путаницы, я бы также потребовал, чтобы другой пользователь получить доступ к sub_folder3 и только к sub_folder3 . Моя точка зрения заключается в том, что мне нужно иметь возможность выбирать, какие папки и подпапки для пользователя для каждого пользователя.

      Я нашел способы добавления пользователей для просмотра всей структуры или настройки папок с именами пользователей, обе из которых мне не нужны.

      Я нашел похожий вопрос, размещенный здесь:

      Как настроить VSFTPD для нескольких пользователей, включая добавление определенных каталогов

      , но он рекомендует proftpd, который я, хотя и был Вообще менее безопасно.
      Или я здесь упустил суть?

24
задан 13 April 2017 в 15:23

4 ответа

С небольшим количеством проигрывания вокруг мне удалось предложить полу решение (не прекрасный, но достаточно хороший)

использование 2 707 974 ответов и информации, которую я еще получил, где я смог получить то, в чем я нуждаюсь.

Сначала Вам нужны vsftp и установленный PAM

apt-get install vsftpd libpam-pwdfile

Редактирование/etc/vsftpd.conf

nano /etc/vsftpd.conf

затем вставка в следующем

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Редактирование к Вашим точным потребностям самый важный бит для виртуальных пользователей является всем после комментария настроек виртуального пользователя

Создание пользователя

Можно или использовать базу данных или htpasswd Я нашел htpasswd быстрее и легче использовать.

сделайте каталог для хранения пользователей

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

добавляющие дополнительные пользователи просто опускают -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Мне только удалось заставить это работать с помощью СКЛЕПА, который ограничивает 8 символами для использования больше чем 8 использования символов openssl для генерации совместимого хеша и канала непосредственно в htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

После того как Ваши пользователи создаются, можно теперь изменить файл конфигурации PAM

nano /etc/pam.d/vsftpd

и удалите все в этом файле и замене следующим

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Это включит вход в систему для Ваших виртуальных пользователей, определенных в /etc/vsftpd/ftpd.passwd и отключит локальных пользователей

Затем мы должны добавить пользователя для этих виртуальных пользователей для использования. Эти пользователи не будут иметь доступа к оболочке и позвонятся vsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

пользователь должен соответствовать guest_username=vsftpd в vsftpd conf файл

Определение доступа каталога

Важная строка здесь следующая

user_config_dir=/etc/vsftpd_user_conf

это означает это когда user1 входит в систему это будет искать следующий файл

/etc/vsftpd_user_conf/user1

этот файл то же как vsftpd.conf таким образом, можно определить новое local_root

при возвращении к вопросу мы хотим user1 только иметь доступ к var/www/website_name1/sub_folder1, таким образом, мы должны создать vsftpd_user_conf папка:

mkdir /etc/vsftpd_user_conf

Теперь создайте пользовательский файл:

nano /etc/vsftpd_user_conf/user1

и введите следующую строку

local_root=/var/www/website_name1/sub_folder1

Теперь перезапуск vsftp

service vsftpd restart

необходимо теперь смочь войти в систему как user1, кто только сможет видеть var/www/website_name1/sub_folder1 и любая папка и файл в нем.

Вот именно можно теперь добавить столько пользователей, сколько Вы хотите и ограничиваете их доступ к любой папке, которой Вы желаете.

важный, чтобы помнить, не создаете ли Вы пользователя conf файл, он примет значение по умолчанию к var/www папке как корень (в примере выше)

Если подпапка предназначается, чтобы быть модифицируемой пользователем, могло бы быть необходимо изменить владельца общей подпапки:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1
31
ответ дан 13 April 2017 в 15:23

Попробуйте этим руководством. Возможно, будет работать на Вас.

Как сделать это

Установите vsftpd и библиотеку PAM

Править /etc/vsftpd.conf и /etc/pam.d/vsftpd

Создайте пользователя accouts с пользовательскими каталогами (в/var/www/, например)

Каталоги набора с корректным chmod и chown

Создайте администраторского пользователя с полным доступом к серверу

  1. Установка vsftpd (Очень Безопасный FTP Deamon) и libpam-pwdfile создать виртуальных пользователей

Я хотел создать пользователей FTP, но я не хотел добавлять локальных пользователей UNIX (никакой доступ оболочки, никакой корневой каталог и так далее). PAM (Сменные Модули аутентификации) поможет Вам создать виртуальных пользователей.

sudo apt-get install vsftpd libpam-pwdfile

  1. Править vsftpd.conf

Сначала необходимо создать резервную копию исходного файла

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Затем создайте новый

sudo vim /etc/vsftpd.conf

Скопируйте и вставьте следующие строки. Файл должен ТОЛЬКО содержать эти строки:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Зарегистрируйте виртуальных пользователей

Для регистрации пользователя, Вы используете htpasswd, таким образом, я предполагаю, что Вы имеете apache2 работа над сервером. Создайте a vsftpd папка затем поместила конфигурационные файлы в него.

sudo mkdir /etc/vsftpd

затем

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

- c означает, что мы создадим файл, если это еще не будет существующим-d, вызывает MD5, Вы нуждаетесь в нем на человечности 12.04, просто используете его всегда

Команда запросит пароль.

Если Вы хотите добавить новых пользователей впоследствии:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Настройте PAM в /etc/pam.d/vsftpd

Снова, необходимо создать резервную копию orignal файла

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

и создайте новый

sudo vim /etc/pam.d/vsftpd

Скопируйте и вставьте эти 2 строки (это должно быть единственным содержанием). Я настаиваю только эти 2 строки, я потратил впустую много времени, сохранив оригиналы и просто добавил их.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Создайте локального пользователя без доступа оболочки

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Можно проверить, что это было создано с идентификационной командой: идентификатор vsftpd. Мы определяем пользователя с оболочкой/bin/false из-за check_shell параметра (даже если Вы не используете его). Когда конечный пользователь соединится с FTP-сервером, они будут использоваться для прав и владения:

chmod и chown.

  1. Перезапуск vsftpd

Распространенный способ использует init.d как весь deamon

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Создайте каталоги

Согласно конфигурации все пользователи будут размещены в эту папку:/var/www/user1.

Необходимо создать их с конкретными правами: корневая папка не может быть перезаписываема!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Примечание: пользователь не может создать файлы или папки в корневом каталоге.

В vsftpd.conf мы имеем chroot_local_user=YES так пользователь ничего не видят за пределами его папки. Ему сервер похож на это:

Поэтому просто выполненный эти команды:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

/var/www/user1 папка HAS TO существует, или связь прервется.

Прямо сейчас можно попытаться соединиться с FTP

  1. Создайте Администраторского пользователя для доступа ко всему серверу

Для создания администраторского пользователя, мы должны зарегистрировать нового пользователя в htpasswd.

Прежде чем мы сделаем так, я буду советовать Вам зарегистрироваться /etc/ftpusers файл, которые определяют определенных пользователей, которым не разрешают соединиться с ftp. Я думаю, что это только для локальных пользователей и не виртуальных пользователей, но на всякий случай не выбирайте имя, содержавшееся в этом файле.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Теперь мы должны добавить новую строку в /etc/vsftpd.conf

chroot_list_enable=YES

Это означает, что Ваш пользователь будет размещен в их папку (как тюрьма) КРОМЕ пользователей в/etc/

vsftpd.chroot_list

Давайте создадим этот файл и добавим нашего пользователя, файл является простой строкой, содержащей “theadmin”. Добавьте одного пользователя на строку. Это означает, что Вы не должны создавать a /var/www/theadmin папка, пользователь войдет в систему и запустится в /home/vsftpd.

Перезапустите сервер, и Вы сделаны!

12
ответ дан 13 April 2017 в 15:23

да Вы можете, и для гибкости создают userconfig dir и файл, mkdir /var/www/userconfs или независимо от того, что Вы хотите изменить userconfs имя на, затем создать определенный файл

vi /var/www/userconfigs/ftpuseraccount

в типе, local_root=/var/www (или независимо от того, что Вы хотите получить доступ dir) guest_username=www-data (владелец человечности редактирования вершины файла

после обновления Вы vsftpd.conf путем добавления user_config_dir=/var/www/userconfigs (или независимо от того, что Вы заменили его как, эта учетная запись получит доступ к любому sdir, эй указанному)

0
ответ дан 13 April 2017 в 15:23

В дополнение к ответам @Avenyet и @ 2707974 вы можете использовать более безопасный способ создания файла паролей виртуальных пользователей ( /etc/vsftpd/ftpd.passwd ). Вместо использования команды htaccess вы можете использовать команду mkpasswd из пакета whois (по крайней мере, в Ubuntu). mkpasswd не обновляет файл паролей для вас, например htaccess , а только генерирует хеш пароля. Поэтому вам нужно будет создать и обновить файл паролей самостоятельно.

К счастью, синтаксис файла паролей очень прост, он просто состоит из имени пользователя и хэша пароля, разделенных двоеточием, и одной строки для каждого пользователя. Пример:

user1:6Gshac7jdk01U

Это пароль foo с базовым хешированием крипты.

Linux crypt поддерживает лучшие алгоритмы хеширования, чем базовый des crypt, используемый htaccess , и md5, используемый командой openssl passwd . Используйте mkpasswd -m help , чтобы увидеть список алгоритмов, поддерживаемых вашей криптой . В современных системах лучшими являются SHA-256 или SHA-512. В отличие от хеширования des crypt по умолчанию (которое также использует htaccess ), они используют все символы пароля, и в отличие от des и openssl passwd они имеют настраиваемое количество раундов. ] Чем больше раундов, тем больше времени требуется для вычисления хэша и тем труднее становится отменить хэш, если злоумышленник получает доступ к хешам паролей. Для сервера, который не находится в общедоступном Интернете, я бы сказал, чтобы количество раундов было как можно большим, но без заметного времени хеширования, то есть менее 0,1 секунды. Если сервер находится в Интернете, это может стать вектором отказа в обслуживании, так как кто-то может попробовать множество входов в систему со случайными паролями и использовать ресурсы ЦП. Если это представляет риск для вашей конфигурации, вам следует использовать более низкое значение.

Значение по умолчанию для вариантов SHA - 5000, что довольно мало. Я использую 100000 в своей установке (которая не является общедоступной).

Чтобы сгенерировать такой хеш, введите mkpasswd -m sha-512 -R 100000 . Вам будет предложено ввести пароль и распечатать хэш. Используйте хэш в файле passwd вместо простых хэшей крипт, например:

user1:$6$rounds=100000$HRZdUPD8$GVBmHg91rjNm.WlcMCcLp41Ewz6XXJ1ktKzS8Zmr8cmyVGR28URVY1A9N3Nz4W9zl6lDGjwVbz94N/JQVSGOh/

Тип хеша и количество раундов встроены в хеш-значение, поэтому crypt может видеть, какой метод использовать для проверьте пароль. Можно даже смешивать разные типы хэшей в одном файле passwd. Эти файлы passwd можно использовать по адресу /etc/vsftpd/ftpd.passwd для обеспечения наивысшего уровня безопасности crypt , который в настоящее время может предложить. Для остальной части конфигурации я ссылаюсь на другие ответы.

(Я все еще жду, когда crypt будет поддерживать лучший алгоритм хеширования паролей, такой как scrypt или один из вариантов Argon2.)

1
ответ дан 5 January 2021 в 22:58

Другие вопросы по тегам:

Похожие вопросы: