воскресенье, 11 мая 2014 г.

Настройка TFTP-сервера tftpd-hpa

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

Однажды мне понадобилось настроить TFTP-сервер в Linux. До этого приходилось пользоваться только TFTP-сервером во FreeBSD. Хотел найти что-то похожее, но это оказалось не так просто. Перепробованные мной два других TFTP-сервера не подошли. Точно помню, что один из них не имел опции для создания новых файлов, позволяя писать только в уже существующие файлы. Другой тоже чем-то не устроил. В итоге остановился на TFTP-сервере tftpd-hpa. У него можно отметить два достоинства:
  • Умеет работать автономно, без помощи inetd,
  • Есть опция, разрешающая создание новых файлов, что полезно для сохранения резервных копий конфигурации оборудования.
Установим пакет tftpd-hpa:
# apt-get install tftpd-hpa
После установки отредактируем файл /etc/default/tftpd-hpa, содержащий настройки сервера. Приведём его к следующему виду:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--ipv4 --secure --create --umask 027 --permissive"
В настройках указаны дополнительные опции:
  • create разрешает серверу создавать новые файлы,
  • ipv4 предписывает ему ожидать подключений только на адресах IPv4,
  • umask предписывает сбрасывать бит записи для группы и все биты доступа для остальных пользователей,
  • permissive предписывает не проводить никаких проверок прав доступа к файлу сверх производимых операционной системой.
Создадим каталог для tftp-сервера, дадим серверу доступ к каталогу:
# mkdir /var/tftp
# chown tftp:tftp /var/tftp
Можно также поменять домашний каталог пользователя tftp в файле /etc/passwd на /var/tftp.

Осталось перезапустить демона, чтобы он начал работу с новым каталогом:
# /etc/init.d/tftpd-hpa restart

3 комментария:

Андрей Щеглов комментирует...

Спасибо, помогло. А то замучили меня inetd и xinetd ( под ними циска чет не могла бэкап положить)

Aleksandr Rozumenko комментирует...

Эти две опции лучше убрать:
--umask 027 --permissive
С некоторых свичей бывает так , что файл создаётся , но по факту он пустой.
Явно что-то по правам доступа.... Если убираешь - всё нормально.

morbo комментирует...

Не надо их убирать.

--permissive разрешает tftp-серверу создавать файлы, без этой опции он будет писать только в те файлы, которые уже существуют.

--umask 027 выставляет tftp-серверу битовую маску прав доступа. Права владельца файла не маскируются, у группы владельца файла отнимаются права на изменение файла, а у всех остальных пользователей отнимаются все права доступа.

У меня каталогом владеет пользователь tftp и группа tftp. tftp-сервер работает от имени этого пользователя и этой группы. Писать файлы и создавать их разрешено только tftp-серверу. Члены группы tftp могут читать файлы. Остальные пользователи доступа не имеют. И это именно тот эффект, которого я и хотел добиться.

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