Índice de contenidos
Nombre
hosts_access – formato de los archivos de control de acceso al host de Linux.
Descripción
Esta página del manual describe Linux como un simple lenguaje de control de acceso basado en patrones de cliente (nombre/dirección del host, nombre de usuario) y servidor (nombre del proceso, nombre/dirección del host). Al final se dan ejemplos. Se anima al lector impaciente a que pase a la sección de Ejemplos para una rápida introducción. Una versión extendida del lenguaje de control de acceso se describe en el documento hosts_options(5). Las extensiones se activan en el momento de la construcción del programa mediante la construcción con -DPROCESS_OPTIONS.
En el siguiente texto, daemon es el nombre del proceso de un proceso de demonio de red, y client es el nombre y/o dirección de un servicio solicitante de host. Los nombres de proceso del demonio de red se especifican en el archivo de configuración inetd.
Archivos de control de acceso
El software de control de acceso consulta dos archivos. La búsqueda se detiene en la primera coincidencia.
El acceso se concederá cuando un par (demonio,cliente) coincida con una entrada en el archivo /etc/hosts.allow.
De lo contrario, se denegará el acceso cuando un par (demonio,cliente) coincida con una entrada en el archivo /etc/hosts.deny.
De lo contrario, se concederá el acceso.
Un archivo de control de acceso inexistente se trata como si fuera un archivo vacío. Por lo tanto, el control de acceso puede ser desactivado si no se proporcionan archivos de control de acceso.
Reglas de control de acceso
Cada archivo de control de acceso consta de cero o más líneas de texto. Estas líneas se procesan por orden de aparición. La búsqueda termina cuando se encuentra una coincidencia.
Un nuevo carácter de línea se ignora cuando está precedido por un carácter de barra invertida. Esto le permite dividir las líneas largas para que sean más fáciles de editar.
Las líneas en blanco o las líneas que comienzan con un carácter `#’ se ignoran. Esto le permite insertar comentarios y espacios en blanco para que las tablas sean más fáciles de leer.
Todas las demás líneas deben satisfacer el siguiente formato, siendo las cosas entre [] opcionales:
daemon_list : client_list [ : shell_command ]
daemon_list es una lista de uno o más nombres de procesos daemon (valores argv[0]) o comodines (ver abajo).
client_list es una lista de uno o más nombres de host, direcciones de host, patrones o comodines (ver abajo) que se compararán con el nombre o dirección de host del cliente.
Los formularios más complejos daemon@host y user@host se explican en las secciones sobre patrones de endpoints del servidor y sobre búsquedas de nombres de usuario del cliente, respectivamente.
Los elementos de la lista deben estar separados por espacios en blanco y/o comas.
Con la excepción de las búsquedas de grupos de redes NIS (YP), todas las comprobaciones de control de acceso no distinguen entre mayúsculas y minúsculas.
Patrones
El lenguaje de control de acceso implementa los siguientes patrones:
Una cadena que comienza con un carácter `. Un nombre de host coincide si los últimos componentes de su nombre coinciden con el patrón especificado. Por ejemplo, el patrón `.tue.nl’ coincide con el nombre de host `wzv.win.tue.nl’.
Una cadena que termina con un carácter `. Una dirección de host es igualada si sus primeros campos numéricos coinciden con la cadena dada. Por ejemplo, el patrón `131.155.» coincide con la dirección de (casi) cada host en la red de la Universidad de Eindhoven (131.155.x.x).
Una cadena que comienza con un carácter `@’ se trata como un nombre de netgroup NIS (anteriormente YP). Un nombre de host es igual si es un miembro de host del netgroup especificado. Las coincidencias de Netgroup no son compatibles con los nombres de procesos daemon ni con los nombres de usuario de los clientes.
Una expresión de la forma `n.n.n.n.n/m.m.m.m.m’ se interpreta como un par `net/máscara’. Una dirección de host IPv4 coincide si `net’ es igual al AND de bits de la dirección y la `máscara’. Por ejemplo, el patrón neto/máscara `131.155.72.0/255.255.254.0′ coincide con todas las direcciones del rango `131.155.72.0′ a `131.155.73.255′.
Una expresión de la forma `[n:n:n:n:n:n:n:n:n]/m’ se interpreta como un par `[net]/prefixlen’. Una dirección de host IPv6 coincide si los bits `prefixlen’ de `net’ son iguales a los bits `prefixlen’ de la dirección. Por ejemplo, el patrón[net]/prefixlen `[3ffe:505:2:1::]/64′ coincide con todas las direcciones del rango `3ffe:505:2:1:::’ hasta `3ffe:505:2:1:ffff:ffff:ffff:ffff:ffff’.
Una cadena que comienza con un carácter `/’ se trata como un nombre de archivo. El nombre o la dirección de un host coincide con cualquier patrón de nombre o dirección del host que aparezca en el archivo con nombre. El formato de archivo es cero o más líneas con cero o más nombres de host o patrones de dirección separados por espacios en blanco. Un patrón de nombre de archivo se puede utilizar en cualquier lugar donde se pueda utilizar un nombre de host o un patrón de dirección.
Los comodines `*» y «?’ pueden utilizarse para que coincidan con los nombres de host o las direcciones IP. Este método de coincidencia no se puede utilizar junto con la coincidencia `net/mask’, la coincidencia de nombres de host que empiezan por `.’ o la coincidencia de direcciones IP que terminan por `.
Comodines
El lenguaje de control de acceso soporta comodines explícitos incluidos:
‘ALL’
El comodín universal, siempre coincide.
‘LOCAL’
Concuerda con cualquier host cuyo nombre no contenga un carácter de punto.
«UNKNOWN»
Coincide con cualquier usuario cuyo nombre sea desconocido, y con cualquier host cuyo nombre o dirección (tag) sea desconocido. Este patrón debe utilizarse con cuidado: los nombres de host pueden no estar disponibles debido a problemas temporales con el servidor de nombres. Una dirección de red no estará disponible cuando el software no sepa con qué tipo de red está hablando.
«KNOWN»
Coincide con cualquier usuario cuyo nombre sea conocido y con cualquier host cuyo nombre y dirección () sean conocidos. Este patrón debe utilizarse con cuidado: los nombres de host pueden no estar disponibles debido a problemas temporales con el servidor de nombres. Una dirección de red no estará disponible cuando el software no sepa con qué tipo de red está hablando.
«PARANOID»
Coincide con cualquier host cuyo nombre no coincida con su dirección. Cuando tcpd se construye con -DPARANOID (modo por defecto), deja caer las peticiones de dichos clientes incluso antes de mirar las tablas de control de acceso. Construya sin -DPARANOID cuando desee tener más control sobre dichas peticiones.
OPERADORES»
‘EXCEPTO’
El uso previsto es de la forma: list_1 EXCEPT list_2″; este constructo coincide con cualquier cosa que coincida con list_1 a menos que coincida con list_2. El operador EXCEPTO se puede utilizar en daemon_lists y en client_lists. El operador EXCEPT puede anidarse: si el lenguaje de control permite el uso de paréntesis, `a EXCEPT b EXCEPT c’ parpadeará como `(a EXCEPT (b EXCEPT c))’.
Comandos de shell
Si la primera regla de control de acceso coincidente contiene un comando shell, ese comando está sujeto a %sustituciones (vea la siguiente sección). El resultado se ejecuta mediante un proceso hijo /bin/sh con entrada, salida y error estándar conectado a /dev/null. Especifique un `&’ al final del comando de la terminal si no desea esperar hasta que se haya completado.
Los comandos de Shell no deben depender de la configuración PATH del inetd. En su lugar, deberían usar nombres de ruta absolutos, o deberían comenzar con una PATH=cualquiera que sea la sentencia.
El documento hosts_options(5) describe un lenguaje alternativo que utiliza el campo de comandos shell de una manera diferente e incompatible.
Expansiones
Las siguientes expansiones están disponibles dentro de los comandos del shell:
%a (%A) – La dirección host del cliente (servidor).
%c – Información de cliente: user@host, user@address, un nombre de host, o simplemente una dirección, dependiendo de cuanta información esté disponible.
%d – El nombre del proceso daemon (valor argv[0]).
%h (%H) – El nombre o dirección del host del cliente (servidor), si el nombre del host no está disponible.
%n (%N) – El nombre de host del cliente (servidor) (o «desconocido» o «paranoico»).
%p – El id. del proceso daemon.
%s – Información del servidor: daemon@host, daemon@address, o simplemente un nombre de demonio, dependiendo de cuánta información esté disponible.
%u – El nombre de usuario del cliente (o «desconocido»).
%% – Se expande a un solo carácter `%’.
Los caracteres en expansiones de % que pueden confundir al shell son reemplazados por guiones bajos.
Patrones de punto final de servidor
Para distinguir a los clientes por la dirección de red a la que se conectan, utilice los patrones del formulario:
process_name@host_pattern : client_list ….
Patrones como estos pueden ser utilizados cuando la máquina tiene diferentes direcciones de Internet con diferentes nombres de host de Internet. Los proveedores de servicios pueden utilizar este servicio para ofrecer archivos FTP, GOPHER o WWW con nombres de Internet que pueden incluso pertenecer a diferentes organizaciones. Vea también la opción `twist’ en el documento hosts_options(5). Algunos sistemas (Solaris, FreeBSD) pueden tener más de una dirección de Internet en una interfaz física; con otros sistemas puede que tenga que recurrir a pseudointerfaces SLIP o PPP que viven en un espacio de direcciones de red dedicado.
El host_pattern obedece las mismas reglas sintácticas que los nombres y direcciones de host en el contexto client_list. Normalmente, la información del punto final del servidor sólo está disponible con servicios orientados a la conexión.
Búsqueda de nombre de usuario de cliente
Cuando el host cliente soporta el protocolo RFC 931 o uno de sus descendientes (TAP, IDENT, RFC 1413), los programas envolventes pueden recuperar información adicional sobre el propietario de una conexión. La información del nombre de usuario del cliente, cuando está disponible, se registra junto con el nombre del host del cliente y se puede utilizar para hacer coincidir patrones como:
lista_de_demonios : …. user_pattern@host_pattern ….
Las envolturas del demonio pueden configurarse en tiempo de compilación para realizar búsquedas de nombres de usuario basadas en reglas (predeterminadas) o para interrogar siempre al host del cliente. En el caso de búsquedas de nombres de usuario basadas en reglas, la regla anterior provocaría la búsqueda de nombres de usuario sólo cuando tanto la daemon_list como la host_patterncoinciden.
Un patrón de usuario tiene la misma sintaxis que un patrón de proceso de demonio, por lo que se aplican los mismos comodines (no se admite la pertenencia a un grupo neto). Sin embargo, uno no debería dejarse llevar por las búsquedas de nombres de usuario.
La información del nombre de usuario del cliente no se puede confiar cuando más se necesita, es decir, cuando el sistema del cliente ha sido comprometido. En general, ALL y (UN)KNOWN son los únicos patrones de nombres de usuario que tienen sentido.
Las búsquedas de nombres de usuario sólo son posibles con servicios basados en TCP, y sólo cuando el host del cliente ejecuta un demonio adecuado; en todos los demás casos el resultado es «desconocido».