En / etc / group, ¿cuál es el significado del segundo campo?


18

Un /etc/grouparchivo de muestra contiene las siguientes entradas:

root:*:0:
adm:!:4:logcheck
antoine:x:1000:

Las páginas de manual que he leído (Debian y OSX) dicen que el segundo campo es almacenar una contraseña de grupo. Como rara vez se usan, generalmente se coloca un asterisco *o un a xen lugar de dejarlo en blanco.

La shadowpágina del manual también dice que este segundo campo debe almacenar el resultado de la cryptfunción. Y si se almacena un resultado no válido (como *o !), significa que la contraseña no se puede utilizar como método de autenticación.

¿Eso también es válido para el grouparchivo? ¿Por qué termino con 3 caracteres diferentes en mi grouparchivo, todos con el mismo significado? ¿Puedo cambiar todo de forma segura *?


¿Qué lograrías al cambiarlos a todos *?
jordanm

Solo veo que !se usa para un solo grupo en un solo servidor de 10+ que actualmente administro. Por la simplicidad de algunos scripts de comprobación, tener siempre el mismo carácter allí aclararía las cosas. Bueno, si en realidad significa lo mismo, por supuesto.
Tonin

Respuestas:


28

Estás pensando que el !, *o xtiene un significado especial aquí, y por lo tanto te preocupa que pueda haber alguna distinción entre ellos.

El hecho es que estos personajes se eligen simplemente porque se destacan, al menos para los ojos occidentales. Estos caracteres connotan un valor faltante, un caso de excepción o una advertencia. Podrías poner boogaboogaaquí y tener exactamente el mismo efecto.

Esto se debe a la forma en que se manejan las contraseñas en los sistemas de tipo Unix. Cuando el sistema recibe una entrada de contraseña, hace hash y la compara con la codificación almacenada. Por lo tanto, todo lo que importa aquí es que use algún carácter o secuencia de caracteres que no puede ser un hash de contraseña válido. (Tampoco debe incluir dos puntos, por razones obvias).

Aunque no hay diferencia entre estos personajes desde la perspectiva del sistema operativo central, hay algunas convenciones:

  • Cuando el pwconv(8)programa Linux vex , significa que "ya he movido este hash de contraseña pública al archivo de contraseña oculta".

    Ese no es un caso importante en la práctica porque los días de conversión a (o, Dios te ayude, de ) contraseñas ocultas han quedado atrás.

  • Si usa usermod -Lo passwd -lpara bloquear a un usuario, !tiene un significado especial en/etc/shadow porque esa es la convención para "romper este hash para que ya no coincida".

    Agregar cualquier otro personaje al hash almacenado lo rompería igual de bien. La violación de esta Convención se limita a evitar usermod -Uo passwd -ude desbloqueo inicio de sesión del usuario. Igual de cierto, ya que lo bloqueó a mano agregando un personaje falso, puede desbloquearlo a mano quitándolo.

    Sin embargo, todo eso es solo trivia con respecto a esta pregunta. No hay groupmod -Lo gpasswd -l, por lo tanto, no hay !convención en /etc/group.

    Más curiosidades: si se va a las cuentas de usuario de bloqueo con la mano, se debe quedar fuera de la [A-Za-z0-9/\]serie, ya que esos son caracteres legales para el hash. Esa es una razón que se usermodusa !aquí en lugar de x.

No veo nada malo en normalizar todos los /etc/groupcampos de contraseña, si eso te hace sentir mejor. Al hacerlo, ya está diciendo que está contento de hackear estos archivos a mano, por lo que probablemente no sea del tipo que usa las herramientas que se preocupan por las distinciones de todos modos. De todos modos, el cambio no va a tener un efecto en la operación diaria del sistema.


Gracias por tu respuesta muy completa. Actualmente escribiendo scripts para verificar usuarios y grupos en mis servidores, también quería saber si se podía encontrar otra secuencia de caracteres o caracteres en ese campo. De su respuesta, y los detalles no tan triviales, tengo una visión mucho mejor de esto. ¡Gracias de nuevo!
Tonin

1
Para las secuencias de comandos, probablemente debería estar llamando getpwent(3)y amigos. Perl tiene envoltorios para estos en su biblioteca estándar, al igual que cualquier otro lenguaje de scripts enfocado en sysadmin de Unix. Si está utilizando un idioma sin estos envoltorios, esta sería una buena excusa para cambiar. :)
Warren Young

Si todavía está leyendo cosas que tienen casi seis años ... Gracias por la respuesta, veo algunas de las razones históricas por las que las personas usan cosas como xy *para marcar un campo de contraseña "no utilizado". Sin embargo, es curioso ... la página del manual dice que el campo bien puede dejarse vacío (lo que en el campo de la base de datos puede llamarse NULL, especialmente en Oracle, que define la cadena NULL y vacía como la misma). Entonces, volviendo a / etc / group: ¿por qué usar xor !o *, en lugar de dejar el campo vacío? Dos colones consecutivos se destacan tan bien como cualquiera de estos personajes. No es importante, solo curioso
mathguy

1
@mathguy: un campo de contraseña vacío significa "sin contraseña", no es lo mismo que un campo de contraseña que contiene un carácter que nunca puede coincidir con una contraseña real. Dado que la mayoría de los sistemas Unix no usan contraseñas grupales, es una distinción sin diferencia allí, pero no querrá desarrollar un hábito que lo meterá en problemas, como con la mayoría de los sistemas Linux ' /etc/shadow. Además, rechazo la noción de que un doble colon es igual de claro. Rápido, ¿cuántos campos vacíos hay aquí ::::::? Ahora cuantos :x:*:!:x:*::? El mismo número de dos puntos, pero diferentes respuestas, confío.
Warren Young
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.