Віртуальні користувачі у Pure FTPd

Оригінал тексту – офіційна документація Pure-FTPd (англ.)

Хто такі віртуальні користувачі

Починаючи від версії 0.99.2 Pure FTPd підтримує віртуальних користувачів.

Віртуальні користувачі це простий механізм зберігання переліку користувачів, разом з їх паролями, іменами, ідентифікаторами, домашніми директоріями і іншими даними. Це так як /etc/passwd, тільки не /etc/passwd. Це окремий файл, виключно для FTP. Тобто, ви зможете створити користувачів для FTP, не залежно від системних користувачів.

Також, за віртуальним користувачем може бути закріплена індивідуальна квота, пропускна здатність, незалежна коренева директорія, що не можливо при роботі Pure FTPd з системними користувачами.

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

Тому, перед тим як почати використовувати віртуальних користувачів, гарно було б завести під цю задачу окремого системного користувача. Звісно, ви можете використовувати вже існуючого користувача (на приклад nobody. Тільки не root!), але краще завести окремого.

Отож, створимо групу ftpgroup і користувача ftpuser у ній.
У переважній більшості Unix-like систем це робиться так

groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Від цього моменту усе керування Pure FTPd можна здійснювати командою pure-pw, або можна правити конфігураційні файли вручну, якщо ви вважаєте що так зручніше.

Перелік віртуальних користувачів буде зберігатися у окремому файлі. По одній стрічці на кожного користувача. Синтаксис цієї стрічки ось такий:

<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload
bandwidth>:<download bandwidth>:<upload ratio>:<download ratio>:<max number
of connections>:<files quota>:<size quota>:<authorized local IPs>:<refused
local IPs>:<authorized client IPs>:<refused client IPs>:<time
restrictions>

Усі поля крім account, password, uid, gid, home, directory можна залишити порожніми.

Паролі зберігаються у зашифрованому вигляді. Використовується та сама хешуюча функція що і для закриття паролів у /etc/passwd або /etc/master.passwd. Може використовуватися один з алгоритмів blowfish, md5, multiple-des, або simple des. Як правило, найкращий з тих, що підтримуються системою.

Створення нового користувача

Для створення нового віртуального користувача Pure FTPd використовуйте такий синтаксис:

pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
                         -D/-d <home directory> [-c <gecos>]
                         [-t <download bandwidth>] [-T <upload bandwidth>]
                         [-n <max number of files>] [-N <max Mbytes>]
                         [-q <upload ratio>] [-Q <download ratio>]
                         [-r <allow client host>[/<mask>][,<allow client host>[/<mask>]]...]
                         [-R <deny client host>[/<mask>][,<deny client host>[/<mask>]]...]
                         [-i <allow local host>[/<mask>][,<allow client host>[/<mask>]]...]
                         [-I <deny local host>[/<mask>][,<deny local host>[/<mask>]]...]
                         [-y <max number of concurrent sessions>]
                         [-z <hhmm>-<hhmm>] [-m]

Давайте створимо користувача joe, з домашньою директорією /home/ftpusers/joe. Системний аккаунт, під яким буде працювати “joe” – ftpusers.

pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe

У нас двічі запитають пароль для Joe
Опція -d потрібна для ізоляції joe у його домашній директорії. якщо Joe необхідно працювати з усією файловою системою, використовуйте -D замість -d.

Немає необхідності створювати /home/ftpusers/joe, якщо ви запускаєте pure-ftpd з ключем -j (–createhome). Із цим ключем домашню директорію буде створено автоматично при першому вході користувача в систему.

Ключ -z потрібен для того, щоб дозволити роботу лише у певний проміжок часу. На приклад при -z 0900-1800 Joe зможе працювати з FTP від 9:00 по 18:00. Зверніть увагу на те, що сесія, розпочата у дозволений проміжок часу, буде тривати і за його межами, доки користувач не завершить її.

-r та -R зручно використовувати для обмеження хостів, звідки можлива робота. Їх можна задати як звичайну пару IP/mask (-r 192.168.1.0/24), кілька таких пар (розділяються комами) (-r 192.168.1.0/24,10.1.0.0/16,127.0.0.1/32), один IP (-r 192.168.1.4,10.1.1.5), найменування хоста (-r bla.bla.net,yopcitron.com), або довільна комбінація цих методів.

-y обмежує кількість сесій, які користувач може одночасно створити. ” або 0 означає відсутність такого обмеження. Не слід використовувати цю можливість на сильно навантажених серверах. Краще скористайтеся обмеженням по IP.

Ok, ми створили “joe”. За замовченням, перелік віртуальних користувачів зберігається у файлі /etc/pureftpd.passwd (звісно, ви завжди можете змінити це ключем -f ).

Давайте поглянемо що у цьому файлі

joe:$1$LX/3.F60$bYdYwsQOYIaWq.Ko.hfI3.:500:101::/home/ftpusers/joe/./:::::::::::::

Пароль зашифровано найкращим одностороннім алгоритмом, з тих, що підтримуються системою.
Послідовність вибору алгоритму така: Blowfish, MD5, multiple DES, simple DES.

Зміна властивостей користувача

Після того як користувачів створено можна редагувати їх властивості. На приклад ви можете встановити обмеження каналу, квоту дискового простору, додати повне ім’я і таке інше.

Команда pure-pw usermod працює точно так само як і pure-pw useradd, за виключенням того, що вона не створює нового користувача, а редагує вже існуючого.

Для прикладу ми створимо квоти для Joe. Joe не зможе вивантажити більше 1000 файлів загальним розміром понад 10Mb.

pure-pw usermod joe -n 1000 -N 10

А тепер поглянемо у /etc/pureftpd.passwd:

joe:$1$LX/3.F60$bYdYwsQOYIaWq.Ko.hfI3.:500:101::/home/ftpusers/joe/./::::::1000:10485760::::::

Зверніть увагу на те, що у цьому файлі квота дискового простору вказується у байтах.

Очищення властивостей

Для відміни файлової квоти використовуйте pure-pw usermod -n ”
Для відміни квоти дискового простору використовуйте pure-pw usermod -N ”
To disable ratios, use pure-pw usermod -q ” -Q ”
Для заборони обмеження вхідної пропускної здатності використовуйте pure-pw usermod -t ”
Для заборони обмеження вихідної пропускної здатності використовуйте pure-pw usermod -T ”
Для відміни фільтрації по IP використовуйте pure-pw usermod ”
Для того щоб зняти обмеження по часу роботи використовуйте pure-pw usermod -z ”
Для того щоб зняти обмеження кількості одночасних сесій використовуйте pure-pw usermod -y ”

Видалення користувачів

А тепер нам доведеться видалити Joe. Joe був гарним хлопцем :) .до вашого відома, видалити віртуального користувача не складніше ніж ввести команду pure-pw userdel. А синтаксис у неї такий:

pure-pw userdel <login> [-f <passwd file>] [-m]

Видалення Joe буде виглядати як:

pure-pw userdel joe

Файли користувача після цього залишаються. Можете видалити їх вручну, якщо забажаєте.

Зміна паролю

Для зміни паролю використовуйте команду pure-pw passwd

pure-pw passwd <login> [-f <passwd file>] [-m]

Перегляд інформації

Для того щоб поглянути властивості якогось користувача можна просто знайти його у файлі /etc/pureftpd.passwd , але це не завжди те що потрібно нормальній людині. Тому існує команда pure-pw show і її синтаксис такий:

pure-pw show    <login> [-f <passwd file>]

Давайте поглянемо як там Joe

pure-pw show joe
Login              : joe
Password           : $1$LX/3.F60$bYdYwsQOYIaWq.Ko.hfI3.
UID                : 500 (ftpuser)
GID                : 101 (ftpgroup)
Directory          : /home/ftpusers/joe/./
Full name          : 
Download bandwidth : 0 Kb (unlimited)
Upload   bandwidth : 0 Kb (unlimited)
Max files          : 1000 (enabled)
Max size           : 10 Mb (enabled)
Ratio              : 0:0 (unlimited:unlimited)
Allowed local  IPs : 
Denied  local  IPs : 
Allowed client IPs : 192.168.0.0/16
Denied  client IPs : 192.168.1.1,blah.verybadhost.com
Time restrictions  : 0900-1800 (enabled)
Max sim sessions   : 0 (unlimited)

/./ у кінці шляху до домашньої директорії вказує на те, що користувач замкненій у ній (chrooted).

Застосування змін

УВАГА!
Ви можете додавати, правити та видаляти користувачів наведеними вище командами, або редагуванням /etc/pureftpd.passwd , але FTP сервер не побачить зміни, доки ви не підтвердите їх.

Застосування змін насправді означає, що на основі файла /etc/pureftpd.passwd буде створено новий файл. Це файл PureDB. Він містить ту саму інформацію, що і pureftpd.passwd, але у індексованому вигляді. Це потрібно для того, щоб доступ до нього був швидким навіть при тисячах віртуальних користувачів. PureDB це бінарний файл. Не пробуйте поглянути що у ньому всередині, бо ваш термінал бібікне і зробиться схожим на пекло.

Давайте створимо файл PureDB з /etc/pureftpd.passwd. Індексований файл буде називатись /etc/pureftpd.pdb (як завжди, ви можете змінити його ім’я, якщо це вам не подобається).

pure-pw mkdb

Ця команда зчитує /etc/pureftpd.passwd і створює /etc/pureftpd.pdb , але можна зчитати інший файл і записати результат у інший файл. Це виглядає приблизно так:

pure-pw mkdb /etc/accounts/myaccounts.pdb -f /etc/accounts/myaccounts.txt

Усі зміни, які ви виконали над віртуальними користувачами, будуть зафіксовані: нові користувачі створені, а видалені не зможуть пройти авторизацію, як тільки ви натиснете на Enter після цієї команди.

Перезапускати pure-ftpd для підтвердження змін не потрібно.

Після внесення змін безпосередньо в /etc/pureftpd.passwd також необхідно виконувати pure-pw mkdb.

При застосуванні pure-pw можна викликати pure-pw mkdb /etc/pureftpd.pdb автоматично. Для цього використовують ключ -m.

pure-pw passwd joe -m

Ця команда змінює пароль для Joe у pureftpd.passwd і фіксує зміни у /etc/pureftpd.pwd

Активація віртуальних користувачів

Звісно, для того щоб працювати з віртуальними користувачами потрібно спочатку дозволити їх використання у самому FTP сервері. Для цього Pure-FTP має бути зібраний з флагом –with-puredb, або –with-everything (бінарні пакети зазвичай так і зібрані).
Тепер додайте ось таку опцію до опцій запуску pure-ftpd

-l puredb:/path/to/puredb_file

Якщо дозволене використання довгих опцій, то замість -l можна використати –login.
Давайте запустимо сервер з аутентифікацією через puredb і дозволом на автоматичне створення домашніх директорій:

/usr/local/sbin/pure-ftpd -j -lpuredb:/etc/pureftpd.pdb

Спробуйте ftp localhost і увійдіть під іменем joe.

Конвертування системних користувачів

Ви можете конвертувати усіх системних користувачів (/etc/passwd) у віртуальних користувачів FTP сервера за допомогою інструменту pure-pwconvert.
Просто запустіть

pure-pwconvert >> /etc/pureftpd.passwd

Якщо ви виконуєте цю команду від імені непривілейованого користувача, паролі не будуть перенесені. Якщо цю команду виконує root, будуть перенесені навіть хеші паролів.

Конвертування системних аккаунтів може знадобитись, бо це дозволяє користувачам мати різні паролі для FTP та Telnet (SSH) доступу.

Змінні оточення

Змінна PURE_PASSWDFILE містить шлях до файла pureftpd.passwd. Якщо вона не вказана, то використовується файл /etc/pureftpd.passwd .

Змінна PURE_DBFILE містить шлях до файла pureftpd.pdb. Якщо вона не вказана, то використовується файл /etc/pureftpd.pdb .

Віртуальні користувачі у Pure FTPd

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *