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 worker1
yang perlu menulis file /manager/repository
tetapi tidak dapat menghapus file.
Saya memiliki pengguna worker2
yang perlu menulis file /manager/repository
tetapi tidak dapat menghapus file yang
saya punya pengguna worker3
yang perlu menulis file /manager/repository
tetapi tidak bisa hapus file
tetapi worker 1-2-3
tidak dapat menghapus file setelah dibuat hanya manager
dan root
dapat menghapus file yang worker 1-2-3
dibuat.
Aku mencoba beberapa chown
dan chmod
trik dengan menerapkan sedikit lengket tanpa keberhasilan.
sumber
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 izinworker
grupsudo
untuk menjalankan executable asmanager
. Kemudian yang dapat dieksekusi akan membuat log sebagaimanager
pengguna yang dapat dibaca oleh pekerja.Jawaban:
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.
sumber
Pertama-tama pastikan ACL diaktifkan di sistem Anda, kemudian jalankan perintah ini
Bagaimana itu bekerja
Perintah ini akan memberikan memberi baca, tulis, dan jalankan izin untuk pemilik di direktori
/manager/repository
. Ini akan mencabut semua izin untukworker1
,worker2
danworker3
.Ini akan memberi pengguna lain, akses baca & tulis tetapi akan menolak akses hapus.
Dari
man setfacl
:sumber
echo " " > $file
akan 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.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
nfsv4acls
flag, Anda dapat melakukan:Secara eksplisit menolak para
delete_child
izin kepada anggotaworker-group
kelompok.Namun perhatikan bahwa karena para pekerja akan menjadi pemilik file yang mereka buat, mereka masih dapat memodifikasi ACL pada mereka, dan dengan memberikan
delete
izin pada diri mereka sendiri , yang akan diutamakan atasdelete_child
izin direktori induk dan saya tidak yakin ada cara mengatasinya (setidaknya pada sistem file UFS di FreeBSD). Misalnya mereka dapat melakukan:sumber
Untuk mengambil izin menulis dari
/manager/repository
folder. 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.sumber
kita dapat memodifikasi file dan folder tetapi tidak dapat menghapus.
Untuk menghapus atribut, jalankan perintah berikut:
Untuk file:
Untuk direktori:
sumber
a
atribut berarti hanya append. Bisakah pengguna mengedit file ini? (2) Apa efek pengaturana
atribut pada direktori?