Настройка ProFTPd

Настройка ProFTPd

При создании конфигурационных файлов ProFTPd разработчики ориентировались на соответствующие средства сервера Apache, поэтому, если вам приходилось настраивать Apache, многие опции ProFTPd будут знакомы вам.

Конфигурационные файлы ProFTPd

Главный конфигурационный файл ProFTPd называется proftpd.conf; как правило, он располагается в каталоге /etc. В этом файле содержится большинство опций, используемых для настройки ProFTPd. Строки, содержащие комментарии, начинаются с символа #. Остальные записи представляются в следующем формате:

Директива [Значение]

Существуют директивы, для которых может быть задано несколько значений. Некоторые директивы формируют блок, включающий другие опции. Эти директивы помещаются в угловые скобки. Признаком окончания блока является директива, перед именем которой указан символ /. Пример блока, сформированного с помощью директивы Limit, приведен ниже.

<Limit WRITE>

 DenyAll

 Allow from 172.21.33.

</Limit>

Помимо главного конфигурационного файла, для настройки ProFTPd используется также файл ftpusers. Этот файл выполняет те же функции, что и одноименный файл сервера WU-FTPD. Пользователям, указанным в этом файле, запрещена регистрация на FTP-сервере. (Строго говоря, ProFTPd применяет для аутентификации модули РАМ, которые, в свою очередь, используют файл ftpusers.) По умолчанию при инсталляции ProFTPd создается файл ftpusers, в котором указываются такие имена пользователей, как nobody, daemon и root. Вы можете включить в данный файл учетные записи, созданные вами для специальных целей и не предполагающие регистрацию пользователей. Кроме того, в файле ftpusers можно задать имена обычных пользователей, которым по каким-либо причинам следует запретить доступ к FTP-серверу.

Опции общего назначения для сервера ProFTPd

В сервере ProFTPd предусмотрено большое количество директив, используемых для настройки этого сервера. Подробную информацию о них вы можете получить из документации на ProFTPd, представленной по адресу http://www.proftpd.org/docs/. Вероятнее всего, что, настраивая сервер, вы примете для большинства директив значения по умолчанию.

Поскольку значения многих директив применяются только в пределах контекстного блока, вам, прежде всего, надо составить представление о директивах, используемых для определения контекстных блоков. Эти директивы перечислены ниже.

• <Anonymous имя_каталога>. С помощью данной директивы вы можете создать анонимный FTP-сервер. В блоке, созданной посредством этой директивы, задаются другие директивы, используемые для обеспечения анонимного FTP-доступа. Анонимным пользователям разрешен доступ только к файлам, содержащимся в определенном каталоге, имя которого задается в качестве значения данной опции. Этот каталог ProFTPd указывает в качестве корневого каталога поддерева chroot (использование системной функции chroot() рассматривается в главе 23).

• <Directory имя_каталога>. С помощью данной директивы указывается каталог, к которому применяются другие директивы. Значением директивы является абсолютное имя каталога, начинающееся с символа /. Конфигурационный файл ProFTPd, создаваемый по умолчанию, обычно содержит блок, сформированный посредством директивы <Directory /*>. В этот блок помещаются директивы, с помощью которых задаются характеристики всех каталогов.

• <Global>. Директива <Global> формирует блок, содержимое которого применяется ко всему серверу и всем виртуальным узлам, формируемым посредством <VirtualHost>.

• <Limit группа_команд>. Данная опция задает набор команд FTP-клиента, действия которых ограничены директивами, содержащимися в составе блока. В группу команд входят одна или несколько команд из следующего набора: CWD, CDUP, MKD, RNFR, RNTO, DELE, RMD, RETR и STOR. В качестве значения данной директивы также могут быть указаны специальные идентификаторы, обозначающие категории команд. К ним относятся READ (все команды чтения), WRITE (все команды записи), DIRS (все команды для работы с каталогами) и ALL (все команды). Кроме того, для введения ограничений при регистрации вы можете использовать идентификатор LOGIN.

• <VirtualHost адрес>. ProFTPd позволяет поставить использование директив в зависимость от адреса клиента. В качестве значения данной директивы указывается IP-адрес или имя узла, и при обработке запроса с этого адреса применяются директивы, содержащиеся в блоке.

Большинство директив может присутствовать в одном или нескольких блоках. Кроме того, ряд директив указывается за пределами всех блоков; они рассматриваются как глобальные опции. Некоторые директивы могут встречаться как за пределами, так и в составе блока. Возможно также присутствие директивы в двух блоках, один из которого входит в состав другого. В этом случае директива с наибольшей степенью вложенности имеет наивысший приоритет. При настройке FTP-сервера чаще всего приходится изменять значения приведенных ниже директив.

• Allow [from] идентификаторы_узлов. Данная директива используется в составе блока <Limit> и указывает, какие клиенты имеют право доступа к ресурсу. В качестве идентификаторов узлов задается список IP-адресов, имен узлов, имен доменов (имя домена должно начинаться с точки) или блоков IP-адресов. Пункты списка отделяются друг от друга запятыми. Для идентификации узлов сети могут также использоваться ключевые слова all и none. После Allow может стоять ключевое слово from, но оно никак не изменяет действия, выполняемые данной директивой.

Совет

Вместо имен узлов и доменов рекомендуется использовать блоки IP-адресов. Это уменьшает зависимость FTP-сервера от работы DNS-сервера.

• AllowAll. По умолчанию ProFTPd разрешает доступ к каталогам, но существуют различные способы ограничить доступ. Поместив директиву AllowAll в состав блока <Directory>, <Limit> или <Anonymous>, вы можете восстановить соглашения, принятые по умолчанию.

• AllowGroup список_групп. Данная опция разрешает доступ для пользователей, которым в блоке <Limit> запрещено обращаться к ресурсу. В качестве значения этой опции указываются имена групп, разделенные запятыми. Чтобы получить доступ к ресурсу, пользователь должен принадлежать всем указанным группам. Если имени группы предшествует символ учитываются лишь пользователи, не принадлежащие данной группе. Эта опция чаще всего используется для того, чтобы отменить для некоторых пользователей ограничения, наложенные такими опциями, как DenyAll.

• AllowOverwrite [on|off]. Эта опция определяет, может ли пользователь заменять файлы на сервере. По умолчанию принимается значение которое запрещает замену файлов.

• AllowUser список_пользователей. Директива AllowUser предоставляет пользователю или группе пользователей доступ к ресурсу, закрытому для остальных. Если имени пользователя предшествует символ !, право доступа получают все пользователи, кроме указанного.

• DefaultRoot имя_каталога [список_групп]. С помощью данной опции вы можете ограничить сферу деятельности пользователей подкаталогами определенного каталога. Для этого надо указать в качестве значения имя соответствующего каталога. Имя каталога может начинаться с символа /, в этом случае предполагается абсолютное имя. Символ ~ определяет рабочий каталог пользователя. Если директива DefaultRoot должна иметь отношение лишь к некоторым из пользователей, надо указать их в списке групп. Список групп составляется по тем же правилам, что и для директивы AllowGroup.

Совет

Указав глобальную опцию DefaultRoot ~, вы запретите пользователям доступ к системным каталогам, а также к рабочим каталогам других пользователей. Настроенный подобным образом, сервер ProFTPd разрешает пользователям обращаться только к своим рабочим каталогам.

• DefaultTransferMode [ascii|binary]. FTP-сервер поддерживает два режима передачи файлов. В двоичном режиме (binary) содержимое файла передается без изменений, а в символьном режиме (ascii) выполняется преобразование некоторых символов. Символьный режим удобен для передачи текстовых файлов, но недопустим для работы с двоичными файлами, например, файлами, содержащими код программ. Директива DefaultTransferMode устанавливает режим передачи, используемый по умолчанию. При инсталляции сервера задается значение ascii данной директивы.

• Deny [from] идентификаторы_узлов. Данная директива выполняет действия, противоположные директиве Allow. Она используется в составе блока <Limit> и запрещает клиентам доступ к ресурсу.

• DenyAll. Данную директиву можно использовать в составе блоков <Limit>, <Anonymous> или <Directory>. Она запрещает всем пользователям доступ к ресурсу. При необходимости вы можете указать в том же блоке одну из директив, отменяющих для некоторых пользователей ограничения, наложенные посредством DenyAll.

• DenyGroup список_групп. Эта директива позволяет определять группы, которым запрещен доступ к ресурсу в блоке <Limit>. Список групп формируется так же, как и для директивы AllowGroup.

• DenyUser список_пользователей. Данная директива противоположна AllowUser. Она запрещает доступ к ресурсу в блоке <Limit>.

• DisplayConnect имя_файла. Если в конфигурационном файле указана данная опция, ProFTPd передает клиенту текст, содержащийся в указанном файле. Это происходит после установления соединения, но до завершения процедуры регистрации.

• DisplayFirstChdir имя_файла. Данная директива указывает ProFTPd на то, что содержимое заданного файла должно быть передано пользователю в тот момент, когда он впервые сделает каталог текущим. Чаще всего для данной директивы задается файл .message, в результате чего пользователю передается файл .message, содержащийся в том каталоге, к которому он обращается в первый раз.

• DisplayLogin имя_файла. Эта директива действует подобно директиве DisplayConnect, но сообщение передается пользователю после успешного завершения процедуры регистрации.

• Group идентификатор_группы. Сервер ProFTPd запускается от имени пользователя root, но сразу после запуска переходит на выполнение с ограниченными полномочиями. Это снижает незаконного проникновения в систему извне. С помощью данной директивы указывается группа, полномочия которой получает ProFTPd. При инсталляции сервера в качестве значения данной директивы обычно задается nogroup, ftp или другая подобная группа.

• MaxClients число | none. Данная директива позволяет ограничить количество клиентов, которые могут работать с сервером. Числовое значение (например, 30) определяет максимальное количество клиентов, значение none снимает данное ограничение.

• MaxInstances число. Эта директива действует подобно MaxClients, но если MaxClients задает максимальное количество успешно зарегистрировавшихся пользователей, то MaxInstances ограничивает число соединений, устанавливаемых сервером. Директива MaxInstances неэффективна при запуске ProFTPd посредством суперсервера, но подобные ограничения можно задать при настройке самого суперсервера.

• Order allow, deny|deny, allow. Если в блоке <Limit> присутствуют и запрещающие, и разрешающие директивы, ProFTPd сначала выполняет проверку на соответствие разрешающим, а лишь затем запрещающим директивам. В результате разрешающие директивы имеют более высокий приоритет, чем запрещающие. Кроме того, если отсутствует запрещающая директива, доступ по умолчанию разрешается. Поведение сервера можно изменить с помощью опции Order deny, allow. В этом случае запрещающие директивы получают более высокий приоритет, чем разрешающие, а доступ, не разрешенный явно, не предоставляется.

• RootLogin on|off. По умолчанию ProFTPd отказывает в регистрации пользователю root. Если в конфигурационном файле присутствует опция RootLogin on, root получает право работать на FTP-сервере. (Для этого вам, возможно, придется предпринять и другие действия, например, удалить пользователя root из файла /etc/ftpusers.)

• ServerIdent on|off ["строка-идентификатор"]. Данная директива определяет, должен ли ProFTPd при установлении соединения предоставлять клиенту сведения о себе. Задавая значение on данной директивы, вы можете также указать строку-идентификатор. По умолчанию сервер сообщает пользователю, что для реализации функций FTP-сервера используется продукт ProFTPd. Если вы не собираетесь объявлять тип программы, вам надо явно указать строку, которая должна передаваться клиенту.

• ServerName "строка-идентификатор". С помощью данной директивы вы можете задать имя сервера, которое будет включаться в состав строки, используемой ServerIdent. Директива ServerIdent позволяет переопределить все сообщение, но если вы хотите изменить лишь имя сервера, вы можете использовать для этого опцию ServerName.

• ServerType inetd|standalone. Если вы запускаете ProFTPd посредством суперсервера, вы должны задать значение inetd данной опции, если же для запуска используется сценарий SysV или локальный сценарий, надо установить значение standalone. С помощью данной опции ProFTPd получает сведения о том, запущен ли он от имени обычного пользователя и должен ли непосредственно обрабатывать запрос (inetd), или запуск осуществляется от имени пользователя root и для обработки запросов следует порождать новые процессы (standalone).

• SyslogLevel emerg|alert|crit|error|warn|notice|info|debug. Данная директива определяет, насколько подробные сведения должны записываться в файл протокола. Значения расположены по мере возрастания объема записываемой информации: emerg соответствует самым общим, a debug — наиболее подробным сведениям.

• TransferLog имя_файла|NONE. С помощью данной директивы вы можете указать файл протокола для помещения в него сведений о переданных файлах или запретить запись подобной информации (для этого надо задать значение NONE). Данная директива позволяет создавать различные файлы протоколов, предназначенные для разных целей. Она может независимо использоваться в блоках <Anonymous>, <VirtualHost> и <Global>, а также указываться за пределами всех блоков.

• Umask маска_файла [маска_каталога]. Данная директива позволяет задать маску umask, которая будет использоваться при создании новых файлов (и, возможно, новых каталогов). По умолчанию принимается значение 022, приемлемое для многих систем.

• UseFtpUsers on|off. Задавая значение off директивы UseFtpUsers, вы можете запретить использование файла /etc/ftpusers. По умолчанию для данной директивы устанавливается значение on.

• UserAlias псевдоним имя_пользователя. В обычных условиях ProFTPd использует для аутентификации пользовательское имя, указанное при регистрации. Посредством данной директивы вы можете задать псевдоним, который будет отображаться в имя конкретного пользователя. Например, если в конфигурационном файле указана опция UserAlias rjones ronald, то при указании имени rjones аутентификация будет производиться с помощью учетной записи ronald. (Такая конфигурация часто используется в анонимных FTP-серверах, где для аутентификации всех пользователей применяется учетная запись ftp).

Директивы, приведенные выше, а также другие директивы, не рассмотренные в данной главе, позволяют настроить ProFTP для выполнения самых разнообразных задач. Стандартная конфигурация позволят пользователям регистрироваться на сервере и работать с файлами, расположенными в их рабочих каталогах. В конфигурационном файле можно создать специальный блок <Anonymous> для поддержки анонимных обращений. Для того чтобы обеспечить доступ всех пользователей к серверу, надо внести в его конфигурацию дополнительные изменения. Кроме того, файлы, предназначенные для всеобщего доступа, необходимо разместить в специально предназначенных для этого каталогах.