LINUX-BG Адрес : http://www.linux-bg.org |
Персонален pure-ftpd с виртуални потребители и криптиране |
От: Владимир "n3c" Беляшки Публикувана на: 23-01-2004 Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=devs&key=358298173 |
Всички от нас, в една или друга степен, са запознати с ftp протокола и неговите особености и възможности. Той намира огромно приложение, а броят на ftp сървърите непрекъснато расте с навлизането и у нас на кабелните връзки, достъпни за масовия потребител. В настоящата статия ще предложа на вниманието Ви един вариант за реализиране на личен ftp сървър. Моля обърнете внимание, че тук не става дума за пускане на стандартен ftp сървър, вървящ на порт 21/tcp. Защо точно pure-ftpd? Резонен въпрос. Какво Ви е нужно? Преди да преминете към конфигурация и инсталация е нужна малко предварителна подготовка. Когато избирате място за директория, в която ще се помещават съдържанието на ftp сървъра и системните му файлове, не забравяйте, че съдържанието на един ftp сървър може да придобие големи размери и то сравнително бързо. Затова създайте въпросната директория на дисков дял с достатъчно място. Ако няма да предоставяте възможност за качване на файлове притеснението с мястото отпада, тъй като винаги можете да направите линк към съществуващ системен ресурс и да избегнете множеството му копия на различни места.
# mkdir -p /full/path/to/dir/ftp Реализация
$ su По-вероятно (и препоръчително) е да използвате споменатите вече системни инструменти за инсталация на софтуер, което Ви спестява ръчното разархивиране. За целта е необходимо да подадете описаните по-горе след ./configure аргументи по време на прединсталационната конфигурация с команден ред и синтакс специфичен за Вашата дистрибуция или да редактирате Makefile, където е приложимо, като ги опишете в CONFIGURE_ARGS= секцията. Пълен списък на наличните аргументи и обяснение какво означават можете да намерите във файла README или тук. Ето и кратко описание на използваните в случая: --with-altlog: информация свързана с работата на сървъра се логва във файл с определен формат. Поддържаните в момента формати са CLF, Stats и W3C. Предлаганите възможности включват още: поддръжка за потребителски бази данни с mysql/postgresql; смяна на езика, на който сървъра "говори" (български още няма :)); легитимация чрез pam модули; модул за извикване на външна програма след качване на нов файл на сървъра и много други. След като е направена желаната конфигурация се пристъпва към компилиране и инсталиране:
# make Ако ползвате системните инструменти процесът и тук е автоматизиран. Вече имате инсталиран ftp сървър. За да може да се добавят виртуални потребители, които да ползват сървъра оторизирано, Ви е нужен системен акаунт, правата на който се делегират при влизане в сървъра. Това може да е всеки съществуващ вече акаунт (без root) или акаунт създаден специално за целта. Добавете потребител "ftpuser" в група "ftpgroup" примерно. В Linux/OpenBSD/NetBSD/Solaris/HPUX и други Unix-подобни системи това става с:
# groupadd ftpgroup А във FreeBSD с:
# pw groupadd ftpgroup В горните примери заместете $SHELL с пълен път към валиден шел присъстващ в системата Ви.
# chown -R ftpuser:ftpgroup /full/path/to/dir/ftp Разбира се можете да дадете и по-рестриктивни права, но съвсем резонно е, който има достъп до системата да има достъп и до съдържанието на ftp-то, без значение дали имате само локални или и отдалечени потребители. Ако само Вие ползвате машината - нещата са повече от ясни. Пускане на сървъра.
#!/full/path/to/bash Разбира се всичко може да бъде написано на един непрекъснат ред без "\"-те, а също така замествате пътеките, така че да рефлектират адекватно върху състoянието на системата Ви. Имената на файловете могат да бъдат сменени по Ваше усмотрение (примерно вместо ftpd.log може да бъде ftp.log, pure-ftpd.log, pure.log или каквото Ви е удобно за употреба). Единственото правило е да знаете точно как сте ги именували, което винаги можете да проверите като видите съдържанието на директорията /full/path/to/dir/ftp. $FTP_SERVER_IP замествате с IP адреса, на който ще работи сървъра, а $PORT с порта, на който ще слуша. Обърнете внимание, че в случая IP и порт не се задават като IP:порт. За криптиране на връзката pure-ftpd използва SSL/TLS. Това означава, че на машината, на която ще върви ftp сървъра трябва да има инсталирани OpenSSL библиотеки и SSL сертификат. За да ползвате SSL/TLS трябва да разполагате с файл /full/path/to/dir/ftp/pure-ftpd.pem, който да съдържа частен ключ за хоста Ви и съответния сертификат. Генерирането на нов сертификат става по следния начин:
# openssl req -x509 -nodes -newkey rsa:1024 -keyout \ Единственото, което Ви остава да решите е дали да приемате криптирана/некриптирана връзка (това зависи от възможностите на ftp клиента) или само криптирана (на клиентите неподдържащи криптиране се отказва достъп) и да го зададете като параметър в стартиращия скрипт (опцията -Y в скрипта по-горе). Валидните комбинации са: С това настройките на ftp сървъра се изчерпват и вече спокойно може да преминете към стартиране. Направете го от команден ред като използвате опциите, избрани от Вас, от стартиращия скрипт (не забравяйте да смените потребителя, с който стартирате сървъра - su ftpuser). Ако всичко е наред сървъра ще тръгне без да върне никакво съобщение, в противен случай няма да бъде стартиран. Затова проверявате дали има работещ сървър: $ ps aux | grep pure-ftpd Трябва да получите отговор подобен на ftpuser 86170 9.0 0.3 2448 1636 ?? Ss 3:47PM 0:02.09 pure-ftpd (SERVER) (pure-ftpd) Ако няма работещ сървър опитайте повторно стартиране, но без опцията -B (режим демон). Веднага ще получите съобщение за грешка, по което може да се ориентирате каква точно нередност пречи на функционирането на сървъра. След като се сдобиете с нормално работещ ftp сървър остава само да добавите съответните виртуални потребителски акаунти. За управление на виртуалните акаунти pure-ftpd предлага няколко вградени средства. Управление на виртуалните потребители $ pure-pw useradd goshko -u ftpuser -d /full/path/to/dir/ftp/pub -f /full/path/to/dir/ftp/ftpd.passwd -u показва с правата на кой системен потребител ще се идентифицира виртуалния "goshko". -d е домашната директория на "goshko". С -f се указва в кой файл се намира потребителската бази данни, където да се добави новосъздадения "goshko". При указване на домашна директория може да изберете два подхода: 1) всички виртуални потребители поделят една обща домашна директория (както в горния случай); 2) всеки виртуален потребител има своя собствена домашна директория, която се явява и / за него (в този случай тя се дефинира като -d /full/path/to/dir/ftp/pub/goshko в командния ред на pure-pw и при наличие на опция -j в стартиращия скрипт бива създадена автоматично при първото влизане в сървъра). Разликите при двата подхода са очевидни - при "1)" цялото съдържание на ftp-то е достъпно за всеки, докато при "2)" се получава виртуално разделение (тъй като всеки е заключен с chroot в домашната си директория). Обърнете внимание, че съдържанието на ftp-то може да се слoжи директно в /full/path/to/dir/ftp/pub при "1)", а при "2)" е необходимо ресурсите полагащи се на всеки виртуален потребител да се линкват в дамашната му директория. Това са задължителните параметри, без които не може да добавите виртуален потребител, но те не са единствените. Имате възможност да поставяте квоти за дисково пространство и за ограничаване скоростта на трафика, да отказвате или разрешавате достъп на виртуален потребител от определени хостове, да слагате лимитиращо съотношение между свалени/качени брой файлове или трафик и т.н. Пълен списък и описание може да намерите в документацията (файла README.Virtual-Users) или тук. Веднъж създаден профилът на виртуалния потребител не се заключва. Имате възможност да правите колкото и каквито промени искате, в размките на регламентираното. Например на сложите квота на "goshko": $ pure-pw usermod goshko -n 1000 -N 10 -f /full/path/to/dir/ftp/ftpd.passwd Току-що ограничихте "goshko" да разполага с 1000 файла и 10МБ дисково пространство на ftp сървъра. Както сами виждате usermod работи по същия начин като useradd с тази разлика, че редактира съществуващ виртуален профил. Изчистване на атрибути става като подадете '' (два апострофа или ударения, както ги наричате) вместо стойност към съответния параметър: $ pure-pw usermod goshko -n '' -N '' -f /full/path/to/dir/ftp/ftpd.passwd Изтриване на потребител, както сигурен съм вече се досещате, става с помощта на userdel: $ pure-pw userdel goshko -f /full/path/to/dir/ftp/ftpd.passwd А смяна на потребителска парола, също се досещате, с passwd: $ pure-pw passwd goshko -f /full/path/to/dir/ftp/ftpd.passwd Когато сте готови с промените или просто искате да проверите настройките на нечий виртуален профил, използвайте show: $ pure-pw show goshko -f /full/path/to/dir/ftp/ftpd.passwd Получавате достатъчно подробна, ясна и прегледна информация надявам се. Забележка: за изтриване на виртуален потребител или за смяна настройките на съществуващ, може да прибегнете и към ръчна редакция на файла с пароли. За повече информация относно синтакса на потребителски запис се консултирайте с документацията.
# chown -R ftpuser:ftpgroup /full/path/to/dir/ftp Всички промени, които правихте до сега се записват и съхраняват в съответния passwd файл. Но за да могат те да станат реалност и ftp сървъра да ги ползва, трябва от въпросния passwd файл да се създаде база данни. Това се осъществява с помощта на pure-pw mkdb. Синтаксът на командата е прост: $ pure-pw mkdb /full/path/to/dir/ftp/ftpd.db -f /full/path/to/dir/ftp/ftpd.passwd Така всички направени промени влизат в сила веднага, без да се налага рестартиране на ftp сървъра. За да се ползва базата данни от pure-ftpd, системният потребител, от чието име върви сървъра, трябва да има права за четене на db файла. Ето и един прост пърл скрипт за автоматизация на въвеждане промените в сила:
#!/full/path/to/perl -w За да работи този скрипт го копирайте в /full/path/to/dir/ftp/. Ако сте сменяли, за Ваше удобство, името на файла с пароли, направете необходимите корекции и в скрипта. Забележка: при използване на която и да е от pure-pw командите не е нужно да въвеждате пълния път до файла с паролите, при условие, че се намирате в директорията, където се съхранява той. Специални благодарности на Симеон "Blackmore" Симеонов за пърл скрипта и за неоценимата помощ, оказана при реализирането на горния сценарии. << Публични информационни системи с Линукс терминали | Помогнете на Fedora >> |
Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук,
но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора,
както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.
All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
|