¿Por qué hay muchas cuentas? Soy el unico usuario

13

Estoy ejecutando un sistema de escritorio Ubuntu 12.04. Hasta ahora solo he instalado algunos programas (tengo derechos de sudo).

  1. Cuando reviso la lista de usuarios en el sistema, veo una lista larga, como más de 20 usuarios, ¿cuándo se crearon estos usuarios (por ejemplo, daemon, sys, sync, games, pulse, etc.)? ¿Cómo se relacionan estos con los nuevos programas que se instalan?

  2. Si ejecuto un programa en mi sistema, debería ejecutarse con mi UID. Pero al hacer una ps , veo muchos otros programas que se ejecutan con diferentes UID (como root, daemon, avahi, syslog, colord, etc.): ¿cómo se iniciaron estos programas con diferentes UID?

Jake
fuente
3
Piénselo de otra manera: cuando la computadora se inicia por primera vez, todavía no ha iniciado sesión y los programas tienen que ejecutarse como alguien . Todos podrían ejecutarse como root, pero eso es inseguro, ya que la mayoría de estos programas solo son responsables de una pequeña parte de la operación de la computadora. Una vez que haya iniciado sesión, la mayoría de los programas que ejecute directamente se ejecutarán como usted.
dimo414
En definitiva, es un truco. Uno ampliamente utilizado, pero un truco, sin embargo. Las distribuciones de UNIX abusan del concepto de "usuario" para evitar un modelo de seguridad antiguo e incompleto.
Federico Poloni

Respuestas:

24

Las cuentas de usuario se utilizan no solo para usuarios reales, humanos, sino también para ejecutar servicios del sistema y, a veces, como propietarios de archivos del sistema. Esto se hace porque la separación entre los recursos de los usuarios humanos (procesos, archivos, etc.) y la separación entre los recursos de los servicios del sistema requiere los mismos mecanismos.

Los programas que ejecuta normalmente se ejecutan con su ID de usuario. Solo los demonios del sistema se ejecutan bajo su propia cuenta. El archivo de configuración que indica cuándo ejecutar el daemon también indica qué usuario debe ejecutarlo, o el daemon cambia a una cuenta sin privilegios después de comenzar. Algunos demonios requieren privilegios administrativos completos, por lo que se ejecutan bajo la cuenta raíz . Muchos daemons solo necesitan acceso a un dispositivo de hardware específico o a archivos específicos, por lo que se ejecutan bajo una cuenta de usuario dedicada. Esto se hace por seguridad: de esa manera, incluso si hay un error o una configuración incorrecta en uno de estos servicios, no puede conducir a un ataque completo del sistema, porque el atacante estará limitado a lo que este servicio puede hacer y no será capaz de sobrescribir archivos, espiar procesos, etc.

En Ubuntu, las ID de usuario en el rango 0–99 se crean en la instalación del sistema. 0 es raíz; muchos de los que están en el rango 1–99 existen solo por razones históricas y solo se mantienen por compatibilidad con algunas instalaciones locales que los usan (algunas entradas adicionales no perjudican). Las ID de usuario en el rango de 100–999 se crean y eliminan dinámicamente cuando se instalan o eliminan servicios que necesitan una ID de usuario dedicada. El rango de 1000 en adelante es para usuarios humanos o cualquier otra cuenta creada por el administrador del sistema. Lo mismo vale para los grupos.

Gilles 'SO- deja de ser malvado'
fuente
7

¿Supongo que está encontrando esta lista de usuarios marcando /etc/passwd? Esto es totalmente normal: los 'usuarios' sirven para llevar un conjunto de permisos, útiles para bloquear no solo 'usuarios reales' sino también programas para ciertas áreas de su sistema y rastrear lo que cambiaron (el mismo concepto con grupos).

He insertado uno de mis /etc/passwdarchivos Raspberry Pi a continuación para su referencia; notarás al usuario ntopal final de este archivo, creado por el programa ntop(monitoreo de red). Del mismo modo sshd, gnatsinformes de errores , etc.

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
smmta:x:107:110:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:108:111:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
Debian-exim:x:109:113::/var/spool/exim4:/bin/false
ntop:x:110:115::/var/lib/ntop:/bin/false
toxefa
fuente
cuando instalo un nuevo programa en ubuntu, ¿crea un nuevo usuario? Si no, ¿cómo es que tantos programas se ejecutan con un UID diferente al mío? Quiero decir, ¿cómo se ejecutan estos programas con diff UID?
Jake
Si lo desea, puede ejecutarlo dpkg --get-selections | grep -v deinstally compararlo con su lista de usuarios / etc / passwd. En cuanto a su pregunta: "... cómo se ejecutan estos programas con diff UID", puede intentarlo usted mismo. Escriba un script de bash aleatorio test_fileque contenga algo inocuo ( echo "Test"). Luego sudo chmod 755 test_file(por lo que es legible y ejecutable por cualquier persona y legible, escribible y ejecutable por el propietario) y luego sudo chown nobodylo asignará al usuario nobody. Entonces ejecútalo. El 'programa' test_fileacaba de ejecutarse con el UID nobody.
toxefa
2
@ py4on No del todo ... se ejecutó desde un archivo con el nobodyUID, pero se ejecutó con su UID; necesitaría convertirlo en un archivo SUID para hacerlo, pero el bit SUID se descarta si el archivo se ejecuta con un intérprete.
Riking
Ok, ya que no puedo editar mi comentario anterior, pero el dpkgbit sigue siendo útil (con suerte), ¡ignore la parte de ejecutarlo usted mismo! Vaya con SUID o inicie sesión como un usuario diferente para que esto tenga sentido
toxefa 19/04/2015
3

¿Cuándo se crearon estos usuarios?

En los casos de los que mencionó, se crearon en la instalación del sistema. Estas cuentas de usuario son convencionales, algunas datan de décadas. También están estandarizados. La base estándar de Linux los divide en:

  • la requerida cuentas de usuario estándar, root, bin, y daemon; y
  • el opcional de usuario estándar cuentas adm, lp, sync, shutdown, halt, mail, news, uucp, operator, man, ynobody

Otras cuentas de usuario que se mencionan aquí - pulse, avahi, colord, y Debian-exim(a elegir uno de fichero de contraseñas de py4on) - nos llevan a la siguiente pregunta.

¿Cómo se relacionan estos con los nuevos programas que se instalan?

Las cuentas de usuario no estándar son creadas y destruidas por los "scripts de mantenimiento" para varios paquetes, ya que esos paquetes se instalan y purgan. Se creará una cuenta de usuario mediante la llamada postinstsecuencia de comandos del mantenedor del paquete , que se ejecuta getentpara ver si la cuenta de usuario ya existe, y useraddsi no es así. En teoría, sería eliminado por el llamado postrmscript de mantenedor del paquete , en ejecución userdel.

En la práctica, las cuentas de usuario para paquetes no se eliminan. El wiki de Fedora (qv) explica que esto estaría lleno de dificultades. Consulte el error de Debian # 646175 para ver un ejemplo de esta lógica en acción, en la que se decide simplemente no eliminar la rabbitmqcuenta de usuario cuando se purga el paquete, para resolver un problema con un demonio que continúa ejecutándose bajo los auspicios de esa cuenta.

¿Cómo comenzaron estos programas con diferentes UID?

Bajo Unix y Linux, un proceso que se ejecuta bajo los auspicios del superusuario puede cambiar su cuenta de usuario a otra y continuar ejecutando el mismo programa, pero no se permite lo contrario. (Uno debe usar el mecanismo set-UID).

El sistema de gestión de dæmon se ejecuta como superusuario. Sus datos de configuración especifican que los demonios particulares se ejecutan bajo los auspicios de cuentas de usuario particulares:

  • Con el Sistema 5, rcel script /etc/init.dutiliza una herramienta auxiliar como start-stop-daemony su --chuidopción.
  • Con un gestor de servicios daemontools familia, las runllamadas de guión setuidgid, s6-setuidgid, chpst, o runuidcon el nombre de cuenta de usuario. Hay ejemplos de esto en /unix//a/179798/5132 que configuran la nagioscuenta de usuario.
  • Con el arranque, hay una setuidestrofa en un archivo de trabajo que especifica la cuenta de usuario. Esto no es particularmente fino, y a veces uno quiere lo que se describe en /superuser//a/723333/38062 .
  • Con systemd hay una User=configuración en el archivo de la unidad de servicio, que especifica la cuenta de usuario.

Cuando el sistema de administración de daemon genera un proceso para ser el daemon, estos mecanismos eliminan los privilegios de superusuario para que el proceso de daemon continúe ejecutándose bajo los auspicios de la cuenta de usuario no privilegiada.

Hay una explicación bastante extensa de por qué se hace una buena gestión de demonios de esta manera. Pero no preguntaste por qué; solo cuándo, cómo y de dónde. ☺ Un breve resumen, por lo tanto:

Los sistemas operativos Unix y Linux aíslan los procesos que se ejecutan bajo los auspicios de diferentes cuentas de usuario entre sí. Históricamente, si uno podía hacerse cargo de un demonio que funcionaba como superusuario, podía hacer lo que quisiera. Un demonio que se ejecuta bajo los auspicios de una cuenta no privilegiada, por otro lado, solo puede acceder a archivos, directorios, dispositivos y procesos que esa cuenta no privilegiada puede. Un sistema de programas de daemon mutuamente no confiables que se ejecutan bajo los auspicios de diferentes cuentas de usuario y que no pueden acceder / controlar los archivos / directorios / procesos / dispositivos (internos, confiables) de los demás, es mucho más difícil de descifrar.

Otras lecturas

JdeBP
fuente
1

En Linux cuando instalamos un servicio, crea un usuario con su nombre de servicio o similar para que no pueda acceder a otros archivos.

PRS
fuente
1
Esta es una convención, pero no es necesaria en absoluto y ciertamente no es universal. De hecho, en realidad no es que común ya ...
HalosGhost
1
@HalosGhost Uh? No, es una convención muy común, que sigue siendo fuerte. Esta respuesta es incompleta pero perfectamente correcta.
Gilles 'SO- deja de ser malvado'
1
@Gilles, no dije (ni siquiera insinué) que era incorrecto. Pero está mayormente desactualizado. Una gran parte de los servicios en estos días (con la llegada de systemd) son solo archivos de servicio. Ahora eso no quiere decir que las cuentas de usuario por servicio ya no existan; Definitivamente lo hacen. Pero, por ejemplo, solo hay 24 cuentas en todo mi sistema donde tengo muchos más servicios.
HalosGhost
@Gilles Tengo la misma situación que HalosGhost: más servicios que cuentas. Entonces, ¿eso significa que todos se ejecutan como root?
lonix