¿La cuenta raíz siempre tiene UID / GID 0?


50

En todos los sistemas Linux que he administrado, la cuenta raíz tiene un GID y un UID de 0. ¿Está garantizado o es posible que el sistema le dé a la raíz una ID diferente?


3
ID 0 tiene todos los derechos. El nombre real (o nombres -múltiple-) puede diferir. Por ejemplo, mi servidor tiene dos usuarios uid 0. Uno llamado 'raíz', uno llamado 'toor'.
Hennes

Respuestas:


80

En realidad, hay dos partes en su pregunta.

¿La cuenta de superusuario siempre tiene uid / gid 0/0 en Linux?

Sí. Como señala Rich Homolka en un comentario , hay un código en el núcleo que verifica explícitamente el uid 0 cuando se necesita verificar el usuario root, lo que significa que la raíz siempre tiene al menos uid 0.

¿El nombre de la cuenta de usuario con uid 0 es siempre root?

No. root es solo un nombre, incluido en / etc / passwd o en algún otro almacén de autenticación. También podría llamar a la cuenta admin, y al sistema operativo en sí no le importará, pero algunas aplicaciones podrían no gustarle porque esperan que exista una cuenta privilegiada llamada root. Llamar a la cuenta uid 0 en un * nix rootes una convención muy fuerte, pero no es requerido por el sistema (aunque puede ser requerido por cierto software del usuario, posiblemente incluyendo las utilidades de administración del sistema).

Es también digno de mención que, como salir en punta por Simon Richter , en BSD que a menudo existe una segunda uid 0 cuenta, por convención llamada toor(que es "raíz" escrito al revés, y también viene léxico después root en una lista ordenada alfabéticamente). Por ejemplo, FreeBSD lo utiliza para proporcionar a un usuario root una configuración de shell personalizada, dejando al usuario root con un shell predeterminado que se garantiza que existe en la partición root del sistema (útil para fines de recuperación).


15
Hay código en el núcleo para verificar la raíz, uid == 0. Sí, está codificado y es permanente.
Rich Homolka

1
BSD normalmente tiene rooty toor, ambos con UID 0.
Simon Richter

@SimonRichter En cuyo caso existe una cuenta de superusuario con el nombre root, por lo que no hay problema siempre que las bibliotecas del almacén de autenticación no se confundan con los dos usuarios con el mismo UID (en cuyo caso los BSD no lo harían así manera, o las bibliotecas se arreglarían).
un CVn el

No hay código en el kernel que utiliza el UID = 0 como representante de la raíz, y las tiendas que en variables denominadas "root_uid", pero no encontré nada (6 años después) que en realidad depende del usuario que se denomina "raíz". Sin embargo, ya sea que el UID esté en / etc / passwd o no, finalmente se lanzarán procesos con UID = 0. :)
dannysauer

15

1) el administrador siempre es uid == 0. Esto está codificado en el núcleo. Se necesitaría algo de codificación en el núcleo para cambiar esto. Esto no tiene mucho sentido, por lo que no está hecho. Por ejemplo, sería inconsistente para otros unixes que comparten el mismo NFS, por ejemplo.

2) uid 0 no necesariamente se asigna a la raíz. El mejor ejemplo es FreeBSD. Tiene dos cuentas uid == 0, la diferencia es el shell. root tiene shell / bin / sh, que es un shell simple, útil para cuando sus discos son malos y necesita fsck / usr. toor usa tcsh, que es mucho más útil en situaciones que no son de emergencia, ya que tiene cosas como historial, etc.

Otro ejemplo más personal; un trabajo que tuve donde tenían una cuenta equiv raíz (es decir, uid = 0) sobre NIS. La contraseña, en blanco! Porque el nuevo administrador del sistema no podía recordar la contraseña de root en las máquinas. Grité sobre esto por razones obvias (las contraseñas NIS por definición no pueden ocultar su espacio en blanco). No estaba contento con esta cuenta.

Y realmente no es el sistema que da uid 0 es root, eres tú. Cambia esto usando archivos passwd u otros directorios de nombres (NIS, ldap) pero no está compilado. Aunque debería tener al menos una cuenta uid 0 en / etc / passwd, ya que es posible que no tenga redes cuando realmente lo necesite .

Entonces root siempre es uid 0, pero uid 0 no es necesariamente siempre root.


1
Oof, el dolor de elegir solo una respuesta aceptada ...
Tanaki

55
@Tanaki En general, "acepta" la respuesta que más te ayudó a responder a tu pregunta y vota todas las respuestas que te resultaron útiles. No hay nada que diga que tiene que aceptar la respuesta más votada o la primera escrita.
un CVn el

1

Bueno, para los sistemas que usan el servidor nonStop, ROOT_UID no es 0 sino 65535.

Usuarios y grupos de OSS El entorno OSS no proporciona nombres de usuario e ID de usuario predeterminados comunes de UNIX a menos que sean creados explícitamente por un administrador del sitio. Sin embargo, existen nombres de usuario e ID de usuario de OSS equivalentes. Por ejemplo, los privilegios normalmente asociados con la raíz del nombre de usuario UNIX y la ID de usuario 0 existen para la ID de usuario (UID) OSS de 65535 (la súper ID), que es el usuario SUPER.SUPER y sus alias.

Ver https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf

En coreutils, puede encontrar el archivo de encabezado root-uid.h:

/* The user ID that always has appropriate privileges in the POSIX sense.

   Copyright 2012-2016 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

   Written by Paul Eggert.  */

#ifndef ROOT_UID_H_
#define ROOT_UID_H_

/* The user ID that always has appropriate privileges in the POSIX sense.  */
#ifdef __TANDEM
# define ROOT_UID 65535
#else
# define ROOT_UID 0
#endif

#endif
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.