Leer credenciales (7), bifurcación (2), execve (2). La llamada al sistema de bifurcación es la forma en que se crean los procesos (hoy, fork
a menudo se implementa con clone (2), pero puede verlo como un detalle de implementación). La llamada al sistema exec es la forma en que se inician los programas ejecutables. Recuerde que todo se hace desde algún proceso con algunas llamadas al sistema (enumeradas en syscalls(2)). El kernel inició mágicamente el primer proceso (init o systemd) en el momento del arranque. Fork(2) ha iniciado otros procesos. Los núcleos de Linux modernos a veces, pero rara vez, inician mágicamente algunos procesos especiales (por ejemplo, /sbin/hotplug
) o subprocesos del kernel (por ejemplo, kworker
, kswapd
....).
Entonces, sí, cada proceso (y cada archivo) tiene un propietario (técnicamente, el uid, un pequeño número no negativo) y un grupo (el gid). El uid 0 es para root y tiene permisos adicionales.
Lea también sobre setuid (y setreuid(2)...) Es complicado.
¿Significa que el otro propietario no puede ejecutar ese proceso?
Un proceso ya ejecutándose (pero podría estar inactivo o en espera), por lo que nadie puede volver a ejecutarlo. No confunda un proceso (algo dinámico) con el programa (un archivo ejecutable, a menudo en formato ELF) que se ejecuta dentro de él.
Un programa dado (por ejemplo, /bin/bash
) se puede ejecutar en varios procesos. Muchos ejecutables permanecen en su disco sin tener (en un instante dado) ningún proceso ejecutándolos.
En Linux, proc(5) es muy útil para consultar el kernel sobre el estado de los procesos. Pruebe con ejemplos cat /proc/$$/status
y cat /proc/self/maps
. Véase también pgrep(1), ps(1), top(1).
Cada proceso tiene su propio espacio de direcciones virtuales, su propia tabla de descriptores de archivo, su propio directorio de trabajo (y, a menudo, varios subprocesos, consulte pthreads(7)), etc., etc...
¿Significa que otros propietarios no pueden ejecutar/matar/reanudar ese proceso?
Ejecutar un proceso no tiene ningún sentido (ya correr). Sin embargo, el ejecutable del proceso de pid 1234 está disponible como /proc/1234/exe
enlace simbólico, y puede usarlo para execve (2), pero probablemente no debería hacerlo. Las reglas de permiso para execve
aplica.
Para matar (2) un proceso, generalmente debe tener el mismo uid. Sin embargo, la documentación dice:
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session.
Para detener un proceso, use el SIGSTOP
(o SIGTSTP
) señal utilizada con kill(2). Ver señal(7).
Para reanudar un proceso detenido, use el SIGCONT
señal.
El propietario suele ser el usuario que inició ese proceso. El comando puede ser ejecutable por otros usuarios, pero ese sería un proceso diferente.
¿Significa que el otro propietario no puede ejecutar ese proceso?
No hay otro dueño. No confunda programas (archivos ejecutables) y procesos (programas en ejecución).
¿Significa que otros propietarios no pueden ejecutar/matar/reanudar ese proceso?
El único dueño ya inició el trámite. Si te refieres a otros usuarios , no propietarios, eso depende.
Root, es decir, un usuario con uid
igual a 0, tiene plena potencia. Otros usuarios que comparten el mismo uid
son, desde el punto de vista del sistema operativo, el mismo usuario, por lo que también tienen pleno poder en el proceso.
Los usuarios con un uid diferente no podrán eliminar/detener/reanudar el proceso, a menos que se les permita cambiar al privilegio de propietario o raíz a través de sudo
o comando similar o, en menor medida, si están relacionados con ese proceso desde su jerarquía.