 |
от 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
<< | >>
|
 |