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