ftpd-BSD(8)
| FTPD(8) | System Manager's Manual | FTPD(8) |
НАЗВАНИЕ
ftpd —
Сервер Internet
File Transfer Protocol
СИНТАКСИС
ftpd [-AdDhlMPSU]
[-T maxtimeout]
[-t timeout]
[-u mask]
ОПИСАНИЕ
Ftpd - это
серверный
процесс Internet File
Transfer Protocol'а. Сервер
использует
протокол TCP
и слушает
порт,
определённый
спецификацией
сервиса “ftp”
; смотри
services(5).
Доступные опции:
-A- Разрешает только анонимные ftp соединения или бюджеты, перечисленные в /etc/ftpchroot. Другие попытки соединения будут отвергнуты.
-d- Информация отладки записывается в syslog с помощью LOG_FTP.
-D- Если
указан
этот
параметр,
то
ftpdотделится от командной оболочки и станет демоном, принимая соединения на порту FTP и создавая наследующие процессы (child processes) для управления этими соединениями. Такой запуск создает меньшую нагрузку, чем запускftpdиз inetd(8) и, следовательно, полезен на загруженных серверах для уменьшения нагрузки. -h- Для
пассивных
соединений
сервер
будет
использовать
порты
данных в
верхнем
диапазоне
портов.
Этот
диапазон
определяется
в <netinet/in.h>
переменными
IPPORT_HIFIRSTAUTOиIPPORT_HILASTAUTO. В OpenBSD они установлены как 49152 и 65535 соответственно. -l- Каждая успешная и прерванная ftp(1) сессия регистрируется с помощью syslog посредством LOG_FTP. Если этот параметр указан дважды, то также будут регистрироваться операции копирования, записи, добавления, удаления, создания каталога, удаления каталога и переименования вместе со своими аргументами - именами файлов.
-M- Разрешен режим multihomed (много домашних каталогов). Вместо простого использования ~ftp для анонимных передач, используется каталог, соответствующий полностью заданному имени IP-адреса, к которому подключился клиент, и расположенный внутри ~ftp.
-p- Запретить ftp-соединения в пассивном режиме. Полезно, если вы находитесь за межсетевым экраном, который отвергает соединения на порты с произвольно высокими номерами. Многие ftp-клиенты пытаются соединиться с сервером сначала в пассивном режиме и не всегда корректно, что заставляет сервер отвергать соединения на порт к которому он просил клиента подключиться.
-P- Разрешает недопустимые номера портов или адреса для команды PORT, инициализирующей соединения. По умолчанию ftpd(8) нарушает RFC и, таким образом, выдает команду PORT на незарезервированные порты и требует, чтобы он использовал тот же адрес источника, с которого поступило соединение. Это предотвращает "FTP bounce attack" против сервисов на обеих машинах.
-S- При
использовании
данного
параметра
ftpdрегистрирует все анонимные скачивания в файле /var/log/ftpd, если этот файл существует. -U- Каждая конкурирующая ftp(1) сессия регистрируется в файле /var/run/utmp, позволяя увидеть их такой команде как who(1).
-Tmaxtimeout- Клиент
также
может
требовать
разные
периоды
таймаута;
опцией
-Tможно установить максимально разрешенный период длительностью maxtimeout секунд. По умолчанию ограничение - 2 часа. -ttimeout- Длительность таймаута неактивности установить в timeout секунд (по умолчанию - 15 минут).
-umask- Установить umask равную mask вместо 027 по умолчанию. Кроме этого, запрещается chmod.
Для
запрета
ftp-доступа
можно
использовать
файл /etc/nologin.
Если файл
существует,
ftpd
выводит
его и
выходит.
Если
существует
файл /etc/ftpwelcome,
то ftpd
печатает
его перед
выводом
сообщения
“ready”. Если
существует
файл /etc/motd,
то ftpd
печатает
его после
успешной
регистрации.
Если в
каталоге
существует
файл .message,
то ftpd
выводит
его при
входе в
каталог.
В настоящее время ftp-сервер поддерживает следующие ftp-запросы. Регистр запросов игнорируется.
| Запрос | Описание |
| ABOR | прервать предыдущую команду |
| ACCT | задать бюджет пользователя (игнорируется) |
| ALLO | разместить хранилище - allocate storage (бессмысленно) |
| APPE | добавить в файл |
| CDUP | перейти в каталог верхнего уровня |
| CWD | сменить рабочий каталог |
| DELE | удалить файл |
| HELP | вывод справочной информации |
| LIST | получить
список
файлов в
каталоге
(“ls -lgA”) |
| MKD | создать каталог |
| MDTM | показать время последней модификации файла |
| MODE | определить тип пересылки данных mode |
| NLST | получить список имен файлов в каталоге |
| NOOP | ничего не делать |
| PASS | указать пароль |
| PASV | приготовиться к пересылке сервер-серверу |
| PORT | задать порт подключения данных |
| PWD | сообщить текущий рабочий каталог |
| QUIT | прервать сессию |
| REST | продолжить незавершенную пересылку |
| RETR | принять файл |
| RMD | удалить каталог |
| RNFR | указать имя файла rename-from |
| RNTO | указать имя файла rename-to |
| SITE | нестандартные команды (см. следующий раздел) |
| SIZE | вернуть размер файла |
| STAT | вернуть статус сервера |
| STOR | сохранить файл |
| STOU | сохранить файл с уникальным именем |
| STRU | определить тип пересылки данных structure |
| SYST | сообщить тип операционной системы сервера |
| TYPE | определить тип пересылаемых данных type |
| USER | указать имя пользователя |
| XCUP | перейти в каталог верхнего уровня (deprecated) |
| XCWD | сменить рабочий каталог (deprecated) |
| XMKD | создать каталог (deprecated) |
| XPWD | сообщить текущий рабочий каталог (deprecated) |
| XRMD | удалить каталог (deprecated) |
Следующие нестандартные или UNIX-вые команды поддерживаются запросом SITE.
| Запрос | Описание |
| UMASK | сменить, напр., ``SITE UMASK 002'' |
| IDLE | установить idle-timer, напр., ``SITE IDLE 60'' |
| CHMOD | сменить mode файла, напр., ``SITE CHMOD 755 filename'' |
| HELP | получить справочную информацию. |
Остальные ftp-запросы, определенные в Internet RFC 959, распознаются, но не реализованы. MDTM и SIZE в RFC 959 не определены, но появятся в следующих обновлениях FTP RFC.
Ftp-сервер прервет активную передачу файла только если перед командой ABOR в командном потоке Telnet будет переданы сигналы Telnet "Interrupt Process" (IP) и Telnet "Synch", как описано в Internet RFC 959. Если во время передачи данных после Telnet IP и Synch получена команда STAT, будет возвращен статус передачи.
Ftpd
интерпретирует
имена
файлов в
соответствии
с
соглашениями
“globbing”,
используемыми
csh(1). Это
позволяет
пользователям
использовать
метасимволы
“*?[]{}~”.
Ftpd
аутентифицирует
пользователей
в
соответствии
с пятью
правилами.
- Регистрационное имя должно быть в базе данных паролей, /etc/pwd.db, и не должно иметь нулевой пароль. В этом случае пароль должен быть указан клиентом до того, как могут быть выполненые любые файловые операции. Если у пользователя имеется ключ S/Key, то ответ успешной команды USER будет содержать вызов S/Key. Клиент может в команде PASS ответить либо стандартным паролем, либо одноразовым паролем S/Key. Сервер автоматически определит тип полученного пароля и выполнит соответствующую аутентификацию. Подробнее по S/Key аутентификации смотрите в skey(1) S/Key является торговой маркой Bellcore.
- Регистрационное имя не должно быть указано в файле /etc/ftpusers.
- Пользователь должен иметь стандартный shell, возвращаемый getusershell(3).
- Если имя пользователя указано в файле /etc/ftpchroot, то корень сессии будет переключен в каталог пользователя с помощью chroot(2), как для бюджета пользователя “anonymous” или “ftp” (см. следующую тему). Однако пользователь все-равно должен ввести пароль. Эта особенность предназначена как компромис между полностью анонимным и полностью привилегированным бюджетами. Бюджет пользователя должен быть настроен также, как для анонимного пользователя.
- Если имя пользователя - “anonymous” или “ftp”, то в файле паролей должен присутствовать бюджет анонимного ftp (пользователь “ftp”). В этом случае регистрация пользователя разрешена при указании любого пароля (по традиции в качестве пароля должен указываться email-адрес пользователя).
В
последнем
случае
ftpd
предпринимает
специальные
действия
для
ограничения
доступа
клиенту.
Сервер
выполняет
chroot(2) в
домашний
каталог
пользователя
“ftp”. Для
того, чтобы
система не
была
взломана,
рекомендуется
тщательно
разрабатывать
поддерево
“ftp”, следуя
таким
правилам:
- ~ftp
- Установите владельцем домашнего каталога “root” и сделайте недоступным на запись для всех (mode 555).
- ~ftp/bin
- Установите владельцем этого каталога “root” и сделайте недоступным на запись для всех (mode 511). Этот каталог не обязательный, если у вас нет команд, которые мог бы выполнить анонимный ftp пользователь (команда ls(1) является встроенной). Все программы в этом каталоге должны иметь mode 111 (только выполнение).
- ~ftp/etc
- Установите владельцем этого каталога “root” и сделайте недоступным на запись для всех (mode 511). Файлы pwd.db (смотрите pwd_mkdb(8)) и group(5) должны присутствовать, чтобы команда ls могла выводить имена владельцем, а не номера. Поле пароля в pwd.db не используется и не должно содержать реальных паролей. При наличии файла motd, он будет распечатываться после успешной регистрации. Эти файлы должны иметь mode 444.
- ~ftp/pub
- Установите для этого каталога mode 555 и владельца “root”. Это традиционное место, где хранятся файлы, публично доступные для копирования.
Если регистрация в файл /var/log/ftpd разрешена, информация будет записана в следующем виде:
- time
- Время и дата получения файлов в формате ctime(3).
- elapsed time
- Время копирования, в секундах.
- remote host
- Удаленная машина (или IP-адрес).
- bytes
- Количество переданных байт.
- path
- Полный путь (относительно ftp chroot каталога) переданного файла.
- type
- Тип передачи - либо “a” для ASCII, либо “b” для binary.
- unused
- Неиспользуемое поле, содержащее для совместимости “*”.
- unused
- Неиспользуемое поле, содержащее для совместимости “o”.
- user type
- Тип пользователя - либо “a” для anonymous, либо “r” для реального пользователя (всегда должен быть анонимным).
- name
- Либо регистрационное имя системы, либо значение “email address”, если пользователь анонимный.
- unused
- Неиспользуемое поле, содержащее для совместимости “0”,
- real name
- Регистрационное имя в системе, если соединение не анонимное или “*”, если анонимное.
- virtual host
- Виртуальная машина, с которой было выполнено соединение.
Хотя
имеются
поля для
регистрационной
информации
реальных
пользователей,
этот файл
используется
только для
анонимных
сеансов
передачи.
Неиспользуемые
поля
существуют
только для
совместимости
с другими
ftpd
реализациями.
ФАЙЛЫ
- /etc/ftpusers
- Список нежелательных/запрещенных пользователей.
- /etc/ftpchroot
- Список обычных пользователей, для которых нужно выполнить chroot.
- /etc/ftpwelcome
- Приветствие.
- /etc/motd
- Приветствие после регистрации.
- /etc/nologin
- Наличие этого файла влечёт за собою отказ в доступе с одновременной распечаткой его содержимого.
- /var/run/utmp
- Список пользователей в системе.
- /var/run/ftpd.pid
- Id процесса, если запущен в режиме демона.
- /var/log/ftpd
- Файл журнала регистрации событий для анонимных пользователей.
СМОТРИТЕ ТАКЖЕ
ftp(1), skey(1), who(1), getusershell(3), syslogd(8)
ОШИБКИ
Для создания подключений с привилегированными номерами портов сервер должен выполняться от имени суперпользователя. Он устанавливает действующий ID зарегистрированного пользователя, возвращаясь в режим суперпользователя только для привязки адресов к доменным подключениям. Возможные прорехи в безопасности были очень тщательно изучены, но, возможно, не полностью.
ИСТОРИЯ
Команда
ftpd
появилась
в 4.2BSD.
ПРАВА
Copyright (c) 1985, 1988, 1991, 1993
The Regents of the University of California. All rights reserved.
Перевод - Александр Саввин, savvin@mail.ru, (c) 2001
| June 18, 1996 | Linux 6.12.85-6.12-alt1 |
