Bagaimana cara menyalin ACL di Mac OS X?

13

Sebagian besar turunan unix dapat menyalin ACL dari satu file ke file lain dengan:

getfacl filename1 | setfacl -f - filename2

Sayangnya Mac OS X tidak memiliki perintah getfacl dan setfacl, karena mereka telah memasukkan penanganan ACL ke chmod. chmod -E menerima daftar ACL di stdin, tapi saya belum menemukan perintah yang akan memuntahkan ACL dalam format yang sesuai di stdout. Yang terbaik yang saya hasilkan adalah:

ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2

Apakah ada solusi yang lebih kuat?

Pertanyaan bonus: apakah ada cara yang baik untuk melakukannya dengan Python, tanpa menggunakan modul apa pun yang tidak dikirimkan dengan 10.6?

MagerValp
sumber
Jadi sekarang tahun 2020, dan macOS masih belum getfacl/ setfacl. Cukup luar biasa. github.com/jvscode/getfacl berusia 10 tahun. Saya belum bisa membuatnya berfungsi. serverfault.com/a/303752/104173 terlihat rumit, dan saya tidak jelas apakah ini mencoba untuk mengganti get/setfaclfungsionalitas. Saya mengerti bahwa macOS bukan platform server, tetapi masih bisa mengalami gangguan keamanan. Apakah layak memulai kembali percakapan ini di apple.stackexchange.com ?
Johnny Utahh

Jawaban:

8

ls -e Cetak Access Control List (ACL) yang terkait dengan file, jika ada, dalam output panjang (-l).

ini memberikan hasil seperti ...

drwxr-xr-x@ 19 localadmin   646B Aug  4 00:21  APPBUNDLE
0: user:localadmin allow add_file,add_subdirectory,writeattr,writeextattr,writesecurity
                   ⬆    ⇧                      ⇶                                     ⬆

Secara pribadi, saya memiliki "ekspor" di ~/.bash_profile

export FILE_ALL="read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"
export DIR_ALL="list,search,add_file,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"

yang chmodmemungkinkan ...

sudo chmod + a "izinkan localadmin $ DIR_ALL" / APPBUNDLE

Dari chmodhalaman manual, ada sedikit info ini ... yang mengisyaratkan bahwa memang mungkin untuk melakukan sesuatu seperti yang Anda jelaskan ..

"ACL dimanipulasi menggunakan ekstensi ke tata bahasa mode simbolik. Setiap file memiliki satu ACL, yang berisi daftar entri yang diurutkan. Setiap entri mengacu pada pengguna atau grup, dan memberikan atau menolak satu set izin. Dalam kasus di mana pengguna dan grup ada dengan nama yang sama, nama pengguna / grup dapat diawali dengan "pengguna:" atau "grup:" untuk menentukan jenis nama. "

chmod -E Membaca informasi ACL dari stdin, sebagai daftar ACE berurutan, dipisahkan oleh baris baru. Jika informasi diurai dengan benar, informasi yang ada diganti.

Juga, saya akan berteriak kepada BatchMod , seorang oldie, tetapi goodie untuk ACL, serta TinkerToolSystem .

mralexgray
sumber
Ini bekerja untuk saya, tetapi saya harus mengubah perintah chmod ke: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE(mengganti nama pengguna dan allow)
E. Moffat
1

Anda harus dapat statmemformat outputnya dengan cara yang sesuai.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
stat tidak mencantumkan ACL.
MagerValp
1

Mungkin lihat di https://github.com/jvscode/getfacl .

ken
sumber
Referensi yang bagus. Sayangnya, proyek ini tampaknya berumur 10 tahun, tidak memiliki setfacl(hanya getfacl), dan getfaclfungsinya tampaknya sangat terbatas. Sayangnya saya belum menemukan solusi yang lebih baik.
Johnny Utahh