Quando fallisce chmod?


8

In quali circostanze chmodfallirà?

Ho guardato la pagina man ma specifica solo l'uso e non entra nei dettagli su quali circostanze non funzionerà.

Suppongo chmodfunzionerà se:

  • sei root
  • possiedi il file di destinazione (e stai impostando un bit in modalità banale, cioè non un po 'appiccicoso, altri)

Gli utenti possono utilizzare chmodper modificare le autorizzazioni su un file per cui hanno accesso al gruppo? È legato all'accesso in lettura / scrittura?


2
Fallirà se l'inode non può essere modificato, ad es. Il filesystem è di sola lettura.
Giordania,

Risposte:


3

Solo il proprietario del file o l'utente root può modificare le autorizzazioni di un file. Le autorizzazioni correnti sul file o sulla sua directory padre sono irrilevanti¹. Questo è specificato in POSIX :

L'applicazione deve garantire che l'ID utente effettivo del processo corrisponda al proprietario del file o che il processo disponga dei privilegi appropriati per farlo.

Nella maggior parte dei computer, "privilegi appropriati" significa eseguire come root. Se queste condizioni non vengono soddisfatte, di chmodsolito fallisce EPERM, sebbene siano consentiti altri comportamenti come l'interruzione del programma a causa di una violazione della sicurezza.

Inoltre, alcune varianti di unix hanno modi specifici di sistema per autorizzare o vietare chmod. Ad esempio, Linux ha una capacità ( CAP_FOWNER) che consente ai processi di modificare le autorizzazioni di un file e altri metadati indipendentemente dal proprietario.

Esistono altri motivi per cui chmodpotrebbe non riuscire anche se il file esiste, è accessibile e ha il proprietario appropriato. Quelli comuni includono un filesystem di sola lettura o un filesystem che non supporta autorizzazioni come FAT. Quelli meno comuni includono restrizioni specifiche del sistema come l' attributo immutabile sul filesystem ext2 di Linux e sui successori.

¹ Tranne per il fatto che il processo in esecuzione chmoddeve essere in grado di accedere al file, quindi deve disporre dell'autorizzazione di esecuzione sulla directory contenente il file e su qualsiasi altra directory che attraversa per farlo.


2

I dettagli desiderati si trovano nella pagina del manuale per la chiamata di sistema chmod (). Invece di man chmodusare man 2 chmod. man chattre man 2 setxattrti interesserà anche; gli attributi di file impostati da chattr / setxattr () aumentano il comportamento delle autorizzazioni Unix tradizionali impostate da chmod.


Ci proverò quando uscirò dal lavoro.
Abbraccio

1

Secondo lo standard UNIX, "L'ID utente effettivo del processo deve corrispondere al proprietario del file o il processo deve disporre dei privilegi appropriati per eseguire questa operazione."

La parte relativa ai privilegi appropriati richiede alcune spiegazioni. Sui sistemi tradizionali, chmod è consentito su tutti i file quando l'UID effettivo (su Linux l'UID del filesystem, ma vedi sotto) del processo è 0 [ovvero root].

Linux ha un sistema chiamato capacità e il CAP_FOWNERbit controlla la capacità di usare chmodsu tutti i file. Per impostazione predefinita, tutte le funzionalità sono concesse quando una execve()chiamata crea un processo di root (eseguendo un binario setuid o quando l'UID reale è 0) o quando l'UID effettivo è impostato su 0 (e rimosso quando è impostato su un valore diverso da zero) e un set di funzionalità tra cui CAP_FOWNERsono abilitate quando l'UID del filesystem è impostato su 0 (e disabilitato quando è impostato su un valore diverso da zero). Leggi la manpage per maggiori dettagli.

Hai citato il bit appiccicoso, ma hai omesso il fatto che anche gli utenti potrebbero non impostare il bit setgid su un file quando non fanno parte del gruppo assegnato al file. Il bit setuid o setgid può anche essere ignorato in ulteriori circostanze definite dall'implementazione.


0

Gli utenti possono utilizzare chmod per modificare le autorizzazioni su un file per cui hanno accesso al gruppo?

Perché non provi a vedere?

$ touch foo
$ sudo install -o root -g $(id -gn) -m660 foo bar
$ ls -la bar
-rw-rw----  1 root  staff  0 Oct 21 21:33 bar
$ chmod g-w bar
chmod: bar: Operation not permitted
$ chmod g+x bar
chmod: bar: Operation not permitted

L'ho cercato, ma questo è legato alla sicurezza e non voglio perdere accidentalmente un caso limite.
Wug

Se sei preoccupato per un caso limite, puoi (almeno per ridurre al minimo i rischi) fare il chmod, e quindi controllare le autorizzazioni su di esso. Se ti senti paranoico, fallo fsyncprima di controllare.
nanofarad,
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.