GNU/Linux >> Belajar Linux >  >> Linux

Izinkan pemilik membuat &membaca file, tetapi tidak mengubah atau menghapus

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

Linux
  1. Hapus File Yang Belum Diakses Untuk Waktu Yang Diberikan Di Linux

  2. Hapus Semua File Dalam Direktori Yang Namanya Tidak Cocok Dengan Baris Dalam Daftar File?

  3. Qt tidak membuat file keluaran di folder debug/rilis di Linux

  1. Skrip Bash untuk menghapus semua file kecuali N saat diurutkan menurut abjad

  2. Bagaimana cara menghapus semua file dalam folder, tetapi tidak menghapus folder menggunakan pustaka standar NIX?

  3. Temukan file yang ada di satu direktori tetapi tidak di direktori lain

  1. Temukan File yang Tidak Dapat Dibaca Pengguna?

  2. Izinkan SCP tetapi bukan login yang sebenarnya menggunakan SSH

  3. Bagaimana cara menyalin pohon direktori tetapi bukan file di Linux?