Precedenza dell'utente e del proprietario del gruppo nelle autorizzazioni dei file


20

Mi sono appena imbattuto in qualcosa di inaspettato (per me) per quanto riguarda le autorizzazioni dei file su Linux (Arch Linux). Fondamentalmente ho:

  • userX nel groupX
  • fileX userX:groupX ---rwx----

Cosa mi confonde: non riesco a eseguire alcuna azione ( rwx) su fileX. È giusto? Qualcuno può confermare che questo è davvero il comportamento previsto?

Le uniche azioni che posso eseguire sono mve rmperché ho i permessi di scrittura sulla directory principale.

Il fatto è che ho sempre pensato che queste autorizzazioni collassassero l'una sull'altra, a partire da quella più generale (altro -> gruppo -> utente). In altre parole, se a o=rwxchi importa quali sono le convinzioni per il gruppo e l'utente? Apparentemente non è così, ma per me non ha molto senso; sembra controintuitivo. L'unica cosa in cui questo approccio sembra essere utile è escludere facilmente una persona / un gruppo molto specifico, che non sembra un modo intelligente per affrontarlo (imho). Inoltre, il proprietario (e il gruppo?) Dovrebbe essere in grado chmodcomunque di farlo ? Qualche idea in merito?


sei decisamente in groupX?
exussum,

sì, sicuramente; controllato efficace gid conid
alex

Risposte:


24

Il fatto è che ho sempre pensato che queste autorizzazioni collassassero l'una sull'altra, a partire da quella più generale (altro -> gruppo -> utente).

In tal caso, le autorizzazioni "altro" si applicherebbero a tutti.

In altre parole, se o = rwx chi se ne frega di quali siano le convinzioni per gruppo e utente?

È diverso dalla frase precedente. Qui stai sottintendendo che le autorizzazioni sono o messe insieme, ad esempio che userX ha l'autorizzazione di lettura se userX possiede il file e il file è leggibile dall'utente o se un gruppo a cui appartiene userX possiede il file e il file è gruppo leggibile o se il file è leggibile in altro modo. Ma non è così che funziona. In realtà, o=rwxsignifica che le rwxautorizzazioni si applicano ad altri, ma non dice nulla su entità che non sono altre.

Innanzitutto, non importa direttamente a quali gruppi appartiene un utente. Il kernel non ha una nozione di utenti appartenenti a gruppi. Ciò che il kernel mantiene è, per ogni processo, un ID utente (l' UID effettivo ) e un elenco di ID gruppo (il GID effettivo e i GID supplementari). I gruppi sono determinati al momento dell'accesso, tramite il processo di accesso: è il processo di accesso che legge il database del gruppo (ad es /etc/group.). Gli ID utente e di gruppo sono ereditati da processi figlio¹.

Quando un processo tenta di aprire un file, con le autorizzazioni Unix tradizionali:

  • Se l'utente proprietario del file è l'UID effettivo del processo, vengono utilizzati i bit di autorizzazione dell'utente.
  • Altrimenti, se il gruppo proprietario del file è il GID effettivo del processo o uno degli ID di gruppo supplementare del processo, vengono utilizzati i bit di autorizzazione del gruppo.
  • Altrimenti, vengono utilizzati gli altri bit di autorizzazione.

Viene mai utilizzato un solo set di bit rwx. L'utente ha la precedenza sul gruppo che ha la precedenza sull'altro. Quando sono presenti elenchi di controllo di accesso , l'algoritmo sopra descritto è generalizzato:

  • Se nel file è presente un ACL per l'UID effettivo del processo, viene utilizzato per determinare se l'accesso è concesso.
  • Altrimenti, se nel file è presente un ACL per il GID effettivo del processo o uno degli ID di gruppo supplementare del processo, vengono utilizzati i bit di autorizzazione del gruppo.
  • Altrimenti, vengono utilizzati gli altri bit di autorizzazione.

Vedi anche Precedenza di ACLS quando un utente appartiene a più gruppi per maggiori dettagli su come vengono utilizzate le voci ACL, incluso l'effetto della maschera.

-rw----r-- alice internsIndica quindi un file che può essere letto e scritto da Alice e che può essere letto da tutti gli altri utenti ad eccezione degli stagisti. Un file con autorizzazioni e proprietà ----rwx--- alice internsè accessibile solo agli stagisti ad eccezione di Alice (che sia o meno stagista). Poiché Alice può chiamare chmodper modificare le autorizzazioni, ciò non fornisce alcuna sicurezza; è un caso limite. Sui sistemi con ACL, il meccanismo generalizzato consente di rimuovere autorizzazioni da utenti specifici o gruppi specifici, che a volte è utile.

L'utilizzo di un singolo set di bit, anziché ordinare tutti i bit per ciascuna azione (lettura, scrittura, esecuzione), presenta numerosi vantaggi:

  • Ha l'effetto utile di consentire la rimozione delle autorizzazioni da un insieme di utenti o gruppi, sui sistemi con ACL. Sui sistemi senza ACL, le autorizzazioni possono essere rimosse da un gruppo.
  • È più semplice da implementare: controlla una serie di bit, piuttosto che combinare più serie di bit insieme.
  • Analizzare le autorizzazioni di un file è più semplice, poiché sono coinvolte meno operazioni.

¹ Possono cambiare quando viene eseguito un processo setuid o setgid. Questo non è correlato al problema in questione.


beh ... "collassare" volevo dire la stessa cosa, un'operazione OR :)
alex

Grazie per il tuo tempo; +1 per la risposta molto dettagliata e piuttosto tecnica
alex

Bella risposta. Ma ho una domanda sui tuoi punti elenco finali: è davvero più semplice da implementare e analizzare? Il controllo dei permessi non si limiterebbe a OR insieme i permessi come OP pensava fosse il caso?
gardenhead

Questo caso limite mi sembra ancora sciocco: (userX in groupX) + (userZ in groupX). Hai un utente fileX: groupX --- rwx ----. Ora il creatore di cartelle originale userX non può accedere a fileX .. ma userZ può farlo. Ed entrambi fanno parte dello stesso gruppo. Davvero poco intuitivo.
alexfvolk,

4

Le autorizzazioni più specifiche hanno la precedenza su quelle meno specifiche.

userX in groupX

fileX userX: groupX --- rwx ----

Poiché sei il proprietario del file, ti verranno concesse solo le autorizzazioni del proprietario. Il proprietario non ha autorizzazioni. Pertanto, non puoi fare nulla. Se non fossi stato il proprietario del file e un membro del gruppo, sarebbero state applicate le autorizzazioni di gruppo.

Si prega di leggere questa sezione della pagina wiki

https://en.wikipedia.org/wiki/File_system_permissions#Classes


2

-rwxrw---- significa che il proprietario ha le autorizzazioni di lettura, scrittura ed esecuzione, il gruppo ha letto e scritto e altri non hanno autorizzazioni.

Le autorizzazioni fornite forniscono al gruppo le autorizzazioni "groupX" per leggere, scrivere ed eseguire il file. Se sei un membro del gruppo "groupX" ma non sei il proprietario del file, queste autorizzazioni verranno applicate a te.

In questo caso, suppongo che tu sia davvero il proprietario del file. Verranno quindi applicate solo le autorizzazioni impostate per il proprietario. Ovviamente il proprietario è in grado di sovrascrivere o modificare le autorizzazioni sul file. Il gruppo, tuttavia, non può farlo. Ad esempio vim ti chiederà di confermare se stai scrivendo su un file per il quale non hai i permessi di scrittura ma di cui sei il proprietario.

Di solito leggo i permessi da sinistra a destra. Sono il proprietario? Se sì, si applicano le autorizzazioni del proprietario. Altrimenti; sono un membro del gruppo? Se sì, si applicano le autorizzazioni di gruppo. In caso contrario, le autorizzazioni per "Altro" si applicano a me.

In alcuni casi è utile essere il proprietario di un file ma non disporre delle autorizzazioni di scrittura. Ti protegge dall'eliminazione o dalla modifica accidentale del file. Personalmente ho impostato l'autorizzazione 400 su tutti i miei file modello, solo per assicurarmi di non modificarli per caso. Lo stesso vale per le autorizzazioni di esecuzione.


1
Credo che tu abbia frainteso la domanda. Quando l'OP ha detto che le autorizzazioni "collassano" come Altri-> Gruppo-> Utente, penso che intendessero dire che quando si determina se la tua azione è permessa, vengono prima controllate le autorizzazioni "Altri", poi "Raggruppa" e infine (se tutto il resto fallisce) "Utente".
Joseph R.,

@JosephR. sì, ecco cosa intendevo :)
alex

Oh, mi scuso. Rimuoverò quella parte. C'è qualcosa di utile nella risposta?
Arnefm,

Nota: dovresti modificare un po 'la tua risposta e rimuovere (o riformulare) il secondo paragrafo in quanto è un po' "oscuro" (non è abbastanza chiaro, in qualche modo contraddice il comportamento che ho descritto)
alex

Ripensandoci, avrei potuto essere veloce ad accettare la risposta. Mi dispiace per quello. Quindi stai dicendo che a volte è utile non avere i permessi di scrittura in modo da non modificare accidentalmente alcuni file importanti; ma a che serve quando gli altri hanno le autorizzazioni complete? (quindi ... ti verrà impedito di fare errori ma non altri )
alex

0

Sono stato in grado di aggiungere un utente a un gruppo, assegnare al gruppo le autorizzazioni per una directory (070) e quindi DOPO IL RIAVVIO è stato possibile accedere alla cartella.

Crea gruppo: sudo groupadd groupname

Aggiungi utente al gruppo: sudo gpasswd -a username nome gruppo

Assicurarsi che l'intera directory sia sotto la corretta proprietà del gruppo (deve essere il membro corrente del nome gruppo per eseguire): sudo chgrp -R nome gruppo directory_path /

Dare solo il gruppo rwx per la cartella (potrebbe essere solo rw, regolare secondo necessità): sudo chmod -R 070 directory_path

Dopo aver eseguito quanto sopra, assicurarsi di disconnettersi e riconnettersi. Se il problema persiste, riavviare la macchina. Fare questo ha funzionato per me.

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.