Cosa determina quali comandi Linux richiedono l'accesso come root?


23

Cosa determina quali comandi Linux richiedono l'accesso come root? Comprendo i motivi per cui è auspicabile che, diciamo, apt-getdebba richiedere rootprivilegi; ma cosa distingue questi comandi dal resto? È semplicemente una questione di proprietà ed eseguire le autorizzazioni dell'eseguibile?


2
È principalmente una funzione di quale file toccano e quali funzioni chiamano.
Federico Klez Culloca,

9
Alcune app devono accedere a file / directory di proprietà di root. Quindi, chiamano opene ottengono il "permesso negato". Alcune app controllano getuide smettono di funzionare se non vengono chiamate da root. Alcuni sono fisicamente di proprietà di root e solo il proprietario può eseguirli (vedi chmod). Se stai chiedendo se c'è qualche segno di "bisogno di root" nell'intestazione dell'app - la risposta è no. Non esiste nulla di simile
user996142,

1
ps: anche diversi syscall (come l'associazione alla porta ben nota <1024) potrebbero richiedere l'accesso root.
user996142,

apt-get non richiede affatto root. Si trova nella directory / usr / bin, vedere askubuntu.com/a/440791/169736
Braiam

Qui puoi chiarire cosa intendi per "richiedere". Vuoi dire che il programma non verrà eseguito a meno che tu non sia root (o non abbia i permessi sudo), o che debba essere root per fare correttamente il suo lavoro?
jamesqf,

Risposte:


15

In Linux, i privilegi di root erano ad un certo punto diviso in "capacità", in modo da poter ottenere un elenco completo dei privilegi speciali di root, cercando in quella documentazione: man 7 capabilities.

Per rispondere alla tua domanda, un comando richiederà l'esecuzione come root quando necessita di uno di questi privilegi e il suo eseguibile non script non ha la relativa funzionalità impostata nei suoi metadati di file (ad esempio se uno script Python richiede la funzionalità, quindi la funzionalità dovrebbe essere nell'interprete Python specificato nella riga Shebang).

Si noti che alcuni comandi che richiedono l'accesso come root non hanno bisogno di qualcosa di simile sudoperché hanno il bit SUID impostato nel loro eseguibile. Questo bit provoca l'esecuzione dell'eseguibile come proprietario (in genere root) quando eseguito da chiunque abbia accesso di esecuzione. Un esempio è sudose stesso in quanto cambiare gli utenti è un'azione privilegiata che deve fare.

EDIT: noto dalla tua domanda che potresti avere l'idea che puoi determinare se un comando avrà bisogno dell'accesso root prima di eseguirlo. Non è così. A volte un programma può richiedere privilegi di root e altre volte no, e questa potrebbe essere una decisione presa dal programma a causa dei dati forniti durante il runtime. Prendiamo ad esempio la chiamata vim, proprio come quella senza argomenti, e poi attraverso una serie di pressioni e incolla, dicendogli di scrivere qualcosa su un file che non ha il permesso di scrivere, o forse eseguendo un altro comando che richiederà i privilegi di root. Nulla sul comando prima dell'esecuzione potrebbe indicare che alla fine richiederebbe l'accesso root. È qualcosa che può essere determinato solo nel momento in cui cerca di fare qualcosa che lo richiede.

Ad ogni modo, ecco alcuni esempi dalla manpage di riferimento dei privilegi di root:

  • Effettuare manipolazioni arbitrarie degli UID di processo (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
  • Bypassare i file in lettura, scrittura ed esecuzione dei controlli delle autorizzazioni. (DAC è l'abbreviazione di "controllo di accesso discrezionale".)
  • Bypass verifica l'autorizzazione per l'invio di segnali (vedi kill (2)). Ciò include l'uso dell'operazione ioctl (2) KDSIGACCEPT.
  • Eseguire varie operazioni relative alla rete:
    • configurazione dell'interfaccia;
    • amministrazione di firewall IP, mascheramento e contabilità;
    • modificare le tabelle di routing;
  • Associare un socket alle porte privilegiate del dominio Internet (numeri di porta inferiori a 1024).
  • Carica e scarica i moduli del kernel (vedi init_module (2) e delete_module (2));
  • Imposta l'orologio di sistema (settimeofday (2), stime (2), adjtimex (2)); imposta l'orologio in tempo reale (hardware).
  • Eseguire una serie di operazioni di amministrazione del sistema tra cui: quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2) e setdomainname (2);
  • Usa reboot (2) e kexec_load (2).
  • Usa chroot (2).
  • Aumenta il valore di processo (nice (2), setpriority (2)) e modifica il valore di Nice per processi arbitrari;

32

E 'principalmente una questione di ciò che lo strumento o il programma fa . Tenendo presente che un non-superutente può solo toccare i file di cui è proprietario o al quale ha accesso, qualsiasi strumento che deve essere in grado di mettere le dita in tutto richiederà l'accesso da superutente per fare ciò che fa. Un rapido esempio di cose che potrebbero richiedere l'accesso da superutente includono, ma non si limita a:

  • Apertura di un socket TCP in ascolto su una porta inferiore a 1024
  • Modifica delle configurazioni di sistema (ad es. Qualsiasi cosa in /etc)
  • Aggiunta di nuove librerie accessibili a livello globale ( /libe /usr/lib) o binari ( /bin, /usr/bin)
  • Toccando tutti i file non di proprietà dell'utente che sta effettuando i tocchi che non dispongono di una modalità sufficientemente permissiva
  • Modifica della proprietà dei file degli altri utenti
  • Priorità del processo esplicativo (ad es. renice)
  • Avvio o arresto della maggior parte dei servizi
  • Configurazione del kernel (ad es. Regolazione della swappiness)
  • Regolazione delle quote del filesystem
  • Scrivere su dischi "completi" (la maggior parte dei filesystem riserva spazio per l'utente root)
  • Esecuzione di azioni come altri utenti

4
Gli utenti non root "che cambiano le priorità del processo" possono cambiare le cose, per essere più gentili. L'unica cosa che non possono fare è essere meno carini.
Braiam,

1
So che questo elenco non è completo, ma ritengo che un compito molto importante che solo i super utenti possano fare sia impersonare - o semplicemente accedere come - altri utenti.
phihag,

Ho modificato il punto elenco sulle priorità del processo e ho aggiunto "Esecuzione di azioni come altri utenti". Speriamo che con tempo e commenti sufficienti, questo elenco diventerà più completo.
DopeGhoti,

0

Penso che sia conforme all'identità dell'utente per verificare le autorizzazioni, non secondo l'ordine di divisione delle autorizzazioni. File e utenti sono privilegiati e i comandi non devono essere divisi.


3
Non intendo sembrare scortese, e capisco che l'inglese potrebbe non essere la tua prima lingua, ma non capisco affatto questa risposta, come quello che sta persino cercando di dire. "accordo" significa "accordo" o "conformità"; Non riesco a vedere come può essere utilizzato con "identità dell'utente". Cosa intendi con "ordine per dividere le autorizzazioni"? "divide" significa "separare". Di chi "ordina"? In che modo i file vengono "privilegiati" quando non sono qualcosa che può agire per utilizzare qualsiasi privilegio? Immagino di poter capire "i comandi non devono essere divisi" nel contesto di questa domanda, ma è tutto. Così com'è, sembra non analizzabile.
JoL

@JoL Penso che "l'ordine" sia un errore di traduzione e dovrebbe essere "il comando", che consente una diversa analisi di quella frase. Un po 'stranamente formulato per usare il più possibile ciò che è in questa risposta: "Penso che sia in accordo con il modo in cui viene utilizzata l'identità dell'utente per verificare le autorizzazioni che le autorizzazioni non sono divise in base al comando. I privilegi riguardano file e utenti, dovrebbero esserci non essere diviso per i comandi. " Questo non è ancora troppo chiaro, ma ha un po 'più senso per me che per te. Spero che il mio commento aiuti qualcuno a comprendere appieno questa risposta e a modificarla in forma
hvd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.