Cara memberi izin membaca baca tetapi tidak menghapus file

12

Saya ingin memberi pengguna kemampuan untuk membuat file tulis dan baca di direktori pengguna lain, tetapi tidak memiliki opsi untuk menghapus file setelah dibuat (bit lengket tidak akan berfungsi di sini ...) misalnya:

Saya memiliki pengguna manager dengan direktori. repository
Saya memiliki pengguna worker1yang perlu menulis file /manager/repositorytetapi tidak dapat menghapus file.
Saya memiliki pengguna worker2yang perlu menulis file /manager/repository tetapi tidak dapat menghapus file yang
saya punya pengguna worker3yang perlu menulis file /manager/repository tetapi tidak bisa hapus file

tetapi worker 1-2-3tidak dapat menghapus file setelah dibuat hanya managerdan rootdapat menghapus file yang worker 1-2-3dibuat.

Aku mencoba beberapa chowndan chmodtrik dengan menerapkan sedikit lengket tanpa keberhasilan.

pengguna63898
sumber
1
Apakah worker*pengguna menulis ke direktori dengan cara tertentu? Anda disebutkan dalam komentar bahwa file log masuk di sini, jadi apakah itu berarti executable tertentu diluncurkan untuk membuat file di sini? Jika demikian, Anda dapat memberi izin workergrup sudountuk menjalankan executable as manager. Kemudian yang dapat dieksekusi akan membuat log sebagai managerpengguna yang dapat dibaca oleh pekerja.
Centimane
Jika pengguna dapat memodifikasi file maka mereka juga dapat menghapus kontennya, sehingga secara efektif "menghapus" itu. Sepertinya Anda memerlukan semacam antarmuka "pengiriman", bukan sistem file. Email akan menjadi yang paling sederhana.
ybungalobill

Jawaban:

8

Tidak seperti Windows, tidak ada izin hapus yang berbeda di bawah Unix / Linux. Hak untuk menghapus (atau membuat atau mengganti nama) file terikat ke direktori yang berisi. Hapus izin menulis untuk para pekerja /manager/repository/untuk menolak pekerja untuk membuat, menghapus, dan mengganti nama file.

Perhatikan bahwa tidak mungkin mengizinkan pembuatan file tetapi untuk menolak penghapusannya.

countermode
sumber
bagaimana bisa menghapus izin menulis karena file akan ditulis sepanjang waktu itu adalah file log
user63898
Walaupun itu dulu benar, banyak sistem modern mendukung ACL yang diperluas (NFSv4 ACL yang didukung oleh FreeBSD, Solaris atau Linux (Richacl patch) yang memberikan kemampuan yang sama seperti ACL Windows NT. Distribusi Linux Anda kemungkinan tidak memilikinya sekalipun.
Stéphane Chazelas
@ user63898 Anda menghapus izin menulis dari direktori tempat file berada, bukan dari file itu sendiri.
GnP
6

Pertama-tama pastikan ACL diaktifkan di sistem Anda, kemudian jalankan perintah ini

setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository

Bagaimana itu bekerja

  • Perintah ini akan memberikan memberi baca, tulis, dan jalankan izin untuk pemilik di direktori /manager/repository. Ini akan mencabut semua izin untuk worker1, worker2dan worker3.

  • Ini akan memberi pengguna lain, akses baca & tulis tetapi akan menolak akses hapus.


Dari man setfacl:

-d, --default
       All  operations  apply to the Default ACL.

-R, --recursive
       Apply operations to all files and directories recursively.

-m, --modify
       Options to modify the ACL of a file or directory.
Rahul
sumber
terima kasih, tetapi masalahnya adalah pengguna dibuat sepanjang waktu. dan beberapa dihapus oleh admin. jadi itu berarti saya perlu setiap kali memperbarui direktori dengan setfacl? apakah ada solusi yang lebih umum?
user63898
ya ketika saya mencoba membuat file dari worker1 touch /manager/repository/x.txt saya mendapatkan: touch: tidak dapat menyentuh `/manager/repository/x.txt ': Izin ditolak
user63898
masih mendapatkan Izin ditolak ketika saya melakukan ls -ld repositori im mendapatkan: drwxrwxr-t 2 pengguna manajer 4096 Sep 7 11:30 repositori /
user63898
ketika melakukan setfacl -d -R -m user :: rwx, user: worker1: --- repository / dan kemudian mencoba membuat file dari worker1 touch /manager/repository/x.txt saya mendapatkan: touch: can't touch `/ manager /repository/x.txt ': Izin ditolak
user63898
5
tidakkah ini masih memungkinkan seseorang untuk menulis file kosong di sini? Seperti echo " " > $fileakan merusak isi file dengan "", yang secara teknis adalah sebuah tulisan, tetapi secara efektif menghapus konten. Sepertinya repo aktual seperti svn akan menjadi taruhan terbaik di sini.
Centimane
3

Untuk melakukannya dengan izin, Anda memerlukan sistem dengan dukungan untuk ACL mirip dengan NFSv4 ACL. Sebagai contoh, pada FreeBSD, jika sistem file di-mount dengan nfsv4aclsflag, Anda dapat melakukan:

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

Secara eksplisit menolak para delete_childizin kepada anggota worker-groupkelompok.

Namun perhatikan bahwa karena para pekerja akan menjadi pemilik file yang mereka buat, mereka masih dapat memodifikasi ACL pada mereka, dan dengan memberikan deleteizin pada diri mereka sendiri , yang akan diutamakan atas delete_childizin direktori induk dan saya tidak yakin ada cara mengatasinya (setidaknya pada sistem file UFS di FreeBSD). Misalnya mereka dapat melakukan:

$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$
Stéphane Chazelas
sumber
0

Untuk mengambil izin menulis dari /manager/repositoryfolder. Jadi, semua pengguna yang bukan root akan dapat menulis atau menghapus dari file di dalamnya /manager/repository, tetapi tidak menghapus file apa pun dari direktori ini.

chmod 755 /manager/repository
Josef Klimuk
sumber
0

kita dapat memodifikasi file dan folder tetapi tidak dapat menghapus.

Untuk menghapus atribut, jalankan perintah berikut:

Untuk file:

$ sudo chattr -R -a file.txt

Untuk direktori:

$ sudo chattr -R -a dir1/
Ankitsrivasta
sumber
(1) Menurut dokumentasi, aatribut berarti hanya append. Bisakah pengguna mengedit file ini? (2) Apa efek pengaturan aatribut pada direktori?
Scott