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
В
Ox они установлены как 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).
-T maxtimeout
Клиент также может требовать разные периоды таймаута; опцией
-T
можно установить максимально разрешенный период длительностью
maxtimeout
секунд. По умолчанию ограничение - 2 часа.
-t timeout
Длительность таймаута неактивности установить в
timeout
секунд (по умолчанию - 15 минут).
-u mask
Установить umask равную
mask
вместо 027 по умолчанию. Кроме этого, запрещается chmod.
Для запрета ftp-доступа можно использовать файл
/etc/nologin
Если файл существует,
выводит его и выходит. Если существует файл
/etc/ftpwelcome
то
печатает его перед выводом сообщения
``ready''
Если существует файл
/etc/motd
то
печатает его после успешной регистрации. Если в каталоге
существует файл
.message
то
выводит его при входе в каталог.
В настоящее время ftp-сервер поддерживает следующие ftp-запросы.
Регистр запросов игнорируется.
Запрос Ta Описание
ABOR Ta прервать предыдущую команду
ACCT Ta задать бюджет пользователя (игнорируется)
ALLO Ta разместить хранилище - allocate storage (бессмысленно)
APPE Ta добавить в файл
CDUP Ta перейти в каталог верхнего уровня
CWD Ta сменить рабочий каталог
DELE Ta удалить файл
HELP Ta вывод справочной информации
LIST Ta получить список файлов в каталоге (``ls -lgA
''
)
MKD Ta создать каталог
MDTM Ta показать время последней модификации файла
MODE Ta определить тип пересылки данных mode
NLST Ta получить список имен файлов в каталоге
NOOP Ta ничего не делать
PASS Ta указать пароль
PASV Ta приготовиться к пересылке сервер-серверу
PORT Ta задать порт подключения данных
PWD Ta сообщить текущий рабочий каталог
QUIT Ta прервать сессию
REST Ta продолжить незавершенную пересылку
RETR Ta принять файл
RMD Ta удалить каталог
RNFR Ta указать имя файла rename-from
RNTO Ta указать имя файла rename-to
SITE Ta нестандартные команды (см. следующий раздел)
SIZE Ta вернуть размер файла
STAT Ta вернуть статус сервера
STOR Ta сохранить файл
STOU Ta сохранить файл с уникальным именем
STRU Ta определить тип пересылки данных structure
SYST Ta сообщить тип операционной системы сервера
TYPE Ta определить тип пересылаемых данных type
USER Ta указать имя пользователя
XCUP Ta перейти в каталог верхнего уровня (deprecated)
XCWD Ta сменить рабочий каталог (deprecated)
XMKD Ta создать каталог (deprecated)
XPWD Ta сообщить текущий рабочий каталог (deprecated)
XRMD Ta удалить каталог (deprecated)
Следующие нестандартные или
UNIX-вые
команды поддерживаются запросом SITE.
Запрос Ta Описание
UMASK Ta сменить, напр., ``SITE UMASK 002''
IDLE Ta установить idle-timer, напр., ``SITE IDLE 60''
CHMOD Ta сменить mode файла, напр., ``SITE CHMOD 755 filename''
HELP Ta получить справочную информацию.
Остальные 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_mkdb8)
и
group(5)
должны присутствовать, чтобы команда
ls
могла выводить имена владельцем, а не номера.
Поле пароля в
pwd.db
не используется и не должно содержать реальных паролей.
При наличии файла
motd
он будет распечатываться после успешной регистрации.
Эти файлы должны иметь mode 444.
~ftp/pub
Установите для этого каталога mode 555 и владельца
``root''
Это традиционное место, где хранятся файлы, публично доступные для
копирования.
Если регистрация в файл
/var/log/ftpd
разрешена, информация будет записана в следующем виде:
Полный путь (относительно 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
Файл журнала регистрации событий для анонимных пользователей.
Для создания подключений с привилегированными номерами портов сервер
должен выполняться от имени суперпользователя. Он устанавливает
действующий ID зарегистрированного пользователя, возвращаясь в
режим суперпользователя только для привязки адресов к доменным подключениям.
Возможные прорехи в безопасности были очень тщательно изучены, но,
возможно, не полностью.
ИСТОРИЯ
Команда
появилась в
BSD 4.2
ПРАВА
Copyright (c) 1985, 1988, 1991, 1993
The Regents of the University of California. All rights reserved.
Fl P