L'utente può eliminare i file di proprietà di root nella propria directory home o Quali sono le regole che controllano la modifica dei file all'interno delle directory scrivibili dall'utente?


0

Prova questo codice

root /home/user $ touch hehehe

quindi come un normale utente

user ~ $ rm -f hehehe

Il nostro utente può rimuovere un file di proprietà di root all'interno della propria directory home. Questo funziona non solo nella loro directory home, ma all'interno di qualsiasi directory scrivibile da loro.

Adesso prova

root /home/user $ mkdir -p testdir

e

user ~ $ rm -rf testdir

Funziona anche tu. Però:

root /home/user $ mkdir -p testdir/childdir
user ~ $ rm -rf testdir/childdir

fallisce, quindi il nostro utente apparentemente non può cancellare le directory non scrivibili non vuote all'interno delle directory scrivibili.

A quanto ho capito, tutti e tre questi casi di test avrebbero dovuto fallire. Ma a quanto pare quando una directory è scrivibile, ciò conferisce a un utente alcune funzionalità non banali per quanto riguarda il suo contenuto.

Quali sono le regole esatte per quanto riguarda quale delle operazioni primitive filesystem ( create, delete, ecc) `può essere eseguita nel rispetto delle autorizzazioni del filesystem che un utente ha?


Hai accesso in scrittura per una directory da cui puoi rimuovere le voci. Nel tuo ultimo esempio proveresti a rimuovere una directory da una directory in cui non hai accesso in scrittura e come tale fallisce.
Seth,

Risposte:


3

Le risposte diventano molto chiare, una volta compreso che in tutti i file system compatibili con UNIX un file non è qualcosa che vive all'interno di una directory, ma qualcosa di completamente indipendente. Una directory non è altro che una raccolta di collegamenti a file (ecco perché lo è il syscall per rimuovere un file da una directory unlink()). Quando non ci sono collegamenti a un file ( refcountè zero), il file stesso muore.

Ciò ha alcune implicazioni:

  • Uno stesso file può esistere perfettamente in più di una directory su un file system
  • La tua domanda : eliminare un file (o una sottodirectory) da una directory (rimuovendo un collegamento ad esso) o creare un collegamento non è un'operazione sul file, ma sulla directory. Ciò implica che le autorizzazioni del file sono irrilevanti, sono le autorizzazioni della directory che contano.

Non capisco ancora perché testdirpossa essere rimosso dalla directory di proprietà dell'utente ma testdir/childdirnon può esserlo. Se l'utente ha accesso in scrittura alla directory, perché non può scollegarsi testdir/childdirda essa?
jcarpenter2,

L'utente non ha privilegi di scrittura su testdir- quindi non può rimuovere nulla (incluso testdir/childdir) da esso. L'utente ha i privilegi di scrittura nella sua directory home, quindi può rimuoverlo testdir, il che renderà ovviamente inaccessibile tutto ciò che segue.
Eugen Rieck,

Sì - ma perché l'utente deve rimuovere childdirdalla testdirprima prima di poter rimuovere testdirdalla loro home directory?
jcarpenter2,

Non è possibile rimuovere un collegamento a una directory non vuota. Questo non ha nulla a che fare con i privilegi, anche root non può avere rmdiruna directory non vuota.
Eugen Rieck,

Fantasia. Sembra buono.
jcarpenter2,
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.