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

24

Мне нужно иметь возможность добавить виртуальных пользователей в 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 . Моя точка зрения заключается в том, что мне нужно иметь возможность выбирать, какие папки и подпапки для пользователя для каждого пользователя.

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

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

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

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

Avenyet
источник
У меня была проблема с аутентификацией в течение самого длительного времени, пока я не нашел этот serverfault.com/questions/450214/… Очевидно, у PAM есть проблемы с хешем MD5. Это руководство решает эту проблему.

Ответы:

31

Немного поиграв, мне удалось придумать полу-решение (не идеальное, но достаточно хорошее)

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

Сначала вам нужно установить 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

Мне только удалось заставить его работать, используя CRYPT, который ограничивается 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

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

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

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 от имени пользователя root (в приведенном выше примере)

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

chown vsftpd:nogroup /var/www/website_name1/sub_folder1
Avenyet
источник
Это работает с некоторыми изменениями: 1) Используйте абсолютные пути (замените пути, начинающиеся с "var /" на "/ var". 2) vsftpd 2.3.5, который есть в Ubuntu 12.04, не поддерживает опцию allow_writeable_chroot, вы можете решить эту проблему, установив patch vsftpd .
гаделать
Здравствуйте, с паролем ssl мы снова опускаем -c с -d или просто опускаем -c? Также на второй ноте, мы просто повторно запустим запрос, чтобы изменить пароль? или есть другой метод. Спасибо
mdixon18
Зачем вам нужно создавать домашний каталог с помощью useradd --home? Это необходимо?
e-info128
1
Дополнительно: включить безопасные соединения TLS. digitalocean.com/community/tutorials/...
е-info128
1
Для некоторых установок может потребоваться apache2-utils. Я не включил его в ответы, так как он не актуален для всех.
Авенет
12

Попробуйте с этим руководством. Может быть, будет работать для вас.

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

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

Изменить /etc/vsftpd.confи/etc/pam.d/vsftpd

Создавайте учетные записи пользователей с помощью пользовательских каталогов (например, в / var / www /)

Установите каталоги с правильными chmodиchown

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

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

Я хотел создать пользователей FTP, но не хотел добавлять локальных пользователей Unix (без доступа к оболочке, без домашнего каталога и т. Д.). PAM (Pluggable Authentication Modules) поможет вам создать виртуальных пользователей.

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работаете на своем сервере. Создайте vsftpdпапку, затем поместите в нее файлы конфигурации.

sudo mkdir /etc/vsftpd

тогда

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

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

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

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

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

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

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

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

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

sudo vim /etc/pam.d/vsftpd

Скопируйте и вставьте эти 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

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

chmodи chown.

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

Обычный способ - использовать init.d, как и все остальные.

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Папка должна существовать или соединение не будет.

Прямо сейчас вы можете попробовать подключиться к вашему 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». Добавьте по одному пользователю в строке. Это означает, что вам не нужно создавать /var/www/theadminпапку, пользователь войдет в систему и начнет /home/vsftpd.

Перезагрузите сервер, и все готово!

2707974
источник
Попробовал это уже очень негибко, так как он применяет local_root = / var / www / $ USER. Это не позволяет мне указать один каталог для пользователя или пользователей. этот каталог обычно имеет различное назначение и местоположение в зависимости от клиента. Спасибо за ответ, хотя.
Авенет
0

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

vi /var/www/userconfigs/ftpuseraccount

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

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

Agunbiade Bolaji
источник