Сбой загрузки TFTP

Сбой загрузки TFTP

Я запускаю TFTPD через xinetd на сервере Centos 5.4. Я могу нормально получить доступ к файлам через tftp, поэтому я знаю, что служба работает нормально. Однако, всякий раз, когда я пытаюсь загрузить файл, я получаю сообщение 0 Permission denied.

Я уже создал файл в /tftpboot и установил права доступа 666.

В моей конфигурации tftpd включено подробное ведение журнала (-vvvv), но в /var/log/messages я вижу только следующее:

СТАРТ: tftp pid=20383 from=192.168.77.4

Я видел некоторые упоминания о том, что SELinux может предотвратить загрузку TFTPD, но я ожидал увидеть что-то в журналах. У меня SELinux установлен в разрешающий режим.

Есть идеи?

решение1

Следил за информацией наhttp://grimwell.wikispaces.com/tftpd, уделяя особое внимание "промыть и повторить", чтобы политики selinux были на месте. После нескольких попыток все заработало - загрузка и создание новых файлов.

Суммируя:

  • убедитесь, что в CentOS установлен аудит, иначе SELinux может ничего не регистрировать!
  • убедитесь, что ваш xinetd.d/tftpd имеет -c -v -s /tftpbootв строке аргументов сервера
  • убедитесь, что каталог, в который будет производиться запись, имеет права доступа 777
  • сделайте tftp localhost и попробуйте поместить файл в каталог
  • коснитесь файла в каталоге, примените к нему chmod 666, а затем через tftp localhost попробуйте перезаписать файл
  • сделать grep tftp /var/log/audit/audit.log | audit2allow -m tftpwrite, чтобы создать политику selinux. Убедитесь, что политика включает строки write и create. Если нет, попробуйте снова выполнить write и creation, чтобы сгенерировать оповещения в журнале аудита, и попробуйте еще раз.
  • создайте устанавливаемую политику, используя, grep tftp /var/log/audit/audit.log | audit2allow -M tftpwriteа затем установите ее, используяsemodule -i tftpwrite.pp
  • service xinetd reloadи попробуйте использовать tftp.

Великолепно. Надеюсь, это будет полезно и другим!

решение2

Я нашел другое, лучшее решение этой проблемы. Я не мог поверить, что люди, которые писали файлы политики selinux, не думали, что людям понадобятся загрузки tftp, поэтому я немного покопался. Я не смог найти в интернете ничего, что не упоминалось бы здесь, но, поискав политику selinux, я смог найти другой контекст безопасности, уже имеющийся в системе для записи tftp. Изменение контекста /tftpboot решило проблему.

# sesearch -a | grep tftpdir  |grep tftpd_
   allow tftpd_t tftpdir_t : file { read getattr }; 
   allow tftpd_t tftpdir_t : dir { read getattr search }; 
   allow tftpd_t tftpdir_t : lnk_file { read getattr }; 
   allow tftpd_t tftpdir_rw_t : file { ioctl read write create getattr setattr lock append unlink link rename }; 
   allow tftpd_t tftpdir_rw_t : dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir }; 
   allow tftpd_t tftpdir_rw_t : lnk_file { read create getattr setattr unlink link rename }; 
# ls -Z /tftpboot/ -a
drwxrwxrwx  root root system_u:object_r:tftpdir_t      .
drwxr-xr-x  root root system_u:object_r:root_t         ..
# chcon -t tftpdir_rw_t /tftpboot
# ls -Z /tftpboot/ -a
drwxrwxrwx  root root system_u:object_r:tftpdir_rw_t   .
drwxr-xr-x  root root system_u:object_r:root_t         ..

решение3

Вы запускаете tftpd с опцией -s? Некоторые клиенты могут ожидать этого, например, загрузка файла, вызываемого fooдля /foo, на самом деле предназначена для /tftpboot/fooсервера. Добавление -s /tftpbootпо сути говорит серверу сделать "chroot" для этого каталога.

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

Еще раз проверьте /etc/hosts.allowи /etc/hosts.denyубедитесь, что трафик на сервер разрешен.

Что касается SELinux, в зависимости от того, как настроена ваша система, она может вести журнал, /var/log/audit/audit.logесли вы включили auditd. См. раздел 5эта страница.

Связанный контент