Estoy ejecutando un sistema de escritorio Ubuntu 12.04. Hasta ahora solo he instalado algunos programas (tengo derechos de sudo).
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?
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?
Respuestas:
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.
fuente
¿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/passwd
archivos Raspberry Pi a continuación para su referencia; notarás al usuariontop
al final de este archivo, creado por el programantop
(monitoreo de red). Del mismo modosshd
,gnats
informes de errores , etc.fuente
dpkg --get-selections | grep -v deinstall
y 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 aleatoriotest_file
que contenga algo inocuo (echo "Test"
). Luegosudo chmod 755 test_file
(por lo que es legible y ejecutable por cualquier persona y legible, escribible y ejecutable por el propietario) y luegosudo chown nobody
lo asignará al usuarionobody
. Entonces ejecútalo. El 'programa'test_file
acaba de ejecutarse con el UIDnobody
.nobody
UID, 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.dpkg
bit 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 sentidoEn 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:
root
,bin
, ydaemon
; yadm
,lp
,sync
,shutdown
,halt
,mail
,news
,uucp
,operator
,man
, ynobody
Otras cuentas de usuario que se mencionan aquí -
pulse
,avahi
,colord
, yDebian-exim
(a elegir uno de fichero de contraseñas de py4on) - nos llevan a la siguiente pregunta.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
postinst
secuencia de comandos del mantenedor del paquete , que se ejecutagetent
para ver si la cuenta de usuario ya existe, yuseradd
si no es así. En teoría, sería eliminado por el llamadopostrm
script de mantenedor del paquete , en ejecuciónuserdel
.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
rabbitmq
cuenta 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.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:
rc
el script/etc/init.d
utiliza una herramienta auxiliar comostart-stop-daemon
y su--chuid
opción.run
llamadas de guiónsetuidgid
,s6-setuidgid
,chpst
, orunuid
con el nombre de cuenta de usuario. Hay ejemplos de esto en /unix//a/179798/5132 que configuran lanagios
cuenta de usuario.setuid
estrofa 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 .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
fuente
En Linux cuando instalamos un servicio, crea un usuario con su nombre de servicio o similar para que no pueda acceder a otros archivos.
fuente