GNU/Linux >> Linux Esercitazione >  >> Linux

Il concetto di Linux Sticky Bit spiegato con esempi

Pensa a uno scenario in cui crei una directory Linux che può essere utilizzata da tutti gli utenti del sistema Linux per la creazione di file. Gli utenti possono creare, eliminare o rinominare i file a loro piacimento in questa directory. Per tutti coloro che pensano che perché dovrebbe essere creata una directory del genere? Esiste, ad esempio, la directory /tmp nel sistema Linux che può essere utilizzata da diversi utenti Linux per creare file temporanei.

Ora, cosa succede se un utente elimina (o rinomina) accidentalmente o deliberatamente un file creato da qualche altro utente in questa directory?

Bene, per evitare questo tipo di problemi, viene utilizzato il concetto di bit appiccicoso.

Un bit permanente è un bit di autorizzazione impostato su un file o una directory che consente solo al proprietario del file/directory o all'utente root di eliminare o rinominare il file. A nessun altro utente vengono concessi i privilegi per eliminare il file creato da un altro utente.

Cronologia di Sticky Bit

Prima di spiegare ulteriormente il bit appiccicoso, discutiamo la storia del bit appiccicoso poiché vale la pena discutere di queste informazioni.

Il bit appiccicoso non è un nuovo concetto. In effetti, è stato introdotto per la prima volta nel 1974 nel sistema operativo Unix. Lo scopo del bit appiccicoso allora era diverso. È stato introdotto per ridurre al minimo il ritardo introdotto ogni volta che viene eseguito un programma.

Quando un programma viene eseguito, ci vuole tempo per caricare il programma in memoria prima che l'utente possa effettivamente iniziare a usarlo. Se un programma, ad esempio un editor, viene utilizzato frequentemente dagli utenti, allora il ritardo di avvio era un sovraccarico.

Per migliorare questo ritardo, è stato introdotto lo sticky bit. Il sistema operativo ha verificato che se il bit sticky su un eseguibile è attivo, il segmento di testo dell'eseguibile è stato mantenuto nello spazio di scambio. Ciò ha semplificato il caricamento dell'eseguibile nella RAM quando il programma veniva eseguito di nuovo, riducendo così al minimo il ritardo.

Sebbene questo metodo si sia rivelato efficace nel ridurre al minimo il ritardo di avvio, è emerso un grosso problema a causa di questa operazione. Il problema era che se una sorta di patch veniva applicata all'eseguibile come correzione di un bug o come nuova funzionalità, dovevano essere eseguiti i seguenti passaggi:

  • Prima rimuovi lo sticky bit dall'eseguibile
  • Ora, esegui l'eseguibile ed esci in modo che il segmento di testo esistente dallo scambio venga svuotato
  • Ora, imposta di nuovo lo sticky bit sull'eseguibile ed esegui nuovamente l'eseguibile in modo che il nuovo segmento di testo sia archiviato nella memoria di scambio

I passaggi precedenti erano necessari affinché il programma riflettesse le nuove funzionalità o correzioni di bug aggiunte all'eseguibile.

Quindi questo era uno dei problemi principali. Inoltre, con l'evoluzione della tecnologia, si sono evolute tecniche di accesso veloce alla memoria che hanno reso obsoleto il requisito di sticky bit per questo scopo.

Esempi di bit appiccicosi

In questa sezione, discuteremo come impostare e disimpostare il bit permanente utilizzando alcuni esempi.

Un esempio di base

Crea una directory e fornisci a tutti gli utenti l'accesso in lettura-scrittura-esecuzione ad essa:

# mkdir allAccess

# chmod 777 allAccess/

# ls -ld allAccess/
drwxrwxrwx 2 himanshu himanshu 4096 Oct 24 15:43 allAccess/

Quindi vediamo che viene creata una directory denominata "allAccess" e l'accesso in lettura-scrittura-esecuzione a questa directory viene fornito a tutti gli utenti tramite il comando chmod.

Ora, crea più file in questa directory (con utenti diversi) in modo che tutti gli utenti abbiano accesso in lettura-scrittura-esecuzione.

Ad esempio:

# ls -l allAccess/
total 0
-rwxrwxrwx 1 himanshu himanshu 0 Oct 24 15:48 user1
-rwxrwxrwx 1 guest    guest    0 Oct 24 16:11 user_file_0
-rwxrwxrwx 1 guest-2  guest-2  0 Oct 24 16:15 user_file_1

I file file_utente_0 e file_utente_1 sono creati da utenti diversi ma hanno accesso in lettura-scrittura-esecuzione per tutti gli utenti. Ciò significa che l'utente "ospite" può eliminare o rinominare il file creato dall'utente "ospite-2".

Per evitare ciò, è possibile impostare sticky bit nella directory allAccess.

Ora, attiva lo sticky bit sulla directory usando il flag +t del comando chmod.

# chmod +t allAccess/

# ls -ld allAccess/
drwxrwxrwt 2 himanshu himanshu 4096 Oct 24 16:19 allAccess/

Come si può osservare, nei bit di autorizzazione della directory viene introdotto un bit di autorizzazione 't'.

Ora, se l'utente 'guest' tenta di rinominare il file 'user_file_1', ecco cosa succede:

$ mv /home/himanshu/allAccess/user_file_1 /home/himanshu/allAccess/user_file_0
mv: cannot move `/home/himanshu/allAccess/user_file_1' to `/home/himanshu/allAccess/user_file_0': Operation not permitted

Quindi vediamo che l'operazione non era consentita.

Rimuovi il bit appiccicoso usando l'opzione -t

Il bit permanente può essere rimosso dai permessi di una directory tramite l'opzione -t del comando chmod.

Ecco un esempio :

# chmod -t allAccess/

# ls -ld allAccess/
drwxrwxrwx 2 himanshu himanshu 4096 Oct 24 16:19 allAccess/

Quindi vediamo che il bit di autorizzazione 't' viene rimosso dalla directory.

Sistemi operativi diversi si comportano in modo diverso con i bit permanenti, come spiegato in questo articolo di Wikipedia. Ad esempio, Linux cerca il bit permanente solo se un utente tenta di rinominare un file. Non controllerà il bit appiccicoso se un file viene eliminato.


Linux
  1. Comando di spegnimento di Linux spiegato con esempi

  2. Il comando nslookup Linux spiegato con esempi

  3. Comando Traceroute di Linux, spiegato con esempi

  4. comando whoami in Linux spiegato con esempi

  5. Spiegazione del comando Ping di Linux con esempi

Comando Bash Echo spiegato con esempi in Linux

Il comando Tr in Linux spiegato con esempi

w Comando spiegato con esempi in Linux

Wait Command in Linux spiegato con esempi pratici

Spiegazione del comando tee di Linux (con esempi)

Spiegazione del comando csplit di Linux (con esempi)