GNU/Linux >> Linux Esercitazione >  >> Linux

Un processo può avere un proprietario? Cosa significa?

Leggi credenziali(7), fork(2), execve(2). La chiamata di sistema fork è il modo in cui vengono creati i processi (oggi, fork è spesso implementato con clone(2) ma puoi vederlo come un dettaglio di implementazione). La chiamata di sistema exec è il modo in cui vengono avviati i programmi eseguibili. Ricorda che tutto è fatto da qualche processo con alcune chiamate di sistema (elencate in syscalls(2)). Il primissimo processo (init o systemd) è stato avviato magicamente dal kernel al momento dell'avvio. Altri processi sono stati avviati da fork(2). I kernel Linux moderni a volte, ma raramente, avviano magicamente alcuni processi speciali (ad es. /sbin/hotplug ) o thread del kernel (ad esempio kworker , kswapd ....).

Quindi sì, ogni processo (e ogni file) ha un proprietario (tecnicamente l'uid, un piccolo numero non negativo) e un gruppo (il gid). L'uid 0 è 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 dato programma (ad es. /bin/bash ) può essere eseguito in diversi processi. Molti eseguibili rimangono sul tuo disco senza avere (in un dato istante) alcun processo che li esegua.

Su Linux, proc(5) è molto utile per interrogare il kernel sullo stato dei processi. Prova ad esempio cat /proc/$$/status e cat /proc/self/maps . Vedi anche pgrep(1), ps(1), top(1).

Ogni processo ha il proprio spazio di indirizzi virtuali, la propria tabella di descrittori di file, la propria directory di lavoro (e spesso diversi thread, vedi pthreads(7)) ecc. ecc...

significa che altri proprietari non possono eseguire/terminare/riprendere quel processo?

L'esecuzione di un processo non ha alcun senso (lo è già in esecuzione). Tuttavia, l'eseguibile del processo di pid 1234 è disponibile come /proc/1234/exe symlink, e potresti usarlo per execve(2) - ma probabilmente non dovresti -. Le regole di autorizzazione per execve si applica.

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 fermare un processo, usa il SIGSTOP (o SIGTSTP ) segnale usato con kill(2). Vedi signal(7).

Per riprendere un processo interrotto, usa il SIGCONT segnale.


Il proprietario è solitamente 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'è nessun altro proprietario. Non confondere programmi (file eseguibili) e processi (programmi in esecuzione).

Significa che altri proprietari non possono eseguire/terminare/riprendere quel processo?

L'unico proprietario ha già avviato l'iter. Se intendi altri utenti , non proprietari, dipende.

Root, ovvero un utente con uid uguale a 0, ha piena potenza. Altri utenti che condividono lo stesso uid sono, dal punto di vista del sistema operativo, lo stesso utente, quindi hanno pieno potere anche sul processo.

Gli utenti con un uid diverso non saranno in grado di interrompere/arrestare/riprendere il processo, a meno che non siano autorizzati a passare al proprietario o al privilegio di root tramite sudo o un comando simile o, in misura minore, se sono collegati a quel processo dalla loro gerarchia.


Linux
  1. Cosa significa questo avviso?

  2. Cosa significa &alla fine di un comando Linux?

  3. Cosa significa \b in un pattern grep?

  4. Qualcuno può spiegare in dettaglio cosa fa set -m?

  5. quali processi killer ha Linux?

Cosa significa chmod 777

Cosa significa "-" (doppio trattino)?

Cosa significa essere "sh compatibile"?

Cosa indica questa statistica del processo?

Nessuna variabile DISPLAY X11 - cosa significa?

Cosa significa uccidere -3?