Мне нужно иметь возможность добавлять виртуальных пользователей в vsftpd, которые имеют доступ только к подпапке. Причина, по которой я хочу использовать виртуальных пользователей, заключается в том, что я хочу, чтобы на сервере был только один реальный пользователь.
Структура FTP:
www
website_name1
sub_folder1
li> ul> website_name2
sub_folder2
li> sub_folder3
li> ul> website_name3
website_name4
Основная учетная запись имеет доступ к папке www и всем подкаталоги, и я хочу добавить виртуального пользователя, который может иметь доступ к sub_folder1 и только sub_folder1
Также, чтобы избежать путаницы, я бы также потребовал, чтобы другой пользователь получить доступ к sub_folder3 и только к sub_folder3 . Моя точка зрения заключается в том, что мне нужно иметь возможность выбирать, какие папки и подпапки для пользователя для каждого пользователя.
Я нашел способы добавления пользователей для просмотра всей структуры или настройки папок с именами пользователей, обе из которых мне не нужны.
Я нашел похожий вопрос, размещенный здесь:
Как настроить VSFTPD для нескольких пользователей, включая добавление определенных каталогов
, но он рекомендует proftpd
, который я, хотя и был Вообще менее безопасно.
Или я здесь упустил суть?
С небольшим количеством проигрывания вокруг мне удалось предложить полу решение (не прекрасный, но достаточно хороший)
использование 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
Попробуйте этим руководством. Возможно, будет работать на Вас.
Как сделать это
Установите vsftpd и библиотеку PAM
Править /etc/vsftpd.conf
и /etc/pam.d/vsftpd
Создайте пользователя accouts с пользовательскими каталогами (в/var/www/, например)
Каталоги набора с корректным chmod
и chown
Создайте администраторского пользователя с полным доступом к серверу
vsftpd
(Очень Безопасный FTP Deamon) и libpam-pwdfile
создать виртуальных пользователейЯ хотел создать пользователей FTP, но я не хотел добавлять локальных пользователей UNIX (никакой доступ оболочки, никакой корневой каталог и так далее). PAM (Сменные Модули аутентификации) поможет Вам создать виртуальных пользователей.
sudo apt-get install vsftpd libpam-pwdfile
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
Для регистрации пользователя, Вы используете 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
/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
sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
Можно проверить, что это было создано с идентификационной командой: идентификатор vsftpd. Мы определяем пользователя с оболочкой/bin/false из-за check_shell параметра (даже если Вы не используете его). Когда конечный пользователь соединится с FTP-сервером, они будут использоваться для прав и владения:
chmod
и chown
.
vsftpd
Распространенный способ использует init.d как весь deamon
sudo /etc/init.d/vsftpd restart
sudo service vsftpd restart
Согласно конфигурации все пользователи будут размещены в эту папку:/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
Для создания администраторского пользователя, мы должны зарегистрировать нового пользователя в 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
.
Перезапустите сервер, и Вы сделаны!
да Вы можете, и для гибкости создают 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, эй указанному)
В дополнение к ответам @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.)