Estoy ejecutando TFTPD vía xinetd en un servidor Centos 5.4. Puedo acceder bien a los archivos a través de tftp, así que sé que el servicio está funcionando bien. Sin embargo, cada vez que intento cargar un archivo aparece un mensaje 0 Permiso denegado.
Ya creé el archivo en /tftpboot y configuré los permisos en 666.
Mi configuración tftpd tiene un registro detallado (-vvvv), pero todo lo que veo en mi /var/log/messages es:
INICIO: tftp pid=20383 desde=192.168.77.4
He visto algunas menciones de que SELinux puede evitar las cargas TFTPD, pero esperaría ver algo en los registros. Tengo SELinux configurado en modo permisivo.
¿Algunas ideas?
Respuesta1
Seguí la información enhttp://grimwell.wikispaces.com/tftpd, prestando especial atención a "enjuagar y repetir" para implementar las políticas de Selinux. Después de algunos intentos, todo empezó a funcionar: carga y creación de nuevos archivos.
En breve:
- asegúrese de tener la auditoría instalada en centos, de lo contrario, es posible que SELinux no registre nada.
- asegúrese de que su xinetd.d/tftpd esté
-c -v -s /tftpboot
en la línea de argumentos del servidor - asegúrese de que el directorio en el que escribirá tftp tenga 777 permisos
- haga un tftp localhost e intente colocar un archivo en el directorio
- toque un archivo en el directorio, chmod 666 y luego a través de tftp localhost, intente sobrescribir el archivo
- hacer
grep tftp /var/log/audit/audit.log | audit2allow -m tftpwrite
para crear una política selinux. Asegúrese de que la política incluya líneas de escritura y creación. De lo contrario, intente escribir y crear nuevamente para generar alertas en el registro de auditoría e inténtelo nuevamente. - cree una política instalable usando
grep tftp /var/log/audit/audit.log | audit2allow -M tftpwrite
y luego instálela usandosemodule -i tftpwrite.pp
service xinetd reload
e intente usar tftp.
Espléndido. ¡Espero que otros encuentren esto útil!
Respuesta2
Encontré otra solución mejor a este problema. No podía creer que las personas que escribieron los archivos de políticas de Selinux no pensaran que la gente necesitaría cargas tftp, así que investigué un poco. No pude encontrar nada en Internet que no esté mencionado aquí, pero al buscar en la política de Selinux pude encontrar otro contexto de seguridad que ya está en el sistema para escrituras tftp. Cambiar el contexto de /tftpboot solucionó el 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 ..
Respuesta3
¿Estás iniciando tftpd con la opción -s? Algunos clientes pueden estar esperando esto, por ejemplo, cargar un archivo llamado foo
que /foo
realmente está destinado /tftpboot/foo
al servidor. Agregar -s /tftpboot
esencialmente le dice al servidor que haga un "chroot" en ese directorio.
Intente ejecutar tftpd manualmente, por ejemplo, no mediante xinetd, y vea cuál es el resultado. También puede intentar ejecutarlo para strace
ver exactamente qué archivos intenta abrir y qué llamadas a sistemas está realizando.
Verifique dos veces /etc/hosts.allow
y /etc/hosts.deny
asegúrese de que se permita el tráfico en el servidor.
Con respecto a SELinux, dependiendo de cómo esté configurado su sistema, es posible que esté iniciando sesión /var/log/audit/audit.log
si ha habilitado auditd. Ver la sección 5 deesta página.