Cara mengatur ACL Default Linux berbeda untuk direktori dan file

9

Saya memiliki beberapa ACL yang didefinisikan pada direktori sebagai berikut:

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

Saya ingin semua file baru yang dibuat di folder itu menjadi u: apache: r-- dan direktori baru apa pun menjadi u: apache: rx. Bagaimana cara menentukan maksud itu menggunakan ACL?

Saya sudah mencoba -dm u:apache:rXdan sepertinya tidak melakukan hal yang berbeda dibandingkan hanyarx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

Izin modal X tampaknya hanya berguna untuk mengatur izin saat ini, bukan untuk mengatur izin default:

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--
Joshperry
sumber

Jawaban:

6

Yah, tetapi teladan Anda melakukan apa yang Anda inginkan;)

Lihatlah yang kedua:

overt htdocs # setfacl -dm u: apache: rx.
htdocs terbuka # sentuh blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
pengguna :: r--
pengguna: apache: rx #effective: r--
grup :: r--
topeng :: r--
lainnya :: r--

Garis yang penting adalah:

user:apache:r-x #effective:r--

Meskipun ACL diatur ke rx itu secara efektif r-- untuk file. Itu karena topengnya.

Dan mask akan selalu hanya rw- untuk file jika pengguna membuatnya dengan izin rw- untuk pengguna. (Saya tidak 100% yakin tetapi mask tidak bisa tidak terlalu membatasi daripada izin dasar).

Jadi secara efektif Anda mendapatkan r-- untuk file dan rx untuk direktori.
Karena direktori yang dibuat akan memiliki pengguna: rx -> mask akan rx -> izin efektif adalah rx.
Untuk file: mereka akan memiliki r-- jadi mask akan r-- dan izin yang efektif untuk ACL juga akan r--. (Jika Anda membuat file dan memberikan izin kepada pengguna :: rx, maka mask akan dimodifikasi dan pengguna membentuk acl akan mendapatkan x juga)

sutra
sumber
Benar-benar merindukan #effectiveteks! Terima kasih atas penjelasan tentang bagaimana topeng memengaruhi izin yang efektif.
joshperry
2

Sayangnya, tidak ada cara untuk melakukan ini dengan Linux ACL. Memang benar bahwa topeng akan muncul untuk melakukan apa yang Anda inginkan, sejauh izin yang efektif. Tetapi lain kali Anda melakukan operasi yang menghitung ulang masker hak, bam , semua file Anda akan dapat dieksekusi.

Anda mungkin juga pasrah saja berharap semua file dalam ACL dapat dieksekusi. Itu benar-benar hanya kenyamanan daripada fitur keamanan, dan selama Anda tidak meletakkan folder itu di $ PATH Anda, seharusnya tidak menjadi masalah. Jika masih mengganggu Anda, satu-satunya pilihan adalah menempatkan folder yang dikontrol ACL Anda pada sistem file yang dipasang tanpa opsi eksekusi.

Rashkae
sumber
1

-d (atau --default) digunakan untuk mengatur default pada direktori sehingga hal-hal yang dibuat di dalamnya mewarisi perms (seperti yang tampaknya Anda lakukan).

Berikut ini adalah ikhtisar singkat. http://www.vanemery.com/Linux/ACL/linux-acl.html#default

Tidak mungkin memiliki file yang memiliki satu default dan dirs memiliki standar yang berbeda.

Anda dapat menjalankan skrip dari cron yang melakukan setfacl pada semua dirs setiap menit - meskipun itu kurang ideal dari solusi.

find / path / ke / top / dir -type d -exec setfacl -dm u: apache: rx {} \;

atau

find / path / ke / top / dir -type d | xargs setfacl -dm u: apache: rx

aspitzer
sumber
1

Posting ini di ACL dan Masker benar-benar membantu saya untuk memahami bagaimana melakukan apa yang saya inginkan, dan mengapa.

Bagian yang hilang dari pemahaman saya adalah bahwa ketika membuat file kernel menggunakan set izin default 0666 dan untuk direktori baru 0777. Jadi secara default direktori akan memiliki bit set eksekusi (traverse).

Topeng ACL pada dasarnya adalah cara untuk mengatur umasktingkat direktori / file / pengguna.

Joshperry
sumber