Cara umum untuk menyiapkan direktori untuk berbagi file di dalam grup, adalah:
$ mkdir foo
$ chgrp felles foo
$ chmod g+ws foo
$ setfacl -m group:felles:rwx foo
$ setfacl -dm group:felles:rwx foo
Ini memastikan bahwa semua file yang dibuat foo
dapat dibaca dan ditulis oleh grup felles
:
$ umask
0022
$ echo hi > foo/bar
$ ls -l foo
total 4
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
Namun, jika Anda menyalin file ke dalam foo
, ACL default tidak diterapkan:
$ echo you > baz
$ cp baz foo/
$ ls -l foo
total 8
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
-rw-r--r--+ 1 bhm felles 4 2010-09-23 00:19 baz
$ getfacl foo/baz
# file: foo/baz
# owner: bhm
# group: felles
user::rw-
group::rwx #effective:r--
group:felles:rwx #effective:r--
mask::r--
other::r--
Mengapa ini terjadi, dan apakah ada jalan lain?
( Memindahkan file ke direktori tidak menghormati ACL atau kepemilikan grup, tapi saya bisa mengerti alasannya: Anda mungkin tidak ingin izin file berubah hanya karena Anda mengubah namanya.)
Jawaban:
Jika
cp
membuat file tujuan, itu mereplikasi izin file sumber, kecuali untuk bit yang diatur dalam umask. Ini adalah perilaku standar (lihat misalnya langkah 3.b dalam spesifikasi Single Unix v3 (POSIX 2001) .Mengapa cp dirancang dengan cara ini? Karena ada banyak kasus di mana perilaku ini diinginkan, misalnya menjaga privasi file ketika izin asli terbatas, dan menjaga executabilitas hampir selalu merupakan hal yang benar untuk dilakukan. Namun sangat disayangkan bahwa bahkan GNU cp tidak memiliki opsi untuk menonaktifkan perilaku ini.
Sebagian besar alat salin (misalnya pax, rsync) berperilaku dengan cara yang sama. Anda dapat memastikan file akan dibuat dengan izin default dengan memisahkan sumber dari tujuan, misalnya dengan
cat <baz >foo/baz
.sumber
Ya, tiga tahun dan lebih banyak pertanyaan tetapi masih relevan. Untuk pembaca masa depan, saya ingin menambahkan bahwa diharapkan perintah mv, cp tidak mengikuti ACL direktori tujuan. Jawaban Gilles baik-baik saja kecuali kalimat terakhir. Cara yang lebih baik untuk menerapkan ACL tujuan ke file yang disalin / dipindahkan adalah cara yang disebutkan di sini:
http://www.commandlinefu.com/commands/view/4281/copy-acl-of-one-file-to-another-using-getfacl-and-setfacl
Jika tautan rusak di masa mendatang, saya menempelkan konten di sini:
salin ACL dari satu file ke file lain menggunakan getfacl dan setfacl
PERINGATAN: ACL yang ada akan hilang.
sumber
Saya memiliki masalah serupa dengan file rsynced yang tidak memiliki ACL default yang tepat di subdirektori target. Cp tidak memiliki cara mengatur izin pada target. Tapi, rsync tidak, menggunakan
--chmod=ugo=rwx
flag. Lihat jawaban saya di sini .sumber
Anda perlu menggunakan
-p
atau--preserve
dengancp
.Dari
man 5 acl
:sumber
ACL menyebar dengan benar, tetapi topeng default tampaknya tidak benar. Anda mungkin ingin topeng default Anda menjadi rwX.
Jika itu tidak berhasil, silakan kirim ACL untuk foo.
sumber
Apakah sistem file Anda terpasang dengan opsi "ACL" diaktifkan?
Jika tidak, lakukan perubahan lalu kirim ulang.
sumber
Dari apa yang saya lihat, Anda adalah pemilik file (bhm) sebelum dan sesudah cp. Seperti yang tercantum dalam daftar direktori, pemilik telah membaca dan menulis akses!
sumber