GNU/Linux >> Linux Esercitazione >  >> Linux

Consenti al proprietario di creare e leggere file, ma non di modificarli o eliminarli

Potresti usare bindfs come:

$ ls -ld dir
drwxr-xr-t 2 stephane stephane 4096 Aug 12 12:28 dir/

Quella directory è di proprietà di stephane, con il gruppo stephane (stephane è il suo unico membro). Nota anche il t che impedisce agli utenti di rinominare o rimuovere voci di cui non sono proprietari.

$ sudo bindfs -u root -p u=rwD,g=r,dg=rwx,o=rD dir dir

Noi bindfs dir su se stesso con proprietà e autorizzazioni fisse per file e directory. Tutti i file appaiono di proprietà di root (sebbene sotto nella directory reale siano ancora di proprietà di stephane).

Le directory ottengono drwxrwxr-x root stephane autorizzazioni mentre altri tipi di file ottengono -rw-r--r-- root stephane quelli.

$ ls -ld dir
drwxrwxr-t   2 root     stephane   4096 Aug 12 12:28 dir

Ora la creazione di un file funziona perché la directory è scrivibile:

$ echo test > dir/file
$ ls -ld dir/file
-rw-r--r-- 1 root stephane 5 Aug 12 12:29 dir/file

Tuttavia non è possibile eseguire una seconda scrittura open() su quel file in quanto non abbiamo il permesso su di esso:

$ echo test > dir/file
zsh: permission denied: dir/file

(nota che l'aggiunta non è consentita lì (poiché non fa parte dei tuoi requisiti iniziali)).

Una limitazione:mentre non puoi rimuovere o rinominare le voci in dir a causa del t bit, le nuove directory che crei non avranno quel t bit, quindi sarai in grado di rinominare o eliminare le voci lì.


Il chattr +a l'opzione consentirà solo l'aggiunta. I file possono essere modificati in questo modo, ma solo aggiungendo (cioè aggiungendo righe) ad essi. Non è possibile eliminare i file esistenti, ma crearne di nuovi. Questo potrebbe soddisfare le tue esigenze:

sudo chattr -R +a /dir/to/apply/to

da man chattr

Un file con l'attributo `a' impostato può essere aperto solo in modalità append per la scrittura. Solo il superutente o un processo che possiede la capacità CAP_LINUX_IMMUTABLE può impostare o cancellare questo attributo.

(nota che vale anche per le directory)

Quindi il tuo elenco sarebbe simile a:

echo hello > test # succeeds, because test doesn't exist, and creation is allowed
echo hello2 > test # fails, because test already exists, and overwriting is not allowed
echo hello3 >> test # succeeds, because appending is allowed
cat test # succeeds, because reads are allowed
rm test # fails, because delete is not allowed

Linux
  1. Elimina i file a cui non è stato effettuato l'accesso per un dato tempo su Linux

  2. Eliminare tutti i file in una directory il cui nome non corrisponde a una riga in un elenco di file?

  3. Trovare file che un utente non può leggere?

  4. Confronta le directory ma non il contenuto dei file?

  5. Esempi di UNIX ar:come creare, visualizzare, estrarre, modificare file di archivio C (*.a)

Come creare un utente quasi equivalente al root ma non un utente identico al root in Linux

Come eliminare tutti i file in una cartella, ma non eliminare la cartella utilizzando le librerie standard NIX?

Trova i file esistenti in una directory ma non nell'altra

Versione automatica al cambio di file (modifica/crea/cancella)

Elimina tutti i file casuali tranne 1000 in una directory

Consenti a tutti gli utenti di creare file in una directory, ma solo il proprietario può eliminarli