Estou executando o TFTPD via xinetd em um servidor Centos 5.4. Consigo acessar arquivos via tftp, então sei que o serviço está funcionando bem. No entanto, sempre que tento fazer upload de um arquivo, recebo uma mensagem 0 Permissão negada.
Já criei o arquivo em /tftpboot e configurei as permissões para 666.
Minha configuração do tftpd possui registro detalhado (-vvvv), mas tudo que vejo em meu /var/log/messages é:
INICIAR: tftp pid=20383 de=192.168.77.4
Já vi algumas menções de que o SELinux pode impedir uploads de TFTPD, mas espero ver algo nos logs. Eu tenho o SELinux configurado no modo permissivo.
Alguma ideia?
Responder1
Segui as informações emhttp://grimwell.wikispaces.com/tftpd, prestando atenção especial ao "enxágue e repita" para implementar as políticas do Selinux. Depois de algumas tentativas tudo começou a funcionar - upload e criação de novos arquivos.
Resumidamente:
- certifique-se de ter a auditoria instalada no centos, caso contrário o SELinux pode não registrar nada!
- certifique-se de que seu xinetd.d/tftpd esteja
-c -v -s /tftpboot
na linha server args - certifique-se de que o diretório no qual o tftp estará gravando tenha permissões 777
- faça um tftp localhost e tente colocar um arquivo no diretório
- toque em um arquivo no diretório, chmod 666 e, em seguida, via tftp localhost, tente substituir o arquivo
- fazer
grep tftp /var/log/audit/audit.log | audit2allow -m tftpwrite
para criar uma política selinux. Certifique-se de que a política inclua escrever e criar linhas. Caso contrário, 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 instale-a usandosemodule -i tftpwrite.pp
service xinetd reload
e tente usar tftp.
Esplêndido. Espero que outros considerem isso útil!
Responder2
Encontrei outra solução melhor para esse problema. Eu não conseguia acreditar que as pessoas que escreveram os arquivos de política do selinux não achavam que precisariam de uploads tftp, então fiz algumas pesquisas. Não consegui encontrar nada na internet que já não estivesse mencionado aqui, mas pesquisando a política do selinux consegui encontrar outro contexto de segurança já no sistema para gravações tftp. Alterar o contexto de /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 ..
Responder3
Você está iniciando o tftpd com a opção -s? Alguns clientes podem estar esperando isso, por exemplo, enviar um arquivo chamado foo
é /foo
realmente destinado /tftpboot/foo
ao servidor. Adicionar -s /tftpboot
essencialmente diz ao servidor para fazer um "chroot" nesse diretório.
Tente executar o tftpd manualmente, por exemplo, não via xinetd, e veja qual é o resultado. Você também pode tentar executá-lo strace
para ver exatamente quais arquivos ele está tentando abrir e quais chamadas de sistema está fazendo.
Verifique novamente /etc/hosts.allow
e /etc/hosts.deny
certifique-se de que o tráfego está sendo permitido no servidor.
Com relação ao SELinux, dependendo de como o seu sistema está configurado, ele pode estar registrando /var/log/audit/audit.log
se você tiver habilitado o auditd. Consulte a seção 5 deesta página.