Perché sono stato in grado di eliminare un file di proprietà di root nella mia home directory senza essere root?


40

Così oggi stavo facendo un po 'di manutenzione sul mio server e ho notato che ero in grado di eliminare un file di proprietà di root nella mia directory home.

Sono stato in grado di riprodurre un campione:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

La mia domanda è: come sono riuscito a eliminare un file di proprietà di root e con autorizzazioni -rw-r--r--, mentre io non sono root?


6
È possibile rimuovere la voce nella directory che punta al file perché si dispone dell'accesso in scrittura alla directory. Non è possibile eliminare necessariamente il file; il file potrebbe avere un altro collegamento reale altrove.
user253751

2
Estensione divertente: puoi anche rinominare il file o crearne dei collegamenti.
Peter dice di reintegrare Monica il

11
Si prega di riconsiderare la vostra scelta per la risposta accettata, perché quello attuale è decisamente fuorviante: si sta non autorizzati a fare qualsiasi cosa per esso formica il contenuto al suo interno in base alle autorizzazioni della directory .
Cthulhu,

@Cthulhu Done! Grazie a tutti per tutti i commenti a queste domande e risposte, sicuramente molte informazioni utili qui!
Carl Bennett,

Risposte:


34

Le autorizzazioni, il contenuto e tutti gli attributi fanno parte dell'inode. Il nome è nella voce della directory. Le autorizzazioni non vengono ereditate in modo ricorsivo (tranne quando si utilizza l'impostazione predefinita negli ACL Posix).

Quando si elimina un file, internamente è sufficiente rimuovere un collegamento reale dalla voce della directory all'inode. Quando tutti gli hardlink vengono rimossi e l'inode non è in uso, il filesystem recupererà lo spazio. È necessario solo l'autorizzazione di scrittura sulla cartella, indipendentemente dalle autorizzazioni impostate sul file (ad eccezione dell'autorizzazione ext immutabile). Lo stesso per una cartella vuota.

Quando si elimina una cartella che non è vuota, è necessaria l'autorizzazione di scrittura per la cartella che si sta eliminando e il suo genitore.


1
Quindi le autorizzazioni sono sull'inode o le autorizzazioni sono sul collegamento all'inode, e sto solo rimuovendo quel collegamento (e quindi l'unico collegamento ad esso viene rimosso, quindi l'inode cessa di esistere)?
Carl Bennett,

3
Le autorizzazioni sono sull'inode. Ciò è facilmente verificabile creando un collegamento reale a un file, modificando le autorizzazioni su di esso e quindi controllando le autorizzazioni sull'originale.
Wouter Verhelst,

ma supponiamo che ci sia una directory e un file che appartengono entrambi a root, la directory si trova in una directory di proprietà dell'utente. Non saresti in grado di rimuoverli allora, giusto?
njzk2,

1
È un attributo specifico di ext2, ext3 ed ext4. Esempio: sudo touch test_file;sudo chattr +i test_file;rm -f test_filevedi:man chattr
Mircea Vutcovici,

1
L'attributo immutabile protegge un file per eventuali modifiche anche dalla radice.
Mircea Vutcovici,

19

Quando possiedi la directory ti è permesso di fare qualsiasi cosa e il contenuto al suo interno in base alle autorizzazioni della directory. Pertanto, pur non possedendo il file, è stato comunque possibile eliminarlo perché si disponeva dell'autorizzazione in lettura / scrittura per la directory in cui risiedeva il file.


46
Non esattamente. Ad esempio, OP non sarebbe in grado di modificare quel file di proprietà di root. Il fatto è che l'eliminazione di un file non è considerata un'operazione su file ma piuttosto su directory (rimuovendo il puntatore a un file) ed è per questo che le autorizzazioni sulla directory sono importanti.
Cthulhu,

1
@Cthulhu in modo da poter eliminare un file di proprietà di root e crearne uno nuovo con lo stesso nome dopo?
KDEx,

3
@Morgoroth sì, potresti, ma non sarebbe più lo stesso file. Per un altro esempio (forse più ovvio), non saresti in grado di leggere il file nella tua directory se appartenesse alla radice e solo il suo proprietario potrebbe leggerlo.
Cthulhu,

@inetknght Questo dovrebbe essere chiarito. Capisco che stai cercando di fare riferimento a manipolare i file stessi, come entità, ma non è chiaro. Non puoi modificarne il contenuto, ad esempio. E non menzioni gli attributi che possono superare le autorizzazioni della directory.
Mike S,

1
@captcha Questo perché viprima salva il file nella copia temporanea, quindi elimina il file originale e rinomina la copia nell'originale (o qualcosa del genere).
Cthulhu,
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.