GNU/Linux >> Znalost Linux >  >> Linux

Povolit vlastníkovi vytvářet a číst soubory, ale ne upravovat ani mazat

Můžete použít bindfs jako:

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

Tento adresář vlastní stephane, přičemž skupina stephane (stephane je jejím jediným členem). Všimněte si také t které uživatelům brání v přejmenování nebo odstranění položek, které nevlastní.

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

My bindfs dir přes sebe s pevným vlastnictvím a oprávněními pro soubory a adresáře. Zdá se, že všechny soubory vlastní root (ačkoli ve skutečném adresáři je stále vlastní stephane).

Adresáře získají drwxrwxr-x root stephane oprávnění, zatímco ostatní typy souborů získají -rw-r--r-- root stephane jedničky.

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

Nyní vytvoření souboru funguje, protože do adresáře lze zapisovat:

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

Není však možné provést druhý zápis open() na tento soubor, protože k němu nemáme oprávnění:

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

(všimněte si, že připojování zde není povoleno (jako součást vašich počátečních požadavků)).

Omezení:zatímco nemůžete odstranit nebo přejmenovat položky v dir kvůli t bit, nové adresáře, které tam vytvoříte, nebudou mít t bit, takže tam budete moci přejmenovat nebo odstranit položky.


chattr +a volba umožní pouze připojení. Soubory lze tímto způsobem měnit, ale pouze přidáním (tj. připojením řádků) k nim. Nemůžete odstranit existující soubory, ale vytvořit nové. To by mohlo vyhovovat vašim potřebám:

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

od man chattr

Soubor se sadou atributu `a' lze otevřít pouze v režimu připojení pro zápis. Tento atribut může nastavit nebo vymazat pouze superuživatel nebo proces, který má schopnost CAP_LINUX_IMMUTABLE.

(všimněte si, že platí i pro adresáře)

Váš seznam by tedy vypadal takto:

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. Smazat všechny soubory v adresáři, jejichž jméno neodpovídá řádku v seznamu souborů?

  2. Může být skript spustitelný, ale nečitelný?

  3. UNIX a příklady:Jak vytvářet, zobrazovat, extrahovat, upravovat soubory C archivu (*.a)

  1. Qt nevytváří výstupní soubory ve složkách ladění/release v Linuxu

  2. Bash skript pro odstranění všech souborů kromě N při abecedním řazení

  3. Jak odstranit všechny soubory ve složce, ale nesmazat složku pomocí standardních knihoven NIX?

  1. Najděte soubory existující v jednom adresáři, ale ne ve druhém

  2. Automatické verzování při změně souboru (upravit/vytvořit/smazat)

  3. Smažte všechny soubory kromě 1000 náhodných souborů v adresáři