Misalnya, saya ingin memberi kolega saya akses tulis ke direktori tertentu. Mari kita asumsikan bahwa subdirektori di dalamnya memiliki hak akses 775, file 664, dan juga ada beberapa file yang dapat dieksekusi di dir - 775.
Sekarang saya ingin menambahkan izin menulis. Dengan chmod, saya bisa mencoba sesuatu seperti
chmod o+w -R mydir/
Tapi itu tidak keren, karena saya tidak ingin membuat dir world-writable - Saya ingin memberikan akses hanya kepada pengguna tertentu, jadi saya ingin menggunakan ACL. Tetapi apakah ada cara mudah untuk mengatur izin itu? Seperti yang saya lihat, saya perlu menangani setidaknya tiga kasus (dir, file, file yang dapat dieksekusi) secara terpisah:
find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;
Tampaknya cukup banyak baris kode untuk tugas yang begitu sederhana. Apakah ada cara yang lebih baik?
sumber
-X
tidak berfungsi seperti yang diharapkan pada termasuk dalamsetfacl 2.2.49
.Seperti yang disebutkan oleh umläute, perintah
setfacl -R
dengan huruf besar "X" adalah cara yang harus dilakukan, seperti:Namun, bagi mereka yang perlu menerapkan kembali ACL secara rekursif (mis. Seperti "mendaftar ulang izin pada sub-direktori" à la Windows).
Perintah itu dapat dipisahkan untuk menghindari kesalahan seperti
setfacl: foobar: Only directories can have default ACLs
.Perhatikan bahwa sintaksnya
<( something )
adalah Proses Substitusi , yang khusus untuk bash. Anda mungkin perlu membuat file sementara jika Anda menggunakan shell lain.sumber
sumber
for i in $(find …)
.find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
$(find /data -mindepth 0 -type d)
tidak akan mengembalikan hasil baris demi baris, itu akan melindungi seluruh hasil. Jika ada spasi dalam satu baris, Anda akan mendapatkan catatan yang salah dalam$i
variabel.