|
|
|
СЪВЕТИ
|
Директории и права в ProFTPd
|
|
|
|
|
|
от Vladsun(2-08-2007)
рейтинг (19)
[ добре ]
[ зле ]
Вариант за отпечатване 1. Увод
Статията ще разгледа проблемите и решенията при създаване на home директориите на FTP потребителите, структурата им и правата на потребителите в тях. Вниманието е концентрирано върху конфигурирането на FTP сървер със специфични изисквания към структурата на директориите и поддиректориите.
ProFTP е един от популярните ftp сървери и тъй като аз работя предимно с него ще разгледам неговата конфигурация.
2. Обща конфигурация
След като FTP сървера се конфигурира и пусне в действие е необходимо да се добавят потребители, които да имат достъп до тази услуга.
Нека предположим, че сме създали потребител ftp към група ftp и сървера е пуснат с този потребител. Също така сме създали директорията /home/ftp със собственик ftp:ftp.
При тези условия, искаме да добавяме директориите на потребителите като поддиректории на /home/ftp/. Добавянето може да стане по различен начин - примерно чрез mySQL или LDAP модулите за автентификация на ProFTP. Друг начин е чрез използването на useradd командата.
Най-често това става чрез:
useradd |
useradd -g ftp -s /bin/false -d /home/ftp/ivan -pPAROLA ivan |
Използването на /bin/false за shell на FTP потребителите е препоръчително.
В тази статия ще разгледам конфигурирането на ProFTP сървер с MySQL автентификация. Самият инсталационен процес няма да бъде разглеждан.
Ето какво представлява /etc/proftpd/proftpd.conf:
/etc/proftpd/proftpd.conf |
Include /etc/proftpd/modules.conf
UseIPv6 off
ServerName "ServerName of you choice"
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
ListOptions "-l"
Port 21
MaxInstances 30
User ftp
Group ftp
Umask 022 022
AllowOverwrite on
DenyFilter \*.*/
DenyFilter ".ftpaccess"
DefaultRoot ~
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
<IfModule mod_tls.c>
TLSEngine off
</IfModule>
<IfModule mod_quota.c>
QuotaEngine on
</IfModule>
<IfModule mod_ratio.c>
Ratios on
</IfModule>
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine on
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine on
</IfModule>
SQLConnectInfo proftpd@localhost proftpd_database proftpd_password
SQLAuthenticate users groups
SQLAuthTypes Crypt Backend
SQLDefaultHomedir ~
SQLUserInfo users userid passwd uid gid homedir shell
SQLGroupInfo groups groupid gid members
SQLLogFile /var/log/proftpd.sql_log
# Count number of logins for each user
SQLLog PASS logincount
SQLNamedQuery logincount UPDATE "login_count=login_count+1 WHERE userid='%u'" users
# Save last login
SQLLog PASS lastlogin
SQLNamedQuery lastlogin UPDATE "last_login=now() WHERE userid='%u'" users
# Count number of bytes/files downloaded and uploaded
SQLLog RETR dlbytescount
SQLNamedQuery dlbytescount UPDATE "dl_bytes=dl_bytes+%b WHERE userid='%u'" users
SQLLog RETR dlcount
SQLNamedQuery dlcount UPDATE "dl_count=dl_count+1 WHERE userid='%u'" users
SQLLog STOR ulbytescount
SQLNamedQuery ulbytescount UPDATE "ul_bytes=ul_bytes+%b WHERE userid='%u'" users
SQLLog STOR ulcount
SQLNamedQuery ulcount UPDATE "ul_count=ul_count+1 WHERE userid='%u'" users
# Do not let disabled or expired users to login
SQLUserWhereClause "disabled!=1 and (NOW()<=expires or expires=-1)"
# Do not require a valid shell, this might be a good thing to turn on for SQL-users
# This might simplify the configuration a little bit
RequireValidShell off |
Естествено, вашият конфигурационен файл може да се различава, особено в MySQL частта. В случая съм използвал готово решение за web интерфейс - "ProFTPd management", в което има задание за таблиците и конфигурацията на ProFTP.
До тук нищо интересно.
3. Създаване на директории при поискване
Ако се опитате да влезете във FTP сървера с потребител създаден от www интерфейса и по горния конфигурационен файл, то ще получите грешка поради факта, че няма създадена home директория за потребителя. Причините за липсата на тази директория са две:
www сървера не би трябвало да има права за създаване на директории в /home/ftp/;
нямате зададена опция в конфигурационния файл на ProFTP за автоматично създаване на директорията.
Едина от опциите в случая е:
SQLHomedirOnDemand |
SQLHomedirOnDemand on |
Т.е. при първото влизане на потребителя неговата home директория ще се създаде автоматично със съответните собственик, група и права. За правата ще говорим по-долу.
Друга опция, с по-големи възможности е:
Ако са зададени и двете опции, то CreateHome е с приоритет.
Опцията е в следния формат:
CreateHome |
CreateHome off|on [<mode>] [skel <path>] [dirmode <mode>] |
В най-простия вариант имаме:
В този случай ще се създават автоматично директории за потребителите, като правата за директорията са 0700 - стойността на mode по премълчаване.
Ако искаме да променим правата, прим. на 711, то ще използваме:
CreateHome |
CreateHome on 711 |
Използването на dirmode параметъра се налага в случаите, когато създаваме home директория за потребител, която се намира в несъществуваша(и) директория(и). Примено имаме потребител hasan. Искаме така да организираме дървото на FTP потребителските директории, че то да е подредено по азбучен ред от втори ред. Т.е. директорията на hasan трябва да е /home/ftp/h/ha/hasan. Ако hasan е първия потребител с буквата "h", то директориите /home/ftp/h и /home/ftp/h/ha все още не съшествуват. В такива случаи използваме следното:
CreateHome |
CreateHome on 700 dirmode |
В този случай правата върху директориите /home/ftp/h и /home/ftp/h/ha са отново 0700.
Ако искаме да променим правата върху директориите /home/ftp/h и /home/ftp/h/ha (прим на 0711), то използваме:
CreateHome |
CreateHome on 700 dirmode 711 |
В някои случаи се налага да се изгради структура от поддиректории за всеки потрбител. Примерно всеки потребител трябва да има директории out, in, temp при това с различни права върху тях.
Реализацията на подобна функционалност се задава чрез skel параметъра:
CreateHome |
CreateHome on skel /etc/ftpd/skel |
Стойността на този параметър де факто е пътя до директорията, която съдържа модела (скелета) за създаване на структурата на директориите заедно с файловете в тях за всеки потребител.
Според примера по-горе в /etc/ftpd/skel трябва да имаме имаме:
/etc/ftpd/skel/in
/etc/ftpd/skel/out
/etc/ftpd/skel/temp
Тогава при първото влизане на потребителя hasan ще се получи следното дърво на директориите:
/home/ftp/hasan/in
/home/ftp/hasan/out
/home/ftp/hasan/temp
Ако използваме и примера за dirmode, то ще се получи следното дърво на директориите:
/home/ftp/h/ha/hasan/in
/home/ftp/h/ha/hasan/out
/home/ftp/h/ha/hasan/temp
В този случай пълната опция е:
CreateHome |
CreateHome on 700 skel /etc/ftpd/skel dirmode 711 |
В "скелетната" директория може да има и файлове - те също ше се създадат в директорият на потребителя. Най-уместно е тези файлове да са .ftpaccess файлове, с които да се задават допълнително ограничения по действията на потребителя за всяка директория. Именно този файл ще разгледаме в следващата точка.
4. Използване на .ftpaccess файла
Файл с такова име, намиращ се в директория принадлежаща на FTP потребител действа като директивите в секция на конфигурационния файл на ProFTP. Ето защо е наложително да защитим достъпа до този файл чрез използването на:
.ftpaccess |
DenyFilter ".ftpaccess" |
в конфигурационния файл.
Естествено, няма да описвам всички възможни опции, които можете да зададете в този файл. Ще разгледам само някои случаи за ограничаване на правата за писане, четене, триене и редакция на файлове от потребителя.
4.1. Само за четене
.ftpaccess |
<Limit ALL>
DenyAll
</Limit>
<Limit CDUP CWD XCWD XCUP PWD XPWD LIST>
AllowAll
</Limit>
<Limit READ>
AllowAll
</Limit> |
4.2. Само за запис, без триене
.ftpaccess |
<Limit ALL>
DenyAll
</Limit>
<Limit CDUP CWD XCWD XCUP PWD XPWD LIST>
AllowAll
</Limit>
<Limit STOR STOU>
AllowAll
</Limit> |
4.3. Само запис, без триене, без редакция
Важно е да се отбележи забраната за CHMOD командата.
.ftpaccess |
<Limit ALL>
DenyAll
</Limit>
<Limit CDUP CWD XCWD XCUP PWD XPWD LIST>
AllowAll
</Limit>
<Limit STOR STOU>
AllowAll
</Limit>
Umask 222 |
За повече информация относно FTP командите, които можете да използвате по описания по-горе начин:
http://www.nsftools.com/tips/RawFTP.htm
5. Използвани материали
http://www.nsftools.com/tips/RawFTP.htm
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-CreateHome.html
http://www.khoosys.net/single.htm?ipg=848
http://ppmy.sourceforge.net/HOWTO
<< | >>
|
|
|
|
|
ейй, вярно еее :-) От: the_real_maniac На: 2-08-2007@8:09 GMT+2 Оценка: 1/Неутрален~ запис , без триене :-P :)
Наистаин можеше да се указва маскта при създаване на файл(овете) каква да бъед хехех , ехх колко простичко решение, знаех си че е простичко нещо ... simply де, че на български просто се ползва много често като обида и .. :-)
Е да :-) браво за статията ;-) Че споделяш опит :-)
[Отговори на този коментар]
Към: ейй, вярно еее :-) От: Vladsun <vsmin (a) mail[ точка ]bg> На: 2-08-2007@16:34 GMT+2 Оценка: 1/Неутрален:) И аз се радвам, че имам възможността да споделя успешния си опит :)
Аз си знаех, че е простичко - не случайно го пуснах в раздела за начинаещи :)
[Отговори на този коментар]
Браво От: Martin Tapankov На: 2-08-2007@17:41 GMT+2 Оценка: 1/НеутраленСтатията наистина е добра, от типа "for dummies" - дори и да не си се занимавал с това, можеш да се оправиш с конфигурацията. Харесва ми че има доста примери, а не са изредени само опциите. Поздравления!
[Отговори на този коментар] Към: Браво От: Vladsun <vsmin (a) mail< dot >bg> На: 2-08-2007@19:20 GMT+2 Оценка: 1/НеутраленКонфиг-а е малко специфичен, но явно е полезен :)
Мерси за хвалбите!
[Отговори на този коментар]
Към: ейй, вярно еее :-) От: the_real_maniac На: 2-08-2007@20:04 GMT+2 Оценка: 1/НеутраленЕми какво да ти кажа ВладиСън , то логично , логично - НЕ , ами !!! направо срам да те хване хахаха :-) :-P :-) нищо, готино се получи , пак браво и смело напред :-)
пп: ако не е тайна за какво ще ми е да качвам файла само веднъж и да не мога да го трия -обновявам, освен ако не трябва да става само един път на ден , примерно в началото или края :-)
аааа и да имаш някакъв съвет как по-хубаво да се логва достъпа до Proftpd, защото ... примерно аз имам заявки през почти всеки 5-10 секунди
просто такава е установката ;-) :-)
:-P :-) благодаря , предварително
послепис: т.е при мен е почти постоянно обновяване, налага се няма как - realtime каринта трябва ;-) :-)
[Отговори на този коментар]
Към: Към: ейй, вярно еее :-) От: Vladsun <vsmin__at__mail[ точка ]bg> На: 2-08-2007@21:58 GMT+2 Оценка: 1/НеутраленАз това го правих по задание - имат си хората софтуер, който качва разни неща по ФТП и някои файлове са архивни - т.е. не трябва да могат да се променят.
А какво искаш да логваш по-точно?
[Отговори на този коментар] Към: Към: Към: ейй, вярно еее :-) От: the_real_maniac <the __точка__ real __точка__ maniac __@__ gmail __точка__ com> На: 2-08-2007@23:08 GMT+2 Оценка: 1/НеутраленМи гледай сега каква е идята ( а за заданието , предположих, понеже видях наил статиите за MySQL-а ;-) и все пак предположих , че е нещо архиви на края на деня, счетоводство, банка и т.н, как да е;-) идеята е важна и е важно , че работи) :-)
Та .. мойта задачка-полузакачка ...
Получавам информацията ... за състоянието на машини по интернет във файл ;-) разбираш ли :)
И въпроса е , че този файл трябва да е Up-to-date през 5-10 сек
въпроса че хубаво има си
glitch по мрежата или интернета на моменти, но в 1 минута си има доста заявки , много даже ... не знам точно колко, тъкмо ще проверя, но лога за 1 ден става огромен , за месец стига в стотици мегабайти (лога само за заявките към фтп-то , без другите глупости)
да не говорим че това фтп от време на време има и други неща
та ок , мога да логвам заявките само за този определен адрес, обаче те са толкова много, че ... за да съм сигурен че няма да се атакува и правят глупости нали има ограничение чрез iptables за този определен адрес и прочие, но ми се вжида прекално грубо, защото е възможно IP-то на сървъра който праща заявките да се смени или дори сменя от време на време , и т.н, и т.н
та въпроса как ... прилежно/подредено , лесно за преглеждане (в текстови режим за *преглеждане) да се логва ... информацията от ftp достъпа / заявките след като са наистина много
кажи ги през 5/10 сек заявка min ;-) :-)
или айде нормално "темпо" заявка на 10 сек
6 за мин и т.н
за ден са представяш си и след седмица решиш да видиш нещо, защото е възникнал проблем, много неудбно, дори да знаеш и часа ;-)
май трябавше да си отворя тема във форума, но нищо и там ще го направя ;)
е благодаря ти за отделенто :) време :-P :)
[Отговори на този коментар] Към: Към: Към: Към: ейй, вярно еее :-) От: Vladsun <vsmin__at__mail< dot >bg> На: 6-08-2007@23:29 GMT+2 Оценка: 1/НеутраленПо-добре ми прати ЛС за задачката-закчката, че так почти нищо не разбрах - какви са тия хостове, до колко са "доверени", какво инфо пращат, защо не използваш scp ;), (пак) какво точно искаш да логваш и т.н.
[Отговори на този коментар]
|
|
|
|
|
|
|
|