Lire les informations d'identification (7), fork (2), execve (2). L'appel système fork est la façon dont les processus sont créés (aujourd'hui, fork
est souvent implémenté avec clone(2) mais vous pouvez voir cela comme un détail d'implémentation). L'appel système exec est la façon dont les programmes exécutables sont lancés. Rappelez-vous que tout est fait à partir d'un processus avec des appels système (listés dans syscalls(2)). Le tout premier processus (init ou systemd) a été démarré comme par magie par le noyau au démarrage. D'autres processus ont été lancés par fork(2). Les noyaux Linux modernes lancent parfois - mais rarement - comme par magie quelques processus spéciaux (par exemple, /sbin/hotplug
) ou les threads du noyau (par exemple kworker
, kswapd
....).
Alors oui, chaque processus (et chaque fichier) a un propriétaire (techniquement l'uid, un petit nombre non négatif) et un groupe (le gid). L'uid 0 est pour root et a des permissions supplémentaires.
Lisez aussi à propos de setuid (et setreuid(2)...) C'est délicat.
cela signifie-t-il que l'autre propriétaire ne peut pas exécuter ce processus ?
Un processus est déjà en cours d'exécution (mais il peut être inactif ou en attente), afin que personne ne puisse l'exécuter à nouveau. Ne confondez pas un processus (quelque chose de dynamique) avec le programme (un fichier exécutable, souvent au format ELF) exécuté à l'intérieur.
Un programme donné (ex. /bin/bash
) peut être exécuté en plusieurs processus. De nombreux exécutables restent sur votre disque sans qu'aucun processus ne les exécute (à un instant donné).
Sous Linux, proc(5) est très utile pour interroger le noyau sur l'état des processus. Essayez pour des exemples cat /proc/$$/status
et cat /proc/self/maps
. Voir aussi pgrep(1), ps(1), top(1).
Chaque processus a son propre espace d'adressage virtuel, sa propre table de descripteurs de fichiers, son propre répertoire de travail, (et souvent plusieurs threads, voir pthreads(7)) etc etc...
cela signifie-t-il que les autres propriétaires ne peuvent pas exécuter/arrêter/reprendre ce processus ?
Exécuter un processus n'a aucun sens (c'est déjà fonctionnement). Cependant, l'exécutable du processus de pid 1234 est disponible en tant que /proc/1234/exe
lien symbolique, et vous pouvez l'utiliser pour execve(2) - mais vous ne devriez probablement pas -. Les règles d'autorisation pour execve
s'applique.
Pour kill(2) un processus, vous devez généralement avoir le même uid. Cependant, la documentation indique :
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.
Pour arrêter un processus, utilisez le SIGSTOP
(ou SIGTSTP
) signal utilisé avec kill(2). Voir signal(7).
Pour reprendre un processus arrêté, utilisez le SIGCONT
signal.
Le propriétaire est généralement l'utilisateur qui a lancé ce processus. La commande peut être exécutable par d'autres utilisateurs, mais ce serait un processus différent.
cela signifie-t-il que l'autre propriétaire ne peut pas exécuter ce processus ?
Il n'y a pas d'autre propriétaire. Ne confondez pas programmes (fichiers exécutables) et processus (programmes en cours d'exécution).
Cela signifie-t-il que les autres propriétaires ne peuvent pas exécuter / tuer / reprendre ce processus ?
Le propriétaire unique a déjà lancé le processus. Si vous voulez dire d'autres utilisateurs , pas les propriétaires, ça dépend.
Root, c'est-à-dire un utilisateur avec uid
égal à 0, a la pleine puissance. Autres utilisateurs partageant le même uid
sont, du point de vue du système d'exploitation, le même utilisateur, donc ayez également plein pouvoir sur le processus.
Les utilisateurs avec un uid différent ne pourront pas tuer/arrêter/reprendre le processus, à moins qu'ils ne soient autorisés à passer au propriétaire ou au privilège root via sudo
ou une commande similaire ou, dans une moindre mesure, s'ils sont liés à ce processus à partir de leur hiérarchie.