Come funziona la parte adesiva?


148

SUID

Il bit appiccicoso applicato ai programmi eseguibili che segnalano il sistema per mantenere un'immagine del programma in memoria al termine dell'esecuzione del programma.

Ma non so che cosa è memorizzato. E come posso vederli, in questo caso.


Ecco un buon tutorial con esempi e spiegazioni funzionanti. La chiave per capirlo è il sistema ottale coinvolto. Tutorial Linux Sticky Bits con esempi lavorati .
CMP,

Risposte:


193

Questa è probabilmente una delle mie cose più fastidiose che la gente rovina continuamente. Il bit SUID / GUID e il bit sticky sono 2 cose completamente diverse.

Se lo fai man chmodpuoi leggere del SUID e dei foglietti adesivi. La pagina man è disponibile anche qui .

sfondo

estratto

Le lettere rwxXst selezionano i bit della modalità file per gli utenti interessati: leggi (r), scrivi (w), esegui (o cerca directory) (x), esegue / cerca solo se il file è una directory o ha già i permessi di esecuzione per alcuni utente (X), impostare l'ID utente o gruppo sull'esecuzione (i) , flag di cancellazione limitato o bit appiccicoso (t) .

SUID / GUID

Quello che la pagina man sopra sta cercando di dire è che la posizione che il bit x assume nel rwxrwxrwx per l'utente ottale (1 ° gruppo di rwx) e il gruppo ottale (2 ° gruppo di rwx) può assumere uno stato aggiuntivo in cui la x diventa una s. Quando ciò si verifica, questo file quando eseguito (se si tratta di un programma e non solo di uno script di shell) verrà eseguito con le autorizzazioni del proprietario o del gruppo del file.

Pertanto, se il file è di proprietà di root e il bit SUID è attivato, il programma verrà eseguito come root. Anche se lo esegui come utente normale. La stessa cosa vale per il bit GUID.

estratto

SETUID E SETGID BITS

chmod cancella il bit set-group-ID di un file normale se l'ID gruppo del file non corrisponde all'ID gruppo effettivo dell'utente o a uno degli ID gruppo supplementari dell'utente, a meno che l'utente non disponga dei privilegi appropriati. Ulteriori restrizioni possono far sì che i bit set-user-ID e set-group-ID di MODE o RFILE vengano ignorati. Questo comportamento dipende dalla politica e dalla funzionalità della chiamata di sistema chmod sottostante. In caso di dubbi, controllare il comportamento del sistema sottostante.

chmod conserva i bit set-user-ID e set-group-ID di una directory se non diversamente specificato. Puoi impostare o cancellare i bit con modalità simboliche come u + se gs, e puoi impostare (ma non cancellare) i bit con una modalità numerica.

Esempi SUID / GUID

no suid / guid - sono impostati solo i bit rwxr-xr-x .

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid e bit eseguibile dell'utente abilitato (lettere minuscole) - i bit rwsr-xrx sono impostati.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid abilitato e bit eseguibile disabilitato (S maiuscola) - i bit rwSr-xr-x sono impostati.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit eseguibile di guid & group abilitato (lettere minuscole) : vengono impostati i bit rwxr-sr-x .

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

guida abilitata e bit eseguibile disabilitato (S maiuscola) - i bit rwxr-Sr-x sono impostati.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

po 'appiccicoso

Il bit appiccicoso invece è indicato come t, ad esempio con la /tmpdirectory:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Questo bit avrebbe dovuto essere sempre chiamato "bit di eliminazione limitata" dato che è ciò che connota davvero. Quando questo bit di modalità è abilitato, crea una directory in modo tale che gli utenti possano eliminare solo i file e le directory al suo interno di cui sono proprietari.

estratto

BANDIERINA PER ELIMINAZIONE LIMITATA O MORSETTO ADESIVO

Il flag di cancellazione limitata o il sticky bit è un singolo bit, la cui interpretazione dipende dal tipo di file. Per le directory,
impedisce agli utenti non privilegiati di rimuovere o rinominare un file nella directory a meno che non possiedano il file o la directory; questo viene chiamato flag di eliminazione limitata per la directory e si trova comunemente nelle directory scrivibili dal mondo come / tmp. Per i file regolari su alcuni sistemi più vecchi, il bit salva l'immagine di testo del programma sul dispositivo di scambio in modo che si carichi più rapidamente durante l'esecuzione; questo si chiama bit appiccicoso.


43
In realtà, il sticky-bit poteva essere precedentemente applicato agli eseguibili, il che faceva sì che questi rimanessero in scambio dopo il primo caricamento. Ciò potrebbe risparmiare un sacco di inutili operazioni su disco / rete (NFS) e CPU per i programmi che erano molto utilizzati. Tuttavia, né Linux né la maggior parte (tutti?) Dei sistemi Unix lo supportano più (è stato rimosso dal kernel). È "appiccicoso", perché l'eseguibile è bloccato in swap. Inoltre, è stato utilizzato per le directory come descritto.
Baard Kopperud,

4
In realtà "molto usato o molto grande" sarebbe una descrizione migliore. Ricorda che il mio college aveva il browser web Netscape come "appiccicoso" sul proprio computer HP-UX nel 1995. Quindi piccoli programmi che venivano usati molto spesso (ad es. Comandi di sistema eseguiti frequentemente da cron) e programmi di grandi dimensioni (ad es. Netscape) erano i primi candidati ad essere "appiccicosi". In entrambi i casi, ricaricarli costantemente dal disco / NFS sarebbe dispendioso.
Baard Kopperud,

8
I programmi a sticky bit dovevano rimanere residenti nella RAM, non nello scambio (il caricamento di un'immagine da un file di scambio non è molto più veloce del caricamento da un disco del filesystem). Era destinato a comandi essenziali a livello di sistema operativo come ls. Ovviamente, solo il superutente potrebbe impostare il bit appiccicoso su un file. È diventato meno importante dopo l'introduzione della memoria virtuale e delle librerie condivise, soprattutto quando i cercapersone sono diventati più intelligenti e possono decidere dinamicamente quali pagine mantenere residenti.
alexis,

4
E poiché la proprietà sticky non aveva senso per una directory, lo stesso bit della maschera dei permessi è stato successivamente interpretato per modificare la semantica tradizionale di creazione di file per le directory.
alexis,

5
@alexis: Inizialmente, i programmi a bit appiccicoso venivano mantenuti nello spazio di scambio. Questo è stato molto più veloce della lettura dal filesystem perché la lettura delle immagini dei file di scambio era settori contigui e quindi poteva essere letta principalmente in modo asincrono. Con i primi filesystem, non vi erano "lunghezze di esecuzione" settoriali e la maggior parte dei primi driver di filesystem leggevano un settore alla volta anche se i settori erano consecutivi. Il risultato su un PDP-40 era che i programmi appiccicosi sembravano caricarsi all'istante mentre i programmi non appiccicosi prendevano il solito secondo o due. Penso che abbiamo solo edappiccicoso.
Wallyk,

8

"Il bit appiccicoso applicato ai programmi eseguibili che segnalano il sistema per mantenere un'immagine del programma in memoria al termine dell'esecuzione del programma."

Penso che siano informazioni piuttosto obsolete, oggi la maggior parte degli Unix moderni lo ignora. In Linux, il bit appiccicoso è rilevante solo per le directory. Vedi qui e l' articolo abbastanza informativo di Wikipedia .

Ad ogni modo, in quel vecchio comportamento l'immagine (solo il "codice", non i dati) veniva mantenuta solo nella memoria virtuale, scambiata normalmente, non nella memoria reale, in modo da eseguirla più velocemente la volta successiva.


3

Cosa sono i pezzi appiccicosi?

Un bit permanente è un bit di autorizzazione impostato su una directory che consente solo al proprietario del file all'interno di quella directory o all'utente root di eliminare o rinominare il file. Nessun altro utente dispone dei privilegi necessari per eliminare il file creato da un altro utente.

Questa è una misura di sicurezza per evitare la cancellazione delle cartelle critiche e del loro contenuto (sottodirectory e file), sebbene altri utenti dispongano delle autorizzazioni complete.



7
@AB Mi sembra abbastanza preciso, quasi al punto di parafrasare l'inizio dell'articolo di Wikpedia che citi. Che cosa c'è che non va?
roaima,

Direi che la risposta è incompleta. "Sticky" indica anche che l'eseguibile verrebbe mantenuto nello spazio di swap per farlo funzionare più velocemente. Ora, questa è storia antica, ma nei driver dei file system più vecchi era solito leggere un settore alla volta anche se i settori erano consecutivi. Ciò ha reso i file eseguibili non appiccicosi lenti, la viscosità aveva molto senso in quel momento.
GhostCode
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.