TFTP


Наборы кистей и аксессуары для макияжа купить mincosmetic.com.

Завершая обсуждение малых сетевых служб, рассмотрим, пожалуй, самый маленький сетевой сервис из тех, что используются по сей день, — тривиальный протокол передачи файлов (Trivial File Transfer Protocol, TFTP). TFTP позволяет передавать файлы с одной машины на другую без аутентификации. Несмотря на меньшую гибкость по сравнению с такими протоколами копирования файлов, как SCP или FTP, производители встраиваемых устройств (например, Cisco) по-прежнему применяют TFTP для загрузки конфигурации системы и обновлений. Мы рассмотрим здесь TFTP по той простой причине, что бездисковые клиенты используют TFTP для загрузки ядра операционной системы и получения начальной информации о конфигурации. Демон tftpd(8) запускается из inetd(8) и прослушивает порт TCP с номером 69.

Настройка tftpd(8) производится в четыре этапа: выбор корневого каталога сервера, создание файлов для сервера, выбор владельца файлов и запуск серверного процесса.

TFTP и безопасность

TFTP не подходит для использования в Интернете, потому что любой желающий сможет читать и записывать файлы на сервер TFTP! Используйте TFTP исключительно за брандмауэром или хотя бы защищайте его с помощью TCP Wrappers (глава 9).

Корневой каталог

По умолчанию tftpd(8) использует каталог /tftproot. Этот каталог пригоден только для нескольких редко изменяемых файлов, потому что корневой раздел обычно и служит для хранения файлов, которые почти не изменяются. Кроме того, едва ли кому понравится, если система рухнет только потому, что в результате выгрузки файлов на сервер корневой раздел окажется переполнен! Обычно я помещаю корневой каталог tftpd(8) в /var/tftproot и создаю символическую ссылку /tftproot на него:

# mkdir /var/tftroot
# ln -s /var/tftproot /tftroot

Теперь можно создать файлы для доступа через TFTP.

tftpd и файлы

Пользователи могут читать и записывать файлы через TFTP. Если пользователям требуется возможность читать файл через tftpd(8), он должен быть доступен всем для чтения:

# chmod +r /var/tftproot/имя_файла

Также tftpd(8) позволяет записывать файл, только если он уже существует и доступен всем для записи. Не забывайте, что программы и обычные файлы имеют различные права доступа. Для файла программы, помимо прав на чтение и на запись, должно быть установлено право на исполнение, поэтому права доступа для программ и обычных файлов вы должны устанавливать по-разному. Заранее создать файл для последующей выгрузки на сервер через TFTP можно с помощью утилиты touch(1).

# chmod 666 /var/tftproot/имя_файла
# chmod 777 /var/tftproot/имя_программы

Разумеется, это означает, что любой, кто знает имя файла, может перезаписать его. Наиболее важные файлы должны быть доступны только для чтения.* Это также означает, что вам не придется беспокоиться по поводу того, что кто-то сможет выгрузить слишком большой файл, способный переполнить ваш жесткий диск.

Принадлежность файла

Файлы на сервере TFTP должны принадлежать пользователю с минимальными возможными привилегиями. Если вы редко используете сервер TFTP, можно воспользоваться учетной записью nobody. Например, если сервер TFTP нужен только для нечастых обновлений встроенного устройства, то можно назначить владельцем файлов пользователя nobody и останавливать tftpd(8), когда в нем нет необходимости. Но если сервер TFTP работает постоянно, лучше создать отдельную непривилегированную учетную запись tftp и сделать этого пользователя владельцем файлов. При этом пользователь tftp не должен быть владельцем каталога tftproot, в действительности он должен иметь совсем другой домашний каталог. Он нужен лишь для того, чтобы играть роль владельца файлов, доступных пользователям.

Конфигурирование tftpd(8)

Конфигурирование tftpd(8) выполняется исключительно с помощью параметров командной строки, которых не так много. Полный список параметров вы найдете на странице руководства tftpd(8), а здесь описаны только самые полезные из них.

Если специально для запуска tftpd(8) была создана отдельная учетная запись, вы сможете указать имя пользователя с помощью ключа -u. Если имя пользователя не указано, tftpd будет запущен с привилегиями пользователя nobody.

Рекомендую протоколировать все запросы, поступающие демону TFTP. Протоколирование включается с помощью ключа -l. Для нужд протоколирования tftpd(8) использует источник (facility) LOG_FTP, который необходимо активировать в файле syslog.conf (глава 19).

Демон tftpd поддерживает возможность работы в chroot-окружении (глава 9), для чего нужно задать ключ -s. Это позволит ограничить дисковое пространство, доступное демону tftpd(8), выбранным каталогом. Не следует делать доступными для чтения пользователям tftp такие файлы, как /boot/kernel/kernel, — это общий принцип! Всегда запускайте tftpd(8) в chroot-окружении.

Ключ -c позволяет поместить в chroot-окружение клиентов с определенными IP-адресами. В этом случае для всех клиентов, которым будет позволено пользоваться tftpd, необходимо создать по отдельному каталогу. Предположим, что доступ к TFTP получит только один хост (маршрутизатор) с IP-адресом 192.168.1.1. Для этого можно было бы создать каталог /var/tftproot/192.168.1.1 и использовать ключ -c. При этом также следует использовать ключ -s, чтобы определить базовый каталог /var/tftproot. Это идеальный вариант, когда необходимо обеспечить доступ к TFTP одному или двум хостам и запретить доступ к серверу TFTP всем остальным.

Также можно разрешить клиентам создавать новые файлы на сервере TFTP. Такая практика не может быть признана хорошей, потому что это позволит пользователям переполнить жесткий диск, но если есть такая необходимость, можно использовать ключ -w.

Предположим, требуется протоколировать все запросы к tftpd, ограничить доступную область каталогом /var/tftproot, запускать сервер с привилегиями пользователя tftpd и помещать клиентов в chroot-окружение. Тогда команда запуска tftpd может выглядеть примерно так:

tftpd -l -u tftpd -c -s /var/tftpboot

Введите эту строку в файл inetd.conf, как описывалось ранее, перезапустите initd(8) — и дело в шляпе!

Комментарии запрещены.