Uploads TFTP com falha

5

Estou executando o TFTPD via xinetd em um servidor Centos 5.4. Eu sou capaz de acessar arquivos via tftp bem, então eu sei que o serviço está funcionando ok. No entanto, sempre que eu tento fazer upload de um arquivo, recebo uma mensagem de permissão negada.

Eu já criei o arquivo em / tftpboot e configurei as permissões para 666.

Meu tftpd config possui logging detalhado (-vvvv), mas tudo que vejo em meu / var / log / messages é:

START: tftp pid = 20383 de = 192.168.77.4

Eu tenho visto alguns mencionar que o SELinux pode impedir o upload de TFTPD, mas eu esperaria ver algo nos logs. Eu tenho o SELinux configurado no modo permissivo.

Alguma idéia?

    
por dunxd 25.01.2010 / 12:06

3 respostas

4

Seguiu as informações no link , com especial atenção para "enxaguar e repetir" para obter as políticas do selinux em vigor. Depois de algumas tentativas, tudo começou a funcionar - o upload e a criação de novos arquivos.

Resumindo:

  • verifique se você tem a auditoria instalada no centos, caso contrário, o SELinux pode não registrar nada!
  • certifique-se de que seu xinetd.d / tftpd tenha -c -v -s /tftpboot na linha args do servidor
  • certifique-se de que o diretório que o tftp gravará tenha 777 permissões
  • faça um tftp localhost e tente colocar um arquivo no diretório
  • toque em um arquivo no directoy, chmod 666 ele, e depois via tftp localhost, tente e sobrescreva o arquivo
  • faça grep tftp /var/log/audit/audit.log | audit2allow -m tftpwrite para criar uma política de selinux. Certifique-se de que a política inclua escrever e criar linhas. Se não, tente escrever e criar novamente para gerar alertas no log de auditoria e tente novamente.
  • crie uma política instalável usando grep tftp /var/log/audit/audit.log | audit2allow -M tftpwrite e, em seguida, instale-a usando semodule -i tftpwrite.pp
  • service xinetd reload e tente usar tftp.

Esplêndido. Espero que outros achem isso útil!

    
por 26.01.2010 / 13:17
4

Encontrei outra solução melhor para esse problema. Eu não podia acreditar que as pessoas que escreveram os arquivos de política do selinux não achavam que as pessoas precisariam de uploads tftp, então eu fiz algumas pesquisas. Eu não consegui encontrar nada na internet que ainda não tenha sido mencionado aqui, mas pesquisando a política do selinux, eu consegui encontrar outro contexto de segurança no sistema para as gravações do tftp. Alterar o contexto do / tftpboot corrigiu o problema.

# 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         ..
    
por 30.04.2010 / 01:17
3

Você está iniciando o tftpd com a opção -s? Alguns clientes podem estar esperando isso, por exemplo O upload de um arquivo chamado foo to /foo é realmente destinado a /tftpboot/foo no servidor. Adicionar -s /tftpboot essencialmente diz ao servidor para fazer um "chroot" para esse diretório.

Tente executar o tftpd manualmente, por exemplo não via xinetd, e veja qual é a saída. Você também pode tentar executá-lo com strace para ver exatamente quais arquivos está tentando abrir e quais chamadas de sistemas está fazendo.

Verifique novamente /etc/hosts.allow e /etc/hosts.deny para garantir que o tráfego esteja sendo permitido no servidor.

Com relação ao SELinux, dependendo de como o seu sistema está configurado, ele pode estar logando em /var/log/audit/audit.log se você ativou o auditd. Veja a seção 5 de esta página .

    
por 25.01.2010 / 15:08