Saya menemukan contoh ini, berjudul: ACL dan MASK di linux . Pada artikel ini, contoh berikut diperlihatkan yang menurut saya membantu memahami bagaimana ACL dan umask
berinteraksi satu sama lain.
Latar Belakang
Ketika sebuah file dibuat pada sistem Linux, izin default 0666
diterapkan sedangkan ketika sebuah direktori dibuat, izin default 0777
diterapkan.
contoh 1 - file
Misalkan kita mengatur umask kita ke 077 dan menyentuh file. Kita dapat menggunakan strace
untuk 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 077
kemudian 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 mkdir
perintah. The mkdir
perintah kemudian disebut system call mkdir()
. Dalam contoh di atas kita dapat melihat bahwa mkdir
perintah yang disebut mkdir()
system call dengan izin defaul 0777
( rwxrwxrwx
). Kali ini dengan umask dari 022
izin 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::rwx
seperti ketika direktori itu dibuat?
Periksa luvly
file 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 rwx
saat 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
mask::rw-
. Tapi itu bukan pertanyaan Anda, benar?