¿Por qué un nuevo usuario heredó archivos de un usuario eliminado?

24

Así que tuve que hacer un ejercicio en un libro como tarea. Primero tenía que crear un usuario como:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter

Luego tuvo que agregar algunos archivos al /home/sbaxterdirectorio:

touch /home/sbaxter/ some.txt new.txt files.txt

Luego tuvo que eliminar al sbaxterusuario y crear un nuevo usuario llamado mjane. Para mi sorpresa cuando corrí find /home/ -user mjane, el nuevo usuario mjaneahora poseía todos los archivos antiguos de sbaxter, ¿qué pasó?

John
fuente

Respuestas:

41

El diablo está en los detalles, en la useraddpágina de manual (puede verlo emitiendo man 8 useradd):

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.

Por lo tanto, se usará de manera predeterminada el uid más pequeño sin usar, que es más grande que otros usuarios, en el archivo de contraseña. Al ver que eliminar sbaxter lo eliminó del archivo passwd, su uid es "libre" y se asigna a mjane (ya que la useraddselección de uid es la misma para ambos usuarios en el momento en que useraddse utilizó el comando).

Los archivos en el disco solo almacenan uid, y NO la traducción del nombre de usuario (ya que esta traducción se define en el archivo de contraseña). Puede confirmar eso emitiendo ls -lnpara ver qué archivos de propiedad de uid tienen.

En realidad, recomendaría que deshabilites en lugar de eliminar cuentas. Se puede lograr el bloqueo de cuentas en la mayoría de las distribuciones de Linux usermod -L -e today <username>, que bloquea la contraseña y configura la cuenta para que caduque hoy (puede ver la fecha de vencimiento de una cuenta con chage -l).

Drav Sloan
fuente
2
... esto parece una terrible falla de seguridad. ¿Hay alguna forma de evitarlo?
BlueRaja - Danny Pflughoeft
66
@ BlueRaja-DannyPflughoeft Esto no es una falla de seguridad: los usuarios se identifican por su ID de usuario, no por su nombre de usuario. Cuando elimina una cuenta, debe eliminar todos sus archivos (es decir, todos los archivos que pertenecen a esta ID de usuario, no solo el directorio de inicio del usuario). Esto es parte del procedimiento normal para eliminar una cuenta.
Gilles 'SO- deja de ser malvado'
2
@OlivierDulac Eso se llama una copia de seguridad. Alternativamente, bloquee pero no elimine la cuenta siempre que necesite conservar sus datos. Después de todo, si necesita conservar los datos, la cuenta sigue siendo necesaria.
Gilles 'SO- deja de ser malvado'
1
Se puede lograr el bloqueo de cuentas en la mayoría de las distribuciones de Linux usermod -L -e today <username>, que bloquea la contraseña y configura la cuenta para que caduque hoy (puede ver la fecha de vencimiento de una cuenta con chage -l).
Drav Sloan
55
Es una falla de seguridad, para los estándares de hoy. Como muestra el ejemplo, esto significa que no puede asociar humanos con archivos. Claro, los humanos pueden estar fuertemente asociados con las cuentas, pero la asociación humana <-> cuenta <-> se descompone debido al reciclaje de UID. Por otra parte, Unix nunca tuvo una gran seguridad a este respecto ( rootpodría fingir casi cualquier cosa). Necesita pistas de auditoría para eso.
MSalters
13

El usuario nuevo reutilizó el UID del usuario eliminado y los sistemas de archivos usan un UID para la propiedad, no un nombre de usuario.

Ignacio Vazquez-Abrams
fuente