¿Qué pasaría si creara una cuenta llamada 'root'?

30

Si creara una cuenta de usuario en Ubuntu llamada root, ¿tendría automáticamente permisos de root? ¿Romper el sistema? ¿Causar una falla en la matriz? ¿Qué pasaría?

El rey olvidado
fuente
25
Ya hay una cuenta llamada root.
mikewhatever

Respuestas:

46

Los nombres de usuario deben ser únicos, por lo que, como se menciona en la respuesta de Owen Hines , no podrá crear este usuario. Sin embargo, el punto clave aquí es que los poderes de superusuario (todos los permisos posibles) no son otorgados por el nombre de usuario root, sino por UID.

El usuario con UID 0 es el superusuario.

Entonces, si el usuario con UID 0 tenía un nombre diferente, y usted creó un usuario llamado root, no tendría ningún estado especial.

¡Te remito al wiki de la etiqueta !

Zanna
fuente
¿Podría cambiar el nombre de la raíz de la cuenta existente y luego crear una raíz de usuario normal?
emory
Como nota al margen, parece posible (aunque no lo he intentado) cambiar el nombre de usuario uid 0 a otra cosa, por lo que no se llama al superusuario root. No es una gran idea, pero es posible. Entonces, uno podría, por ejemplo, hacer una cuenta de superusuario llamada godcon uid 0, y un usuario normal llamado rootcon un uid de 1000o algún otro número.
Ian D. Scott
15

No te dejaría porque ya habría un rootusuario.

Pero, como dijo Florian Diesch en los comentarios:

Algunas herramientas se quejarán, pero siempre puede editar /etc/passwdy etc/shadowmanualmente para crear un segundo usuario llamado root.

TheOdd
fuente
2
Y si haces esto, ¿qué sucede chown root file?
fkraiem
1
@fkraiem, hmm ... buena pregunta, no sé la respuesta a eso.
TheOdd
3
Lo que solía pasar es el primero en el archivo gana. No lo se ahora.
Joshua
5

Primero el cómo, como han dicho otros, cambia el usuario con UID 0 a otra cosa. Luego puede crear un usuario normal con el nombre de root y un UID superior a 1000. Funcionará "bien". Todos los permisos y funciones principales del sistema usan UID y no el nombre de usuario. De hecho, este es un buen primer paso para fortalecer un sistema Linux. (mucho mejor deshabilitar root, pero antes de sudo solíamos hacer esto).

Ahora en cuanto a lo que sucederá.

La mayoría de las veces nada. Todas las llamadas al sistema que tienen que ver con autorización o autenticación usan UID (que yo sepa). Y ha sido así por algún tiempo. Su sistema seguirá funcionando como de costumbre. Las herramientas del sistema reflejarán el nuevo nombre de usuario, pero continuarán funcionando normalmente. En otras palabras, "raíz" en la convención y no en piedra.

Dicho esto, estoy seguro de que hay algunas herramientas y programas que están mal escritos. Los programas que verifican la variable de entorno $ USER pueden actuar incorrectamente. Por lo general, se trata de scripts y proyectos pequeños, pero podría pasar un tiempo rastreando esa mala confirmación, hace 6 años en fdisk que le sigue causando dolor de cabeza.

Esto es algo que solía hacer todo el tiempo. Fue un paso fácil, y cae bajo la regla de "nombres de usuario no predecibles". Sin embargo, hay MUCHAS formas mejores de lograr los mismos objetivos hoy.

coteyr
fuente
te refieres a UID, creo
Zanna
1

Como otros han explicado, es el UID = 0 le da al usuario "superpoderes", no el nombre de usuario es "root". Entonces, si de alguna manera logró crear otro usuario llamado "root" (después de renombrar / eliminar el original), el super-estado del usuario dependería del UID que le dio.

Lo que también lleva a otra idea interesante: es totalmente posible tener múltiples usuarios con el mismo UID (lo que los convierte esencialmente en el mismo usuario desde el punto de vista de los permisos del sistema de archivos, pero permite tener un directorio diferente, por ejemplo, shell y home). De hecho, algunos sistemas similares a UNIX tienen otra cuenta de superusuario llamada toor (raíz al revés) que permite tener dos cuentas de superusuario con configuraciones diferentes.

Sergey
fuente
1

Cómo crear la segunda 'raíz':

Sí, en teoría, no debe haber dos usuarios con el mismo nombre de usuario o las mismas ID. Y las utilidades estándar son infalibles y no harán tales usuarios para usted. Pero siempre puede editar / etc / passwd manualmente.

Por ejemplo, hice:

$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'. 
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)

Como ves, ahora somos root! Sí, esa no es la raíz real (no uid = 0), pero son las mismas cuatro letras. Impresionante e inútil.

Cómo crear una mejor segunda 'raíz':

Además, puedes hacer otra modificación. Deje el nombre de usuario tal cual, (su nombre o root2) pero cambie uid.

$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash

(vea, los campos UID y GID son ceros) Ahora tiene un usuario habitual (no root), con un nombre de usuario casi no sospechoso (o haga el nombre de usuario 'johndoe' para un mejor efecto), pero de hecho, ¡este usuario tiene superpoderes!

$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda

Command (m for help):

Como puede ver, el usuario común no puede usar fdisk en / dev / sda, ¡pero root2 puede hacer cualquier cosa!

Este simple truco que a veces se usa después de que el sistema se piratea para proporcionar puerta trasera. Incluso si la raíz real cambia sus claves / contraseñas, el hacker seguirá teniendo control total sobre el sistema a través de otro usuario con uid = 0.

Cómo funciona la matriz

En realidad, ni el nombre de usuario 'root', ni uid = 0 no es mágico por sí mismo. Esto es solo cuestión de convención. Y ni siquiera es siempre cierto. (vea esta pregunta: ¿La cuenta raíz siempre tiene UID / GID 0? ) El código del núcleo es mágico. En realidad, el código del espacio de usuario en sí mismo no puede hacer nada que la raíz pueda hacer. ¡Incluso si se ejecuta como root! El poder de la raíz está en el núcleo. por ejemplo, si hace "cat / etc / shadow" (solo la raíz generalmente puede hacer esto), el programa / bin / cat llama a la función libc open (), que sigue siendo código de espacio de usuario, y esta función open () realiza una llamada del sistema al kernel. Entonces el núcleo mismo decide qué hacer. Por ejemplo, el núcleo puede permitir alguna operación si el usuario efectivo tiene id == 0.

En teoría, si cambia algún código en el núcleo y maneja al usuario de 'www-data' de manera diferente, algunas operaciones pueden permitirse solo para el usuario de 'www-data' (y no permitirse incluso rootear).

Yaroslaff
fuente
0

La mayoría de las herramientas 'fáciles de usar' comprobarán esto y no le permitirán crear una cuenta con un nombre de usuario que ya esté en uso.

Si omite esto y agrega manualmente una segunda cuenta raíz a su / etc / passwd y / etc / shadow, entonces cuál se utilizará, supongo que dependería si la coloca antes o después de la original. Al igual que todas las cuentas de usuario en un sistema Unix, también tendrá acceso de superusuario solo si su UID es cero, independientemente del nombre.

delt
fuente