Bagaimana umask mempengaruhi ACL?

12

Dapatkah seseorang menjelaskan kepada saya bagaimana umaskmemengaruhi topeng default dari file yang baru dibuat jika ACL diaktifkan? Apakah ada dokumentasi tentang ini?

Contoh:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

Saya harapkan mask:rwx. Sebenarnya setelah pengaturan umaskmisalnya 027saya mendapatkan perilaku yang diharapkan.

Jofel
sumber
Dengan umask 077, Anda akan mendapatkan mask::rw-. Tapi itu bukan pertanyaan Anda, benar?
slm
@slm Ini adalah bagian dari pertanyaan saya. Saya ingin tahu bagaimana topeng file baru tergantung pada umask. Saya cukup terkejut bahwa dengan 077 saya dapatkan mask::rw-dan bukan mask::rwxyang merupakan topeng default direktori.
jofel
OK, saya memperbarui jawaban saya sekarang dengan contoh-contoh yang seharusnya membantu menjernihkan ini. Beri aku beberapa menit.
slm
Ini pertanyaan terkait erat.
jofel

Jawaban:

10

Saya menemukan contoh ini, berjudul: ACL dan MASK di linux . Pada artikel ini, contoh berikut diperlihatkan yang menurut saya membantu memahami bagaimana ACL dan umaskberinteraksi satu sama lain.

Latar Belakang

Ketika sebuah file dibuat pada sistem Linux, izin default 0666diterapkan sedangkan ketika sebuah direktori dibuat, izin default 0777diterapkan.

contoh 1 - file

Misalkan kita mengatur umask kita ke 077 dan menyentuh file. Kita dapat menggunakan straceuntuk melihat apa yang sebenarnya terjadi ketika kita melakukan ini:

$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile

Dalam contoh ini kita dapat melihat bahwa pemanggilan sistem open()dilakukan dengan izin 0666, namun ketika umask 077kemudian diterapkan oleh kernel izin berikut dihapus ( ---rwxrwx) dan kami pergi dengan rw-------alias 0600.

contoh - 2 direktori

Konsep yang sama dapat diterapkan ke direktori, kecuali bahwa alih-alih izin default menjadi 0666, mereka adalah 0777.

$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777)                  = 0
drwxr-xr-x 2 saml saml 4096 Jul  9 10:55 testdir

Kali ini kami menggunakan mkdirperintah. The mkdirperintah kemudian disebut system call mkdir(). Dalam contoh di atas kita dapat melihat bahwa mkdirperintah yang disebut mkdir()system call dengan izin defaul 0777( rwxrwxrwx). Kali ini dengan umask dari 022izin berikut dihapus ( ----w--w-), jadi kita tinggal 0755 ( rwxr-xr-x) ketika direktori dibuat.

contoh 3 (Menerapkan ACL default)

Sekarang mari kita membuat direktori dan menunjukkan apa yang terjadi ketika ACL default diterapkan padanya bersama dengan file di dalamnya.

$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir

$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx          #effective:rwx
group::r-x          #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx      #effective:rwx
default:group::r-x      #effective:r-x
default:mask::rwx
default:other::r-x

Sekarang mari kita buat file aclfile,:

$ strace -s 128 -fvTttto luvly touch acldir/aclfile

# view the results of this command in the log file "luvly"
$ less luvly

Sekarang dapatkan izin dari file yang baru dibuat:

$ getfacl --all-effective acldir/aclfile 
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx          #effective:rw-
group::r-x          #effective:r--
mask::rw-
other::r--

Perhatikan topengnya mask::rw-,. Mengapa tidak mask::rwxseperti ketika direktori itu dibuat?

Periksa luvlyfile log untuk melihat izin default apa yang digunakan untuk pembuatan file:

$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>

Di sinilah agak membingungkan. Dengan masker diatur ke rwxsaat direktori dibuat, Anda akan mengharapkan perilaku yang sama untuk pembuatan file, tetapi tidak berfungsi seperti itu. Itu karena kernel memanggil open()fungsi dengan izin default dari 0666.

Untuk meringkas

  • File tidak akan mendapatkan izin eksekusi (masking atau efektif). Tidak masalah metode apa yang kami gunakan: ACL, umask, atau mask & ACL.
  • Direktori bisa mendapatkan izin eksekusi, tetapi itu tergantung pada bagaimana bidang masking diatur.
  • Satu-satunya cara untuk mengatur izin eksekusi untuk file yang berada di bawah izin ACL adalah dengan mengaturnya secara manual chmod.

Referensi

slm
sumber
@ jofel - beri tahu saya jika ini masuk akal.
slm
@ IM terima kasih banyak atas jawaban terinci Anda. Ini membawa saya lebih dekat ke masalah saya yang sebenarnya: Izin grup di chmod syscall mempengaruhi topeng file ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx). Mungkin saya harus memulai pertanyaan baru tentang ini ...
jofel
@ jofel - ya itu terdengar seperti pertanyaan lain.
slm
@ IM dan sudah dijawab di sini .
jofel
"Ketika sebuah file dibuat pada sistem Linux, izin standar 0666 diterapkan ..." - yah itu tidak sepenuhnya benar, karena itu tergantung pada aplikasi pembuatan.
ilkkachu
2

untuk tujuan keamanan, sistem operasi linux tidak memungkinkan untuk pembuatan file secara otomatis dengan bit eksekusi. Ini untuk mencegah penyerang cyber dari menulis program ke file-file tersebut dan mengeksekusinya jika mereka mendapatkan akses ke server Anda. Ini hanya tindakan pencegahan keamanan. Anda selamanya harus secara manual mengatur bit eksekusi pada file setelah membuatnya dengan utilitas chmod

Arni
sumber