¿Cuál es el propósito del usuario 'nadie'?


93

Después de leer Listar todos los usuarios humanos , noté que hay una cuenta de usuario llamada 'nadie' en mi sistema Ubuntu.

También noté que puedo iniciar sesión en esta cuenta desde la terminal usando el siguiente comando y mi contraseña:

sudo su nobody

su nadie

No me molesta en absoluto, pero quiero saber cuál es el propósito de este usuario. ¿Se crea de forma predeterminada en una nueva instalación de Ubuntu o se crea instalando un paquete en particular?


8
Tenga en cuenta que cuando inicia sesión con su contraseña, está usando su contraseña para el paso sudo, no para la cuenta de nadie (y la razón por la que funciona es porque el superusuario puede su a cualquiera sin necesidad de ingresar su contraseña (aunque como mencionado a continuación, creo que al menos en los derivados RH, si el shell de nadie está configurado en / sbin / nologin, aún no podrá iniciar sesión incluso utilizando superusuario (también conocido como root)
Foon

Ese es el caso por defecto ahora (18.04+?). sudo su nobodyvolver Esta cuenta no está disponible actualmente. porque el shell para el usuario nobody está establecido en/usr/sbin/nologin ( getent passwd nobody).
Pablo A

@sarnold: mira mi comentario sobre la respuesta a la que creo que te estás refiriendo. Es una respuesta bastante pobre, ya que no razona ni cita fuentes. Además, va en contra de todo lo que sé sobre la cuenta de nadie y cómo funciona NFS: con root_squashél se asignará root a nadie en sistemas remotos. Esto es más o menos exactamente lo contrario de lo que dice esta respuesta
vidarlo

Respuestas:


85

Está ahí para ejecutar cosas que no necesitan ningún permiso especial. Por lo general, está reservado para servicios vulnerables (httpd, etc.) de modo que si son pirateados, tendrán un daño mínimo en el resto del sistema.

Compare esto con ejecutar algo como un usuario real, si ese servicio se viera comprometido (los servidores web son explotados ocasionalmente para ejecutar código arbitrario), se ejecutaría como ese usuario y tendría acceso a todo lo que ese usuario tenía. En la mayoría de los casos, esto es tan malo como obtener root.

Puedes leer un poco más sobre el usuario de nadie en Ubuntu Wiki:

Para responder a sus seguimientos:

¿Por qué no puedo acceder a esta cuenta su nobody?

sudo grep nobody /etc/shadowle mostrará que nadie no tiene una contraseña y que no puede hacerlo susin una contraseña de cuenta. La forma más limpia es en su sudo su nobodylugar. Eso te dejará en un shcaparazón bastante desolado .

¿Puede dar un ejemplo particular cuando se indica que use esta cuenta?

Cuando no se requieren permisos para las operaciones de un programa. Esto es más notable cuando nunca va a haber actividad en el disco.

Un ejemplo real de esto es memcached(un valor clave en memoria caché / base de datos / cosa), sentado en mi computadora y mi servidor corriendo bajo la cuenta de nadie. ¿Por qué? Porque simplemente no necesita ningún permiso y darle una cuenta que sí tenía acceso de escritura a los archivos sería un riesgo innecesario.


Solo dos cosas más si puede explicar: 1) por qué no puedo acceder a esta cuenta su nobodyy 2) ¿puede dar un ejemplo particular cuando se indica que use esta cuenta?
Radu Rădeanu

@ RaduRădeanu 1) Supongo que se debe a que no tiene una contraseña establecida, y cuando usted, sucomo usuario común, debe proporcionar la contraseña del usuario objetivo. Intente sudo -iluego su nobodydesde el shell raíz (que no requerirá una contraseña).
un CVn

2
Network File Systemlos mapas roota nobodyla raíz local no pueden acceder a todo como la raíz remota puede.
Sylwester

1
@ RaduRădeanu Tenga en cuenta el historial de edición. Cuando probé el comando original (no lo que hay allí) originalmente estaba terminando en un shell de guión (/ bin / sh) pero no puedo replicar eso ahora. Tu edición original estuvo bien. No fui yo quien lo cambió.
Oli

1
Siempre pensé que nobodyNFS la usa en realidad / principalmente como estados linuxstandardbase .
dgonzalez

29

En muchas variantes de Unix, "nadie" es el nombre convencional de una cuenta de usuario que no posee archivos, no está en grupos privilegiados y no tiene capacidades, excepto las que tiene cualquier otro usuario.

Es común ejecutar demonios como nadie, especialmente servidores, para limitar el daño que podría hacer un usuario malintencionado que los controlara. Sin embargo, la utilidad de esta técnica se reduce si se ejecuta más de un demonio de esta manera, ya que obtener el control de un demonio proporcionaría el control de todos ellos. La razón es que los procesos que no son propiedad de nadie tienen la capacidad de enviarse señales entre sí e incluso depurarse, lo que les permite leer o incluso modificar la memoria del otro.

Información tomada de http://en.wikipedia.org/wiki/Nobody_(username) .


-1: nobodyes estrictamente para NFS y no debe ser utilizado por otros servicios y ciertamente no por los administradores del sistema. Gracias.
sarnold

22

El usuario nobody está reservado solo para NFS.

Las respuestas anteriores son bastante incorrectas, porque suponen que nobodyes una identificación de usuario anónima / invitada "genérica".

En el modelo de control de acceso UNIX / Linux, no existen identificadores de usuario anónimos / invitados y estas son malas sugerencias:

  • " común para ejecutar demonios como nobody, especialmente servidores, para limitar el daño que podría hacer un usuario malintencionado que obtuvo el control de ellos ", debido a lo siguiente: " Sin embargo, la utilidad de esta técnica se reduce si más de un demonio se ejecuta de esta manera, porque entonces obtener el control de un demonio proporcionaría el control de todos ellos ".
  • " Un ejemplo real de esto es memcached(una memoria caché / base de datos / cosa en la memoria de valor clave), sentado en mi computadora y mi servidor ejecutándose bajo la nobodycuenta. ¿Por qué? Porque simplemente no necesita ningún permiso y para darle una cuenta que tuviera acceso de escritura a los archivos sería un riesgo innecesario " .

El nobodynombre de usuario con la identificación de usuario 65534 se creó y se reservó para un propósito específico y debe usarse solo para ese propósito: como marcador de posición para usuarios "no asignados" e identificadores de usuario en exportaciones de árbol NFS.

Es decir, a menos que la asignación de usuario / id esté configurada para las exportaciones de árbol NFS, todos los archivos en la exportación aparecerán como propiedad nobody. El propósito de esto es evitar que todos los usuarios en el sistema de importación accedan a esos archivos (a menos que tengan "otros" permisos), ya que ninguno de ellos (excepto root) puede / convertirse nobody.

Por lo tanto, es una muy mala idea usarlo nobodypara cualquier otro propósito, porque su propósito es ser un nombre de usuario / ID de usuario para archivos que no deben ser accesibles para nadie.

La entrada de Wiki también está muy mal.

La práctica de UNIX / Linux es crear una nueva cuenta para cada "aplicación" o área de aplicación que necesite un dominio de control de acceso separado, y nunca reutilizar nobodyfuera de NFS .


Esta respuesta no cita ninguna fuente y contradice explícitamente varias de las otras respuestas, que citan fuentes. La recompensa actual indica que esta respuesta es particularmente buena, en cuyo caso debería citar algunas fuentes o, en la lista, tener algún razonamiento.
vidarlo


@ mook765 Esa parte está bien. El párrafo sobre NFS sin embargo, no lo asimilo. Por ejemplo, con root_squashon, rootse asigna al usuario nobody, por lo que los archivos que tienen propietario no nobodytendrían absolutamente ningún sentido. Además, la afirmación de que los archivos de propiedad de nadie están destinados a ser inaccesibles para nadie tiene poco sentido, ya que los permisos de archivos son independientes de la propiedad en UNIX. No estoy diciendo que todo en la respuesta esté mal, solo que algunos elementos tienen poco o ningún sentido para mí :)
vidarlo

1
@vidarlo, esta respuesta no sugiere que debas configurar los archivos para que sean de tu propiedad nobody. Te dice que nobodyNFS debe usarlo al asignar permisos, y ese es el punto más importante para mí. Cómo NFS utiliza nobodyes menos interesante que el hecho de que no utilice nobody. Gracias.
sarnold

@sarnold la respuesta sigue siendo errónea en este asunto en mi opinión. Si un usuario lee la respuesta man exports, puede estar muy confundido.
vidarlo

17

El nobodyusuario se crea de forma predeterminada en una instalación nueva (marcada en Ubuntu Desktop 13.04).

En muchas variantes * nix, nobodyes el nombre convencional de una cuenta de usuario que no posee archivos, no está en grupos privilegiados y no tiene capacidades, excepto las que tiene cualquier otro usuario (el nobodyusuario y el grupo no tienen ninguna entrada en el /etc/sudoersarchivo) .

Es común para ejecutar los demonios como nobody, especialmente los servidores, con el fin de limitar el daño que podría ser realizado por un usuario malintencionado que obtuvo el control de ellos. Sin embargo, la utilidad de esta técnica se reduce si se ejecuta más de un demonio de esta manera, ya que obtener el control de un demonio proporcionaría el control de todos ellos. La razón es que los nobodyprocesos propios tienen la capacidad de enviarse señales entre sí e incluso depurarse, lo que les permite leer o incluso modificar la memoria del otro.

Fuente : Wikipedia - Nadie (nombre de usuario)


Los nobodyprocesos propios pueden enviarse señales entre sí e incluso trazarse entre sí en Linux, lo que significa que un proceso que no es propiedad de nadie puede leer y escribir la memoria de otro proceso que no es propiedad de nadie.

Esta es una entrada de muestra del nobodyusuario en el /etc/passwdarchivo:

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

Como puede observar, el nobodyusuario tiene /bin/shcomo shell de inicio de sesión y /nonexistentcomo directorio de inicio. Como su nombre indica, el /nonexistentdirectorio no existe, por defecto.

Si es paranoico, puede configurar nobodyel shell predeterminado como /usr/sbin/nologiny así, denegar el inicio de sesión ssh para el nobodyusuario.

Fuente : LinuxG.net - El usuario de Linux y Unix Nobody


Esta respuesta merecería un +1 si se eliminara el párrafo incorrecto de Wikipedia. Gracias.
sarnold

3

nadie es una cuenta especial de usuario y grupo. Debido a que es un nombre de usuario real (y nombre de grupo) y puede ser utilizado por procesos e incluso usuarios, literalmente no es nadie . Por ejemplo, algunas configuraciones de Apache no tienen a nadie como el usuario / grupo que posee los archivos y directorios del sitio web. El problema surge cuando varios procesos pueden usar el usuario de nadie, como los directorios NFS y el servidor web.


0

Corrección menor al ' El usuario nadie está reservado solo para NFS. ' responder. El nobodyusuario también se utiliza para contenedores no privilegiados con montajes de enlace en este momento.

Esto está tomado de systemd-nspawn, específicamente la opción --bind mount:

Tenga en cuenta que cuando esta opción se usa en combinación con --private-users, los puntos de montaje resultantes serán propiedad del usuario nobody. Esto se debe a que el montaje y sus archivos y directorios siguen siendo propiedad de los usuarios y grupos de host relevantes, que no existen en el contenedor, y por lo tanto aparecen bajo el comodín UID 65534 (nadie). Si se crean dichos montajes de enlace, se recomienda hacerlos de solo lectura, usando --bind-ro =.

systemd-nspawn

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.