Linux. Полное руководство.
15.2. Сервер ProFTP.
15.2.1. Установка и запуск ProFTPD.
Альтернативой, и, на мой взгляд, достаточно хорошей, серверу wu-ftpd является сервер ProFTPD. Он намного проще в конфигурировании, чем сервер wu-ftpd, и обладает достаточно гибкими возможностями. Для его установки достаточно установить пакет proftpd. Подобно серверу wu-ftpd, ProFTPD может запускаться автоматически при запуске системы или вызываться суперсервером при наличии запроса на установку соединения. Сервер ProFTPD может вызываться с ключами, указанными в табл. 15.4.
Параметры сервера ProFTPD Таблица 15.4.
| Ключ | Назначение |
|---|---|
| -h | Справочная информация |
| -n | Запускает сервер в автономном режиме. Для этого в файле конфигурации нужно указать режим запуска standalone |
| -d уровень_отладки | Устанавливает уровень отладки сервера (1-5) |
| -с файл_конфигурации | Задает использование альтернативного файла конфигурации вместо стандартного /etc/proftpd.conf |
| -p 0 | 1 | Запрещает (0) или разрешает (1) использование постоянного пароля. Для получения более подробной информации смотрите документацию по серверу |
| -l | Выводит список всех модулей, откомпилированных для использования сервером ProFTPD |
| -v | Выводит версию |
15.2.2. Настройка ProFTPD. Файл /etc/proftpd.conf.
Сервер ProFTPD использует всего один файл конфигурации — /etc/proftpd.conf.
В листинге 15.7 представлен простейший файл конфигурации сервера ProFTPD.
Листинг 15.7. Пример файла конфигурации /etc/proftpd.conf.
# Этот файл устанавливает один сервер и одну учетную запись.
ServerName "My ProFTPD server".
ServerType standalone.
DefaultServer on.
# Используем стандартный порт.
Port 21.
Umask 022.
MaxIstances 30.
# Пользователь и группа, обслуживающие сервер.
User nobody.
Group nobody.
# Параметры корневого каталога. Блочная директива Directory.
<Directory /*>
# Директива, определяющая параметр AllowOverwrite.
AllowOverwrite on.
</Directory>
Директивы конфигурации делятся на две группы: директивы, определяющие параметры, и блочные директивы. Блочные директивы конфигурирования похожи на тэги языка HTML: конечная директива имеет то же имя, что и начальная, но с наклонной чертой в начале. Например, начальная директива <Directory /*>, а конечная — </Directory > (листинг 15.7).
Действия каждой пары директив распространяются только на блок, расположенный между ними. Директива <Directory> определяет свойства какого-нибудь каталога. В вышеприведенном листинге определяются свойства корневого каталога.
В таблице 15.5 представлены все директивы файла конфигурации сервера ProFTPD.
Директивы файла конфигурации сервера ProFTPD Таблица 15.5.
| Директива | Описание |
|---|---|
| AccessGrantMsg сообщение | Ответное сообщение, которое будет отправлено пользователю в случав его регистрации или получения анонимного доступа. Символы %u будут заменены на имя пользователя которое он ввел при регистрации |
| Allow from all | host | network [,host | network[, …]] | Используется внутри блока Limit. Ограничивает доступ к серверу (а именно, разрешает доступ). По умолчанию allow from all |
| AllowAll | Разрешает доступ к блокам Directory, Anonymous, Limit |
| AllowForeignAddress on | off | Разрешает клиенту указывать при установке соединения адрес, который не соответствует ему. По умолчанию off. Может использоваться в блоках VirtualHost, Anonymous, <Global> |
| AllowGroup список_групп | Разрешает доступ определенным группам. Используется в блоке Limit |
| AltowUser список_пользователей | Разрешает доступ определенным пользователям. Используется в блоке Limit |
| AnonRequirePassword on | off | Требует пароль при анонимной регистрации. Пароль должен совпадать с паролем того пользователя, который запустил демон. По умолчанию данная опция выключена |
| <Anonymous directory> | Создает анонимную учетную запись, directory — корневой каталог анонимного сервера |
| AuthGroupFile путь | Позволяет указать путь к альтернативному файлу group. По умолчанию используется файл /etc/group |
| AuthUserFile путь | Указывает альтернативный файл passwd |
| Bind ip-адрес | Разрешает привязку дополнительного IP-адреса к основному или виртуальному хосту |
| DefaultRoot каталог | Задает корневой каталог по умолчанию |
| Deny from all | host | network | Запрещает доступ к серверу. Используется в блоке Limit |
| DenyAll | Запрещает анонимным пользователям доступ к объектам, указанным в блоке Limit |
| DenyUser список_пользователей | Запрещает доступ определенным пользователям |
| <Directory> путь | Используется в VirtualHost, Anonymous для того, чтобы определить особенные параметры доступа к каталогу и его подкаталогам |
| DisplayFirstChdir файл_сообщения | Указанный текстовый файл будет выводиться, когда пользователь впервые за время сеанса войдет в данный каталог. Используется в VirtualHost, Directory, Anonymous |
| DisplayLogin файл_сообщения | Этот файл будет отображен, когда пользователь зарегистрируется |
| <Global> | Используется для задания параметров, которые будут использоваться как основным, так и всеми виртуальными серверами |
| <Limit command> | Ограничение на выполнение данной FTP-команды, например, LOGIN, WRITE, READ, STOR |
| MaxClients number | none сообщение | Ограничение на количество клиентов. Приведенное сообщение будет отображено, если пользователю будет отказано в доступе. Блоки 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 секунды | Время в секундах, в течение которого пользователь имеет право не проявить активности. По умолчанию 60 (1 минута) |
| Umask маска | Определяет права доступа для созданного файла. Маска — число в восьмеричной системе, определяющее набор прав доступа (см. главу 2) |
| User имя пользователя | Имя пользователя, присвоенное демону ProFTP |
| UserAlias псевдоним пользователь | Создает указанный псевдоним для указанного пользователя |
| <Virtual Host address> | Создает виртуальный сервер |
15.2.3. Разграничение доступа к серверу ProFTP.
Я считаю необходимым подробно рассмотреть блочную директиву Limit. Эта директива определяет вид и параметры доступа к тому или иному каталогу. Рассмотрим листинг 15.8.
Листинг 15.8. Пример использования директивы Limit.
<Directory incoming>
<Limit WRITE>
AllowAll.
</Limit>
<Limit READ>
DenyAll.
</Limit>
</Directory>
Директива Directory определяет свойства каталога incoming, а директива Limit задает вид доступа к этому каталогу. Команда WRITE директивы Limit вместе с директивой AllowAll разрешает всем пользователям записывать информацию в этот каталог. Команда READ директивы Limit задает ограничение на чтение этого каталога. В рассматриваемом случае чтение запрещено для всех пользователей.
Кроме команд WRITE и READ, в директиве Limit можно задавать команды STOR и LOGIN (таблица 15.6).
Команды директивы Limit, ограничивающие права доступа Таблица 15.6.
| Команда | Назначение |
|---|---|
| LOGIN | Ограничивает регистрацию |
| WRITE | Ограничивает запись |
| HEAD | Ограничивает чтение |
| STOR | Ограничивает прием файлов |
В блоке Limit можно задавать директивы Allow, AllowAll, AllowGroup, AllowUser, Deny, DenyAll, DenyUser. Например, в листинге 15.9 запрещается доступ всем пользователям, кроме den. Пользователь den может регистрироваться со всех компьютеров, кроме компьютера с IP-адресом 111.111.111.111. Также запрещена регистрация из сети 192.168.2.0.
Листинг 15.9. Пример блока Limit.
<Limit LOGIN>
DenyAll.
AllowUser den.
Deny from 111.111.111.111.
Deny from 192.168.2.
</Limit>
Для конфигурирования отдельного каталога может также использоваться файл .ftpaccess, который расположен в этом каталоге. В нем содержатся такие же директивы, что и в файле proftpd.conf, но файл .ftpaccess имеет приоритет перед файлом proftpd.conf.
Организация анонимного FTP-сервера.
Анонимный FTP-сервер можно построить с помощью wu-ftpd, установив пакет anonftp. Этот пакет нельзя использовать вместе с сервером ProFTPD. Пакет anonftp поставляется в составе большинства дистрибутивов.
Сейчас рассмотрим, как организовать анонимный FTP-сервер с помощью сервера ProFTPD. Для организации анонимного доступа сервер ProFTPD имеет директиву Anonymous. При этом в блок Anonymous нужно поместить директивы, конфигурирующие анонимную службу. В самой же директиве Anonymous необходимо указать каталог, который будет использоваться в качестве корневого для анонимной службы. Сервер ProFTPD выполнит для этого каталога команду chroot, превращая этот каталог в корневой для удаленного пользователя. Перед тем, как сделать это, сервер ProFTPD прочитает все необходимые ему файлы конфигурации из реального каталога /etc.
При анонимной регистрации по умолчанию в качестве имени пользователя указывается anonymous, а вместо пароля — адрес электронной почты пользователя. Вы же можете изменить параметры анонимного доступа, добавив проверку пароля для анонимного пользователя с помощью директивы AnonRequirePassword. В следующем примере представлен типичный блок Anonymous, подходящий для большинства анонимных серверов (см. листинг 15.10).
Листинг 15.10. Типичный блок Anonymous.
<Anonymous /var/ftp>
User ftp.
Group ftp.
UserAlias anonymous ftp.
RequireValidShell off.
<Directory *>
<Limit WRITE>
DenyAll.
</Limit>
<Limit STOR>
AllowAll.
</Limit>
</Directory>
</Anonymous>
Директивы User и Group задают имя пользователя для анонимного доступа. В обоих случаях применяется имя ftp. Для имени ftp определяется псевдоним anonymous. Вместо пароля нужно указать адрес электронной почты.
Директива RequireValidShell отключает проверку командного интерпретатора пользователя. По умолчанию сервер ProFTPD ищет список допустимых интерпретаторов в файле /etc/shells. Если используемый пользователем интерпретатор не указан в файле /etc/shells, то соединение будет разорвано. Директива RequireValidShell off отключает такую проверку.
Директива <Directory *> определяет свойства для всех каталогов. При этом всем пользователям запрещено записывать файлы на сервер, но разрешено скачивать файлы сервера на свой локальный компьютер.
Желательно также добавить в блок Anonymous директиву MaxClients, которая указывает максимальное число клиентов. Нужно учитывать нагрузку на сервер и пропускной канал для определения максимального числа анонимных клиентов. Настоящих пользователей сервера FTP по возможности не следует ограничивать, в отличие от анонимных. При медленном канале связи, например, 33 Кбит/сек, установите максимальное количество анонимных клиентов небольшим, например, 5 или даже 3. Конечно, число клиентов также зависит от объема информации, расположенной на сервере. Если размеры файлов невелики (например, это текстовые файлы), то число клиентов можно установить несколько большим (10–15).
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.
- 161.
- 162.
- 163.
- 164.
- 165.
- 166.
- 167.
- 168.
- 169.
- 170.
- 171.
- 172.
- 173.
- 174.
- 175.
- 176.
- 177.
- 178.
- 179.
- 180.
- 181.
- 182.
- 183.
- 184.
- 185.
- 186.
- 187.
- 188.
- 189.
- 190.
- 191.
- 192.
- 193.
- 194.
- 195.
- 196.
- 197.
- 198.
- 199.
- 200.
- 201.
- 202.
- 203.
- 204.
- 205.
- 206.
- 207.
- 208.
- 209.
- 210.
- 211.
- 212.
- 213.
- 214.
- 215.
- 216.
- 217.
- 218.
- 219.
- 220.
- 221.
- 222.
- 223.
- 224.
- 225.
- 226.
- 227.
- 228.
- 229.
- 230.
- 231.
- 232.
- 233.
- 234.
- 235.
- 236.
- 237.
- 238.
- 239.
- 240.
- 241.
- 242.
- 243.
- 244.
- 245.
- 246.
- 247.
- 248.
- 249.
- 250.
- 251.
- 252.
- 253.
- 254.
- 255.
- 256.
- 257.
- 258.
- 259.
- 260.
- 261.
- 262.
- 263.
- 264.
- 265.
- 266.
- 267.
- 268.
- 269.
- 270.
- 271.
- 272.
- 273.
- 274.
- 275.
- 276.
- 277.
- 278.
- 279.
- 280.
- 281.
- 282.
- 283.
- 284.
- 285.
- 286.
- 287.
- 288.
- 289.
- 290.
- 291.
- 292.
- 293.
- 294.
- 295.
- 296.
- 297.
- 298.
- 299.
- 300.
- 301.
- 302.
- 303.
- 304.
- 305.
- 306.
- 307.
- 308.
- 309.
- 310.
- 311.
- 312.
- 313.
- 314.
- 315.
- 316.
- 317.
- 318.
- 319.
- 320.
- 321.
- 322.
- 323.
- 324.
- 325.
- 326.
- 327.
- 328.
- 329.
- 330.
- 331.
- 332.
- 333.
- 334.
- 335.
- 336.
- 337.
- 338.
- 339.
- 340.
- 341.
- 342.
- 343.
- 344.
- 345.
- 346.
- 347.
- 348.
- 349.
- 350.
- 351.
- 352.
- 353.
- 354.
- 355.
- 356.
- 357.
- 358.
- 359.
- 360.
- 361.
- 362.
- 363.
- 364.
- 365.
- 366.
- 367.
- 368.
- 369.
- 370.
- 371.
- 372.
- 373.
- 374.
- 375.
- 376.
- 377.
- 378.
- 379.
- 380.
- 381.
- 382.
- 383.
- 384.
- 385.
- 386.
- 387.
- 388.
- 389.
- 390.
- 391.
- 392.
- 393.
- 394.
- 395.
- 396.
- 397.
- 398.
- 399.
- 400.
- 401.
- 402.
- 403.
- 404.
- 405.
- 406.
- 407.
- 408.
- 409.
- 410.
- 411.
- 412.
- 413.
- 414.
- 415.
- 416.
- 417.
- 418.
- 419.
- 420.
- 421.
- 422.
- 423.
- 424.
- 425.
- 426.
- 427.
- 428.
- 429.
- 430.
- 431.
- 432.
- 433.
- 434.
- 435.
- 436.
- 437.
- 438.
- 439.
- 440.
- 441.
- 442.
- 443.
- 444.
- 445.
- 446.
- 447.
- 448.
- 449.
- 450.
- 451.
- 452.
- 453.
- 454.
- 455.
- 456.
- 457.
- 458.
- 459.
- 460.
- 461.
- 462.
- 463.
- 464.
- 465.
- 466.
- 467.
- 468.
- 469.
- 470.
- 471.