È possibile determinare il proprietario di un processo utilizzando il pscomando Questo significa che altri utenti non possono eseguire / uccidere / riprendere quel processo?
È possibile determinare il proprietario di un processo utilizzando il pscomando Questo significa che altri utenti non possono eseguire / uccidere / riprendere quel processo?
Risposte:
Leggi le credenziali (7) , fork (2) , execve (2) . La chiamata di sistema fork è il modo in cui vengono creati i processi (oggi, forkviene spesso implementato con clone (2) ma è possibile vederlo come un dettaglio di implementazione). La chiamata di sistema exec è il modo in cui vengono avviati i programmi eseguibili . Ricorda che tutto viene fatto da un processo con alcune chiamate di sistema (elencate in syscalls (2) ). Il primissimo processo ( init o systemd ) è stato avviato magicamente dal kernel all'avvio. Altri processi sono stati avviati da fork (2). I kernel Linux moderni a volte - ma raramente - avviano magicamente alcuni processi speciali (ad esempio /sbin/hotplug) o thread del kernel (ad esempio kworker, kswapd....).
Quindi sì, ogni processo (e ogni file) ha un proprietario (tecnicamente uid , un piccolo numero non negativo) e un gruppo (gid). Lo 0 uid è per root e ha permessi extra.
Leggi anche su setuid (e setreuid (2) ...) È complicato.
significa che l'altro proprietario non può eseguire quel processo?
Un processo è già in esecuzione (ma potrebbe essere inattivo o in attesa), quindi nessuno può eseguirlo di nuovo. Non confondere un processo (qualcosa di dinamico) con il programma (un file eseguibile , spesso in formato ELF ) in esecuzione al suo interno.
Un determinato programma (ad es. /bin/bash) Può essere eseguito in diversi processi. Molti eseguibili rimangono sul disco senza avere (in un dato istante) alcun processo che li esegue.
Su Linux, proc (5) è molto utile per interrogare il kernel sullo stato dei processi. Prova per esempi cat /proc/$$/statuse cat /proc/self/maps. Vedi anche pgrep (1) , ps (1) , top (1) .
Ogni processo ha il suo spazio di indirizzi virtuale , la sua tabella descrittore di file , la sua directory di lavoro (e spesso diversi thread , vedi pthreads (7) ) ecc ecc ...
significa che altri proprietari non possono eseguire / uccidere / riprendere quel processo?
Eseguire un processo non ha alcun senso (è già in esecuzione). Tuttavia, l'eseguibile del processo di pid 1234 è disponibile come /proc/1234/exelink simbolico e potresti usarlo per execve (2) - ma probabilmente non dovresti -. Si applicano le regole di autorizzazione per execve.
Per uccidere (2) un processo, generalmente dovresti avere lo stesso uid. Tuttavia, la documentazione 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.
Per interrompere un processo, usa il segnale SIGSTOP(o SIGTSTP) usato con kill (2) . Vedi segnale (7) .
Per riprendere un processo interrotto, utilizzare il SIGCONTsegnale.
Il proprietario è in genere l'utente che ha avviato tale processo. Il comando potrebbe essere eseguibile da altri utenti, ma sarebbe un processo diverso.
significa che l'altro proprietario non può eseguire quel processo?
Non c'è altro proprietario. Non confondere i programmi (file eseguibili) e i processi (programmi in esecuzione).
Significa che altri proprietari non possono eseguire / uccidere / riprendere quel processo?
Il singolo proprietario ha già avviato il processo. Se intendi altri utenti , non proprietari, dipende.
Il root, ovvero un utente con uiduguale a 0, ha piena potenza. Altri utenti che condividono lo stesso uidsono, dal punto di vista del sistema operativo, lo stesso utente, quindi hanno anche il pieno potere sul processo.
Gli utenti con un uid diverso non saranno in grado di terminare / interrompere / riprendere il processo, a meno che non siano autorizzati a passare al proprietario o al privilegio di root tramite sudoun comando simile o, in misura minore, se sono correlati a quel processo dalla loro gerarchia.