GNU/Linux >> Linux Esercitazione >  >> Linux

Crea e configura le directory setgid per la collaborazione – Preparazione dell'obiettivo RHCSA

I permessi e i diritti del filesystem GNU/Linux sono alla base della sicurezza del sistema e uno dei suoi principi è la netta separazione dei diritti su file e cartelle. In un ambiente fortemente multiutente, come il server di una scuola, i diritti sui file impediscono a un utente per impostazione predefinita di eliminare o sovrascrivere accidentalmente i documenti di un altro. Tuttavia, ci sono casi d'uso in cui più utenti devono accedere (leggere, scrivere e persino eliminare) i file di altri utenti, ad esempio nel server della scuola sopra menzionato, dove gli studenti lavorano allo stesso progetto. In questa sezione della preparazione all'esame RHCSA impareremo come creare un ambiente per tale collaborazione, usando la tecnica setgid (set groupID). Tieni presente che mentre eseguiamo questi passaggi su un sistema operativo recente, il setgid non è una novità e lo troverai in tutte le distribuzioni.

In questo tutorial imparerai:

  • Come aggiungere utenti a un gruppo supplementare
  • Come usare set-GID su una directory
  • Come verificare la corretta proprietà all'interno della directory set-GID
  • Come utilizzare la directory speciale come membro del gruppo

Abilitazione della collaborazione con la directory setgid.

Requisiti e convenzioni software utilizzati

Requisiti software e convenzioni della riga di comando Linux
Categoria Requisiti, convenzioni o versione del software utilizzata
Sistema Red Hat Enterprise Linux 8
Software GNU Coreutils 8.30
Altro Accesso privilegiato al tuo sistema Linux come root o tramite sudo comando.
Convenzioni # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando sudo comando
$ – richiede che i comandi linux dati vengano eseguiti come un normale utente non privilegiato

Il caso d'uso

Per dimostrare l'uso di setgid, abbiamo un server virtuale e su di esso dobbiamo creare un gruppo di utenti, aggiungere membri e impostare una directory a cui entrambi hanno accesso. Finora questa è solo una
questione di impostazioni dei permessi. Il trucco sarà aggiungere il setgid alla directory, quindi i file creati all'interno della directory avranno il gruppo proprietario della directory padre. Poiché il gruppo avrà i permessi di lettura e scrittura all'interno della directory, tutti i membri del gruppo possono leggere e scrivere i file, senza la necessità dell'appartenenza al gruppo di impostazioni dell'utente originale in modo esplicito.

Configurazione di base

Per prima cosa creiamo gli oggetti necessari. Creiamo la directory del progetto:

# mkdir -p /student_projects/rocket_science

E i nostri due utenti, sarah e john , utilizzando il comando useradd:

# useradd john
# useradd sarah

Abbiamo anche bisogno di creare un gruppo di utenti che consenta la collaborazione tra i suoi membri:

# groupadd rocketengineers

Quindi impostiamo questo gruppo come proprietario della directory del progetto, in modo ricorsivo:

# chown -R :rocketengineers /student_projects/rocket_science

Successivamente, aggiungiamo i nostri utenti a rocketengineers gruppo:

# usermod -a -G rocketengineers john
# usermod -a -G rocketengineers sarah

Abbiamo aggiunto il gruppo come gruppo secondario. Per i dettagli sui gruppi, consulta il tutorial sull'appartenenza al gruppo.

Per completare la configurazione di base, dobbiamo aggiungere l'autorizzazione completa al gruppo nella directory:

# chmod 770 /student_projects/rocket_science

E con questo, la nostra configurazione di base è completa. Entrambi gli utenti possono scrivere nella directory e i file creati saranno di proprietà dell'utente e il gruppo proprietario sarà il gruppo principale dell'utente. Possiamo controllare le
autorizzazioni che abbiamo impostato con stat :

# stat /student_projects/rocket_science
  File: /student_projects/rocket_science
  Size: 6         	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 17789698    Links: 2
Access: (0770/drwxrwx---)  Uid: (    0/    root)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:29:57.500453785 +0200
Modify: 2020-10-04 18:29:47.650278956 +0200
Change: 2020-10-04 18:30:34.809115974 +0200
 Birth: -

Gli identificatori molto probabilmente differiranno. Possiamo vedere che il proprietario della directory è root , mentre la proprietà del gruppo appartiene ai rocketengineers gruppo. Ciò consente a entrambi i membri
del gruppo di leggere e scrivere da e nella directory.

Collaborazione senza setgid

Diciamo che i due utenti vorrebbero condividere alcune note con questa configurazione. sarah ha ottenuto un file di testo con dati importanti nella sua home directory:

$ id
uid=1002(sarah) gid=1002(sarah) groups=1002(sarah),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ cat general_project.notes 
text

Per condividerlo con john , copia il file nella directory condivisa (quindi c'è ancora un backup nella sua home directory, per ogni evenienza):

$ cp general_project.notes /student_projects/rocket_science/

Controllando le proprietà, possiamo vedere che il proprietario è effettivamente sarah , e anche il gruppo che possiede il file è sarah , il gruppo principale dell'utente:

$ stat /student_projects/rocket_science/general_project.notes
  File: /student_projects/rocket_science/general_project.notes
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18019570    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1002/   sarah)   Gid: ( 1002/   sarah)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:31:30.229099624 +0200
Modify: 2020-10-04 18:31:30.229099624 +0200
Change: 2020-10-04 18:31:30.229099624 +0200
 Birth: -

Passiamo a john . Ha anche alcune scoperte sul progetto e vorrebbe condividerle.

$ id
uid=1001(john) gid=1001(john) groups=1001(john),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ echo "mytext" > rocket.txt
$ cp rocket.txt /student_projects/rocket_science/

Si applicano le stesse autorizzazioni, il file appena copiato sarà di proprietà di john :

$ stat /student_projects/rocket_science/rocket.txt 
  File: /student_projects/rocket_science/rocket.txt
  Size: 7         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18356857    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    john)   Gid: ( 1001/    john)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:32:24.433075710 +0200
Modify: 2020-10-04 18:32:24.433075710 +0200
Change: 2020-10-04 18:32:24.433075710 +0200
 Birth: -

Poiché entrambi sono membri dei rocketengineers gruppo, possono leggere il contenuto della directory e, poiché entrambe le loro note sono leggibili da tutto il mondo, possono leggere i rispettivi
file.

$ cat /student_projects/rocket_science/general_project.notes 
text

Il problema sorge quando john vorrei aggiungere alcune note su sarah file di dati importanti:

$ echo "some comments" >>  /student_projects/rocket_science/general_project.notes 
-bash: /student_projects/rocket_science/general_project.notes: Permission denied

In effetti, non possono lavorare sui file dell'altro, solo leggerli. Ora sarah potrebbe impostare la proprietà di gruppo del suo file sul loro gruppo comune, risolvendo così il problema. Ma perché ne avrebbe bisogno
con ogni file, se avessimo il setgid per aiutarci?

Impostazione del flag setgid

Per impostare il flag setgid, utilizziamo chmod :

# chmod g+s /student_projects/rocket_science

Nota il flag "s" nelle autorizzazioni grop (impostato in grassetto per motivi di chiarezza):

# stat /student_projects/rocket_science
  File: /student_projects/rocket_science
  Size: 53        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 17789698    Links: 2
Access: (2770/drwxrws---)  Uid: (    0/    root)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:32:29.389167450 +0200
Modify: 2020-10-04 18:32:24.433075710 +0200
Change: 2020-10-04 18:34:04.449927062 +0200
 Birth: -

Test e verifica dei risultati

Ora sarah può condividere i suoi nuovi appunti di ricerca:

$ cat findings.txt 
rocket needs wings
$ cp findings.txt /student_projects/rocket_science/
$ stat /student_projects/rocket_science/findings.txt 
  File: /student_projects/rocket_science/findings.txt
  Size: 19        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18999000    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1002/   sarah)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:35:15.195236593 +0200
Modify: 2020-10-04 18:35:15.195236593 +0200
Change: 2020-10-04 18:35:15.195236593 +0200
 Birth: -

La proprietà del gruppo è impostata sul gruppo della directory principale a causa del setgid a posto. Ciò causerà john per poter commentare le nuove note di ricerca:

$ echo "verified!" >> /student_projects/rocket_science/findings.txt
$ cat /student_projects/rocket_science/findings.txt 
rocket needs wings
verified!

E con ciò abbiamo completato il nostro obiettivo di creare una directory di collaborazione per un gruppo di utenti. Potremmo farlo per altri gruppi con il metodo sopra, separando i dati di diversi progetti in base a
autorizzazioni, in modo che un membro di un gruppo non possa eliminare accidentalmente i dati di un altro progetto.

# Titolo video:lavorare in una directory setgid
# Descrizione video:modificare i file di altri utenti in una directory setgid
# Nome file video:rhcsa_setgid.webm

Lavorare in una directory setgid – Modifica dei file di altri utenti in una directory setgid

Conclusione

Sotto GNU/Linux rigorosi permessi e diritti di proprietà, setgid è un modo semplice per consentire agli utenti del sistema di interagire tra loro i file in modo sicuro, consentendo il lavoro di gruppo
senza l'uso di una soluzione esterna pesante o rovinando i gruppi e le autorizzazioni iniziali dell'utente. Nell'esempio precedente, non era necessario toccare le home directory degli utenti o le loro autorizzazioni a livello di sistema
, abbiamo semplicemente creato un luogo speciale in cui possono condividere ciò di cui hanno bisogno.

Esercizi

  1. Crea più directory di progetto con gruppi diversi. Verifica se i membri di un progetto possono leggere i file di un altro progetto.
  2. Crea una directory multiprogetto, a cui ogni membro del progetto ha accesso.
  3. Crea un progetto incrociato sola lettura directory, dove solo un membro del progetto (gestione del progetto) può scrivere, ma possono leggere i membri di tutti i progetti.

Linux
  1. Creare un file come utente e gruppo diversi?

  2. Perché è consigliabile creare un gruppo e un utente per alcune applicazioni?

  3. Crea una cartella dedicata per ogni file zip in una directory ed estrai i file zip

  4. Crea un file zip e ignora la struttura della directory

  5. Come posso forzare il gruppo e le autorizzazioni per i file creati all'interno di una directory specifica?

Configura i sistemi per montare i file system all'avvio in base all'ID univoco universale (UUID) o all'etichetta - Preparazione dell'obiettivo RHCSA

Obiettivi di studio per la guida all'esame e alla preparazione RHCSA

Aggiungere nuove partizioni, volumi logici e scambiare a un sistema in modo non distruttivo – Preparazione dell'obiettivo RHCSA

Come creare directory in Linux (comando mkdir)

Crea directory home per utenti esistenti in Linux

Crea e configura un utente in MSSQL