usa - que significa en linux
¿Cuál es la cantidad máxima de caracteres para un nombre de host en Unix? (6)
Me pregunto cuál es la cantidad máxima de caracteres para un nombre de host en un sistema Unix. Además, ¿hay alguna variable definida que se pueda usar en la programación de Unix para llamar a ese número? (es decir, número de caracteres permitidos para un nombre de host).
Estoy programando en C.
Aquí hay un código de muestra que lo reúne todo:
#include <limits.h>
#include <unistd.h>
#include <stdio.h>
char host[HOST_NAME_MAX + 1];
host[HOST_NAME_MAX] = 0;
if (gethostname(host, sizeof(host) - 1) == 0)
{
printf("hostname is %s/n", host);
}
Git 2.13 (Q2 2017) ilustra ese límite de longitud de nombre en C, y recuerda que POSIX no especifica si el búfer tendrá terminación nula.
Introduce una nueva función, xgethostname()
, que asegura que siempre haya un /0
al final del búfer.
Ver commit 5781a9a (18 de abril de 2017) por David Turner ( csusbdt
) .
(Fusionado por David Turner - csusbdt
- in commit 5781a9a , 19 abr 2017)
use
HOST_NAME_MAX
paraHOST_NAME_MAX
tamaño de los buffers para gethostname (2)
POSIX
limita la longitud de los nombres de host aHOST_NAME_MAX
.
Exporte la definición alternativa dedaemon.c
y use esta constante para hacer que todos los búferes utilizados con gethostname (2) sean lo suficientemente grandes como para obtener un posible resultado y unNUL
terminación.
Los nombres de host generalmente están limitados a 255 bytes . HOST_NAME_MAX
(o _POSIX_HOST_NAME_MAX
) definido en <limits.h>
contendrá el valor específico.
Por lo general, puede escribir:
getconf HOST_NAME_MAX
Además, generalmente puede incluir limits.h a su aplicación y leer el valor de la definición.
Si bien el estándar POSIX dice que se garantiza que no excederá 255 bytes, eso no significa necesariamente que cada implementación se apegará a eso.
man gethostname en su plataforma para obtener información más detallada.
Según RFC 1035, la longitud de un FQDN está limitada a 255 caracteres, y cada etiqueta (nodo delimitado por un punto en el nombre de host) está limitado a 63 caracteres, por lo que, en efecto, el límite que busca es 63.
Puede obtener este valor ejecutando getconf HOST_NAME_MAX
en la terminal.
tl; dr :
El código debe tratar con nombres de host de hasta 255 bytes de longitud; los administradores deben mantener la longitud del nombre de host (excluyendo el dominio) dentro de los 19 bytes, y la longitud del nombre de dominio (excluyendo los nombres de host) dentro de los 23 bytes.
- Los nombres de host pueden tener hasta 255 bytes (algunos sistemas pueden limitarlos a 64)
- Los nombres de host utilizados en DNS pueden tener una longitud de hasta 253 bytes como nombre de dominio completo (FQDN =
host.example.com
), en cuyo caso:- La primera etiqueta DNS (eliminación y cualquier elemento posterior al nombre de host) solo puede tener hasta 63 bytes
- El límite de 253 bytes se aplica a todo el FQDN, incluso si solo se utiliza la primera etiqueta para el nombre de host de Unix.
- Los nombres de host utilizados en las direcciones de correo electrónico no deben exceder los 245 bytes (para el límite de nombre de usuario tradicional de 8 caracteres) o 221 bytes (la longitud máxima moderna de nombre de usuario de 32) como nombre de dominio completamente calificado.
- Los nombres de host utilizados para los certificados TLS / SSL del servidor no deben exceder los 64 bytes como nombre de dominio completo
- Los nombres de host utilizados para las direcciones de correo electrónico en certificados generados por OpenSSL no deben exceder los 31 bytes (para el límite de nombre de usuario tradicional de 8 caracteres) como un nombre de dominio completamente calificado (los nombres de usuario de más de 8 reducen este límite)
- Si hay caracteres no ASCII en el nombre de host, reste 4 para cada etiqueta de dominio que no sea ASCII (parte entre caracteres) de todos los límites anteriores, y reste 1 o 2 bytes adicionales (sin incluir la sobrecarga de codificación UTF-8 de 1) 2 bytes más por carácter) para cada carácter que no sea ASCII.
Versión larga:
Como dice @Michael, los nombres de host POSIX generalmente están limitados a 255 bytes, y como señala @zrvan, DNS limita la longitud de cada etiqueta en RFC 1035 , sin embargo, ese límite es en realidad 63 (tanto en RFC 1035 sección 2.3.1 como aclarado en RFC 2181, sección 11 ).
Existen otros límites que entran en juego cuando usa nombres de host que se usarán en DNS, como nombres de host en certificados SSL o direcciones de correo electrónico.
En primer lugar, el límite de longitud del nombre de dominio completo (FQDN) es de 255 octetos cuando se representa en el protocolo DNS como
"una serie de etiquetas, ... terminadas por una etiqueta de longitud cero. ... Una etiqueta consta de un octeto de longitud seguido por el número de octetos que representa el nombre en sí mismo" - MSDN Blog "The Old New Thing" (citando a RFC 1035, con una ilustración útil)
Con estos prefijos de longitud (incluido el de la etiqueta de longitud final cero), el límite real para un nombre de dominio totalmente calificado es de 253 bytes.
Si su nombre de host también se utilizará como el nombre DNS para un servidor para el que necesita un certificado TLS / SSL, hay un límite mucho más corto que lo afectará. El Apéndice A.1 de RFC 5280 y sus RFCs predecesoras 3280 y 2459 especifican límites superiores para diferentes campos de un certificado X.509; el límite de ub-common-name-length
para el campo Common Name, que para los certificados del servidor es el nombre de dominio totalmente calificado del servidor, es de 64 bytes.
Si usa OpenSSL para generar un certificado SSL con un campo de dirección de correo electrónico de más de 40 bytes, verá este error:
la cadena es demasiado larga, debe tener menos de 40 bytes de longitud
Si se usa un nombre de host en direcciones de correo electrónico para certificados generados por OpenSSL, el @
y el nombre de usuario también deberán caber dentro de 40 bytes (el "menos que" en el error debería ser "no más que"), que para una longitud máxima de nombre de usuario de 8 bytes, implica un nombre de host máximo FQDN de 31 bytes de longitud. Si la longitud máxima del nombre de usuario es superior a 8 bytes, la longitud máxima del nombre de host se reduce en consecuencia: el límite moderno de Linux de 32 daría una longitud FQDN máxima de 7 que no es práctica, incluso para servicios de acortamiento de URL como bit.ly.
La opción OpenSSL de 40 como límite de longitud para una dirección de correo electrónico X.509 nombre alternativo del sujeto puede haberse elegido por compatibilidad con la sintaxis de nombre alternativo más corta posible, E.163-4 (para números de teléfono), y es es probable que las implementaciones de TLS / SSL (incluyendo incluso OpenSSL) admitan el uso de certificados con direcciones de correo electrónico más largas. Hay un límite superior separado ( ub-emailaddress-length
) de 128 bytes en RFC 3280, aumentado a 255 bytes en RFC 5280; esto es en realidad para otro tipo de integración heredada de direcciones de correo electrónico en certificados X.509, pero no sería sorprendente si muchas implementaciones usan ese límite superior para rfc822Address correo electrónico IA5Strings también.
Si bien OpenSSL podría aumentar este límite en el futuro, no hay problemas para esto en OpenSSL Request Tracker , y parece poco probable que se modifique.
Incluso si no usa TLS / SSL, la longitud máxima de la dirección de correo electrónico de 254 implica una longitud máxima de nombre de host FQDN de 245 bytes para un límite de nombre de usuario tradicional de 8 bytes; o 221 bytes para un límite máximo de longitud de nombre de usuario moderno de 32.
Tomando el mínimo de todos estos máximos y una longitud de dominio de mediana de .com 2012 de 11 (coincidentemente la longitud exacta de example.com), obtiene una longitud máxima de nombre de host de primera etiqueta de 19 bytes para una dirección de correo electrónico de 40 bytes como [email protected]
.
Si todas sus direcciones de correo electrónico están asignadas a un nombre de dominio de nivel superior con registros MX y reescritura de direcciones MTA, suponiendo un límite de longitud de usuario / alias más razonable de 16, obtendrá una longitud máxima de nombre de dominio de 23 bytes para un byte de 40 bytes dirección de correo electrónico como [email protected]
.
Finalmente, los nombres de host no ASCII requieren codificación IDN (nombre de dominio internacionalizado) para su uso con DNS; esto implica una codificación con un prefijo xn--
4 caracteres para cada etiqueta de dominio con caracteres no ASCII, y una expansión de 1-2 bytes para cada carácter no ASCII (además del tamaño más grande resultante de la codificación UTF-8) . Si su nombre de host tiene caracteres que no son ASCII, debe reducir todos los límites anteriores en consecuencia.