Anda bisa menggunakan bindfs
seperti:
$ ls -ld dir
drwxr-xr-t 2 stephane stephane 4096 Aug 12 12:28 dir/
Direktori itu dimiliki oleh stephane, dengan grup stephane (stephane menjadi satu-satunya anggotanya). Perhatikan juga t
yang mencegah pengguna mengganti nama atau menghapus entri yang bukan milik mereka.
$ sudo bindfs -u root -p u=rwD,g=r,dg=rwx,o=rD dir dir
Kami bindfs
dir
atas dirinya sendiri dengan kepemilikan tetap dan izin untuk file dan direktori. Semua file tampaknya dimiliki oleh root
(meskipun di bawah direktori sebenarnya mereka masih dimiliki oleh stephane).
Direktori mendapatkan drwxrwxr-x root stephane
izin sementara jenis file lain mendapatkan -rw-r--r-- root stephane
satu.
$ ls -ld dir
drwxrwxr-t 2 root stephane 4096 Aug 12 12:28 dir
Sekarang membuat file berfungsi karena direktori dapat ditulisi:
$ echo test > dir/file
$ ls -ld dir/file
-rw-r--r-- 1 root stephane 5 Aug 12 12:29 dir/file
Namun tidak mungkin melakukan penulisan kedua open()
pada file itu karena kami tidak memiliki izin untuk itu:
$ echo test > dir/file
zsh: permission denied: dir/file
(perhatikan bahwa menambahkan tidak diperbolehkan di sana (bukan bagian dari persyaratan awal Anda)).
Batasan:sementara Anda tidak dapat menghapus atau mengganti nama entri di dir
karena t
bit, direktori baru yang Anda buat di sana tidak akan memiliki t
itu bit, sehingga Anda dapat mengganti nama atau menghapus entri di sana.
chattr +a
opsi akan memungkinkan menambahkan saja. File dapat diubah seperti itu, tetapi hanya dengan menambahkan (yaitu menambahkan baris) ke dalamnya. Anda tidak dapat menghapus file yang ada, tetapi membuat yang baru. Ini mungkin sesuai dengan kebutuhan Anda:
sudo chattr -R +a /dir/to/apply/to
dari man chattr
File dengan kumpulan atribut `a' hanya dapat dibuka dalam mode penambahan untuk menulis. Hanya superuser atau proses yang memiliki kemampuan CAP_LINUX_IMMUTABLE yang dapat menyetel atau menghapus atribut ini.
(perhatikan bahwa ini juga berlaku untuk direktori)
Jadi daftar Anda akan terlihat seperti:
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