Як налаштувати віртуальних користувачів на vsftpd з доступом до певного підкаталога?


24

Мені потрібно мати змогу додати віртуальних користувачів до vsftpd, які мають лише доступ до підпапки. Причиною, чому я хочу використовувати віртуальних користувачів, є те, що я хочу лише мати 1 реального користувача на сервері.

Структура FTP:

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

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

Крім того, щоб уникнути певної плутанини, я також зажадав би іншого користувача отримати доступ до sub_folder3 та тільки sub_folder3 . Я маю на увазі, що я повинен мати можливість вибрати, яку папку та підпапки користувачеві користувач.

Я знайшов способи додати користувачів, щоб побачити цілу структуру або налаштування користувача з папками, обидві з яких мені не потрібні.

Я знайшов подібне запитання, розміщене тут:

Як налаштувати VSFTPD для декількох користувачів, включаючи додавання конкретних каталогів

але він рекомендує, proftpdякі я хоч і був загалом менш безпечним.
Або я пропустив тут суть?


У мене виникли проблеми з автентифікацією протягом найдовшого часу, поки я не знайшов цей сервер defaultfault.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будь-яку папку та файл всередині нього.

Ось тепер ви можете додати скільки завгодно користувачів та обмежити їх доступ до будь-якої папки.

важливо пам’ятати, якщо ви не створили файл конфіденційності користувача, він буде за замовчуванням для папки var / www як root (у прикладі вище)

Якщо підпапка призначена для зміни користувачем, можливо, потрібно змінити власника спільної папки:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

Це працює з деякими модифікаціями: 1) Використовуйте абсолютні шляхи (замініть шляхи, починаючи з "var /" на "/ var". 2) vsftpd 2.3.5, який знаходиться в Ubuntu 12.04, не підтримує параметр enable_writeable_chroot, ви можете вирішити це шляхом встановлення виправленого vsftpd .
gadelat

Привіт, з паролем ssl ми знову опускаємо -c з -d або просто опускаємо -c? Також на другій ноті, ми просто повторюємо запит про зміну пароля? чи є інший метод. Спасибі
mdixon18

Чому потрібно створити домашній каталог за допомогою useradd --home? необхідно?
e-info128

1
Додатково: увімкніть захищені TLS-з'єднання. digitalocean.com/community/tutorials/…
e-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, як і всі 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Папка повинна існувати або з'єднання не буде.

Зараз ви можете спробувати підключитися до свого 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.

Перезавантажте сервер і все закінчено!


Спробував це вже дуже негнучко, оскільки він застосовує local_root = / var / www / $ USER. Це не дозволяє мені вказати єдиний каталог для користувача або користувачів. Зазвичай цей каталог має різну мету та місце розташування залежно від клієнта. Дякую за відповідь, хоча.
Avenyet

0

так, ви можете, а для гнучкості створіть dir-файл користувачаconfig 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 вказаного)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.