Рассылка закрыта
При закрытии подписчики были переданы в рассылку "[Linux и BSD]: новости, статьи, свежий софт от LinuxRSP.RU" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Январь 2005 → | ||||||
1
|
2
|
|||||
---|---|---|---|---|---|---|
3
|
4
|
5
|
6
|
7
|
8
|
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
22
|
23
|
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
Автор
Статистика
1.788 подписчиков
-3 за неделю
-3 за неделю
Linux дистрибутив Slackware. Энциклопедия настройки. proftpd - файловый сервер.
Информационный Канал Subscribe.Ru |
proftpd - файловый сервер. |
-n | режим демона. При этом в /etc/proftpd.conf должна быть строчка ServerType standalone |
-c файл | использование альтернативного файла конфигурации |
-p 0|1 | использование постоянного пароля: 0-запрет; 1-добро. Также определяется директивой PersistentPasswd |
-t | тест конфигурационного файла |
-v | просто показывает свою версию |
$ man proftpd
, со списком программ и их конфигурационных файлов, где можно покопаться.
FILES /usr/sbin/proftpd /etc/proftpd.conf /usr/bin/ftpwho /usr/bin/ftpcount /usr/bin/ftptop /usr/sbin/ftpshut /var/log/xferlog /var/run/run/proftpd.pid /var/run/run/proftpd.scoreboardНаиболее интересной программой из этого списка является
ftptop
. Она в режиме реального времени отображает всех подключенных в данный момент пользователей, выполняемые команды и проч.
ftptop/0.9: Mon Dec 13 00:56:40 2004 1 Total FTP Sessions: 0 downloading, 0 uploading, 1 idle PID S USER CLIENT SERVER TIME COMMAND 17848 I ftp localhost 0.0.0.0:21 194 idleПодобную информацию в виде среза дает
ftpwho
. Ее стоит запускать с ключиком -v.
root@u158:/etc/X11:# ftpwho -v inetd FTP daemon: 17871 ftp [ 0m11s] 0m11s idle client: localhost [127.0.0.1] server: 0.0.0.0:21 (Genas FTP) location: / Service class - 1 userОставшиеся еще проще -
ftpcount
показывает общее число подключенных пользователей, а ftpshut
выключает (выгружает из памяти) ftp-сервер через заданное количество времени.
Директивы
Полный список директив на английском лучше смотреть на сайте разработчиков [1] . Список основных директив на русском я взял из статьи Д.Колиснеченко [2] .
Директива | Описание |
AccessGrantMsg message | Ответное сообщение, которое будет отправлено пользователю в случае его регистрации или получения анонимного доступа. Символы %u будут заменены на имя пользователя, которое он ввел при регистрации. |
Allow from all | host | network [,host | network[, ...]] | Используется внутри блока Limit. Ограничивает доступ к серверу (а именно разрешает доступ). По умолчанию allow from all |
AllowAll | Разрешает доступ к блокам Directory, Anonymous, Limit |
AllowForeignAddress on | off | Разрешает клиенту указывать при соединении соединения адрес, который не соответствует ему. По умолчанию off. Может использоваться в блоках VirtualHost, Anonymous, <Global> |
AllowGroup group_list | Разрешает доступ определенным группам. Используется в блоке Limit |
AllowUser user_list | Разрешает доступ определенным группам. Используется в блоке Limit |
AnonRequirePassword on | off | Требует пароль при анонимной регистрации. Пароль должен совпадать с паролем того пользователя, который запустил демон. По умолчанию опция выключена. |
<Anonymous directory> | Создает анонимную учетную запись, directory - корневой каталог анонимного сервера. |
AuthGroupFile path | Позволяет указать путь к альтернативному файлу group. По умолчанию используется файл /etc/group |
AuthUserFile path | Указывает альтернативный файл passwd |
Bind address | Разрешает привязку дополнительного IP-адреса к основному или виртуальному хосту. |
DefaultRoot directory | Задает корневой каталог по умолчанию |
Deny from all | host | network | Запрещает доступ к серверу. Блок Limit |
DenyAll | Запрещает анонимным пользователям доступ к объектам, указанным в блоке Limit |
DenyUser user_list | Запрещает доступ определенным пользователям |
<Directory> path | Используется в VirtualHost, Anonymous для того, чтобы определить особенные параметры доступа к каталогу и его подкаталогам |
DisplayFirstChdir filename | Текстовый файл filename будет выводиться, когда пользователь впервые за время сеанса войдет в данный каталог. Используется в VirtualHost, Directory, Anonymous |
DisplayLogin filename | Этот файл будет отображен, когда пользователь зарегистрируется |
<Global> | Используется для задания параметров, которые будут использоваться как основным, так и всеми виртуальными серверами |
<Limit command> | Ограничение на выполнение данной FTP-команды, например LOGIN, WRITE |
MaxClients number | none | message | Ограничение на количество клиентов. Message будет отображено, если пользователю будет отказано в доступе. Блоки Anonymous, Global |
MaxLoginAttempts | Максимальное количество попыток зарегистрироваться. По умолчанию 3. Блоки VirtualHost, Global |
Order allow, deny | deny, allow | Порядок выполнения директив Allow и Deny в блоке Limit |
PersistentPassword on | off | При значении on будут использованы системные файлы /etc/passwd и /etc/group, несмотря на то, что командой chroot корневой каталог был изменен. |
RequireValidShell on | off | Разрешает или запрещает регистрацию при использовании оболочек (shells), которые не указаны в файле /etc/shells |
ServerAdmin email | Определяет email администратора сервера. |
ServerType | Определяет режим работы сервера standalone (по умолчанию) или inetd. В первом случае сервер будет запускаться автоматически из стартовых сценариев системы, во втором - его будет запускать сервер inetd при попытке соединения. |
TimeoutIdle seconds | Время в секундах, в течение которого пользователь имеет право не проявить активности. По умолчанию 60 (1 минута). |
User username | Имя пользователя, присвоенное демону ProFTP< |
UserAlias Alias User | Создает псевдоним (alias) для пользователя (user) |
<VirtualHost address> | Создает виртуальный сервер |
<Limit>
. Вы наверняка заметили ее в файле по-умолчанию. Первый раз мы встречаем ее в блоке <Anonymous ~ftp>
# Limit WRITE everywhere in the anonymous chroot <Limit WRITE> DenyAll </Limit>Как написано в комментарии - этот блок запрещает запись всем анонимным пользователям. Второй раз директива
<Limit>
встречается при описании папки, специально предназначенной для закачки файлов на сервер анонимными пользователями. В даном случае этот блок закомментирован.
# An upload directory that allows storing files but not retrieving # or creating directories. # <Directory incoming/*> # <Limit READ> # DenyAll # </Limit> # # <Limit STOR> # AllowAll # </Limit> # </Directory>Если же удалить символы комментария, то первый лимит
<Limit READ>
указывает на запрет чтения (скачивания) из каталога, а второй <Limit STOR>
разрешает запись в каталог. Разрешение или запрещение операций WRITE, READ, STOR
и LOGIN
определяется внутренними директивами Allow, AllowAll, AllowGroup, AllowUser, Deny, DenyAll, DenyUser
, описанными выше.
WRITE | Операции записи |
READ | Операции чтения |
STOR | Операции создания(приема) файлов |
LOGIN | Операции по регистрации |
.ftpaccess
Это специальный файл, опять же проведу параллель с Apache и его .htaccess
. Т.е. туда можно поместить такие же директивы, как и в /etc/proftpd.conf
, но их приоритет будет выше, чем в упомянутом файле. Поместив .ftpaccess
в каку-либо директорию, мы тем самым описываем использование каталогов начиная с данного и всех вложенных. Если во вложенной папке тоже есть такой файл с директивами, противоретящими предыдущему .ftpaccess
, то они будут более приоритетными. Используется принцип наследования.
Анонимный сервер
Построение анонимного сервера на основе proftpd
проще чем на wu-ftpd
, требующего дополнительный пакет. Выше уже была рассмотрена организация анонимного сервера на основе конфигурации по-умолчанию. Для описания используется директива <Anonymous путь_к_каталогу>
. В качестве директории обычно выбирают или /var/ftp
или /home/ftp
или любой другой по вашему усмотрению. В моем случае директория /home
физически расположена на отдельном разделе в формате XFS, специально разработанным для подобных целей. Поэтому каталог по-умолчанию меня более чем устроил. При запуске, proftpd
сделает для этого каталога команду chroot
, т.е. для анонимного пользователя это будет корневой каталог, выше которого ему не подняться. Внутри блока <Anonymous>
прописываются директивы, относящиеся
к конфигурации анонимного сервера. Вот немного подрехтованный блок из файла по-умолчанию.
# Блок конфигурации анонимного FTP-сервера. # Чтобы все заработало, удалите пользователя "ftp" из "/etc/ftpusers". <Anonymous ~ftp> # Включаем проверку командного интерпретатора. RequireValidShell on # Определяем под именем какого локального пользователя будет # работать клиент, а также его группу. User ftp Group ftp # Делаем псевдоним "anonymous" для пользователя "ftp". UserAlias anonymous ftp # Лимит клиентов MaxClients 10 # Запрет на запись <Limit WRITE> DenyAll </Limit> # Директория для закачки файлов на сервер. # Запрещается чтение(копирование), а также создание директорий. <Directory upload/*> <Limit READ> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> </Anonymous>В самом начале нам заботливо напоминают, что из файла
/etc/ftpusers
необходимо убрать пользователя ftp, иначе ничего работать не будет. Дальше идет наш блок. Директория ~ftp
- для тех кто не знает, и есть /home/ftp
. Пример прокомментирован, так что на этом и закончим его обсуждение.
Хочу акцентировать ваше внимание на тот факт, что все директории, начиная от /home/ftp
должны принадлежать пользователю ftp и группе ftp и иметь права хотябы 755. На эти грабли даже я наступал :). Хорошо бы еще задать дисковую квоту или всему каталогу, или каталогам, предназначенных для закачки на сервер, а то с легкой руки хорошего друга можете остаться на нуле. Ведь Linux вам не Windows :) - он не будет надоедать вам сообщениями мол а место-то кончается - уже 2Гб осталось :). У меня например, бывало, что компиляция толстых программ забивала вин под голый 0 так, что даже MC не мог сохранить свой 1кб настроек.
Виртуальный сервер
Это понятие лучше пояснить на примере хостинга, т.е. web-сервера, предназначенного для размещения более чем одного сайта. Подавляющее большинство сайтов в интернете размещено именно на таких серверах. Физически, это может быть одна или несколько машин, объединенных в сеть, но обслуживающих огромное количество доменов (читай сайтов). Отсюда и выражение "Виртуальный", т.е. физически не существующий. То же самое можно сказать и о виртуальных ftp-серверах.
В случае конфигурации виртуального ftp-сервера на основе proftpd
, необходимо использовать директиву VirtualHost
:
<VirtualHost ftp.xxxxxx.ru> ServerName "Genas FTP" MaxClients 10 <Limit READ> llowAll </Limit> <Anonymous /var/ftp/xxxxxx> RequireValidShell on User ftp Group ftp UserAlias anonymous ftp <Directory upload/*> <Limit READ> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> </Anonymous> </VirtualHost>Таких блоков может быть много и в каждом могут быть применены свои директивы. В заголовок вставляют доменное имя, которое должно быть прописано в DNS-сервере вашей сети и указывало бы на адрес вашего ftp-сервера. Если у сервера несколько IP адресов, то на каждый из них также можно повесить по виртуальному файловому серверу. В таком случае вместо доменного имени в директиве
VirtualHost
указывают IP адрес.
Вопросы безопасности
Как уже говорилось, proftpd довольно популярный сервер, а потому многие хакеры ищут и находят в нем все новые уязвимости. Почти все самые критичные уязвимости, найденные в нем, были основаны на переполнении буфера при передаче того или иного параметра. И если от таких ошибок в коде мы защититься не в силах, то от более многочисленных и соответственно более вероятных мелких ошибок можно защититься. Например, чтобы не быть подверженным DoS можно и нужно ограничить максимальное количество клиентов, и максимальное количество процессов, создаваемых супердемоном inetd при подключении новых пользователей:
MaxClients 30 MaxInstances 30Также, для предотвращения подбора пароля, необходимо ограничивать число неудачных попыток:
MaxLoginAttempts 3Если же злоумышленнику все-же удалось угадать или подсмотреть пароль, то директива:
DefaultRoot ~не даст ему возможности подняться выше домашнего каталога пользователя. Вместо ~ можно конечно указать любой другой путь. По-умолчанию, это / - корень.
RequireValidShell onЭта директива укажет демону на необходимость проверки используемого командного интерпретатора. Использоваться будет только "правильный", один из зарегистрированных в системе (
/etc/shells
).
Ссылки по теме
- http://www.proftpd.org/docs/directives/configuration_full.html
- http://www.troubles.ru/Doc/ProFTPD.htm
- http://linux.yaroslavl.ru/docs/serv/ProFTPD.html
Вот и все. Свои замечания и дополнения можете оставить на форуме моего сайта или написать в письме.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.linux.slackware |
Отписаться |
В избранное | ||