Saya menemukan contoh ini, berjudul:ACL dan MASK di linux. Dalam artikel ini contoh-contoh berikut ditunjukkan yang menurut saya membantu untuk memahami bagaimana ACL dan umask
berinteraksi satu sama lain.
Latar Belakang
Saat file dibuat di sistem Linux, izin default 0666
diterapkan sedangkan ketika direktori dibuat izin default 0777
diterapkan.
contoh 1 - file
Misalkan kita mengatur umask kita ke 077 dan menyentuh sebuah file. Kita bisa menggunakan strace
untuk melihat apa yang sebenarnya terjadi saat kami 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 sistem memanggil open()
dibuat dengan izin 0666, namun saat umask 077
kemudian diterapkan oleh kernel, izin berikut dihapus (---rwxrwx
) dan tersisa rw-------
alias 0600.
contoh - 2 direktori
Konsep yang sama dapat diterapkan pada direktori, kecuali izin defaultnya adalah 0666, melainkan 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 kita menggunakan mkdir
memerintah. mkdir
perintah kemudian memanggil system call mkdir()
. Pada contoh di atas kita dapat melihat bahwa mkdir
perintah yang disebut mkdir()
panggilan sistem dengan izin default 0777
(rwxrwxrwx
). Kali ini dengan umask 022
izin berikut dihapus (----w--w-
), jadi tersisa 0755 (rwxr-xr-x
) saat direktori dibuat.
contoh 3 (Menerapkan ACL default)
Sekarang mari kita buat sebuah direktori dan demonstrasikan 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 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 bukan mask::rwx
seperti saat direktori dibuat?
Periksa luvly
log file 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 topeng diatur ke rwx
ketika direktori dibuat, Anda akan mengharapkan perilaku yang sama untuk pembuatan file, tetapi tidak seperti itu. Itu karena kernel memanggil open()
berfungsi dengan izin default 0666
.
Untuk meringkas
- File tidak akan mendapatkan izin eksekusi (masking atau efektif). Tidak masalah metode mana yang kami gunakan:ACL, umask, atau mask &ACL.
- Direktori bisa mendapatkan izin eksekusi, tetapi itu tergantung pada bagaimana kolom masking disetel.
- Satu-satunya cara untuk mengatur izin eksekusi untuk file yang berada di bawah izin ACL adalah dengan mengaturnya secara manual menggunakan
chmod
.
Referensi
- halaman manual acl
untuk tujuan keamanan, sistem operasi linux tidak mengizinkan pembuatan file secara otomatis dengan bit eksekusi. Ini untuk mencegah penyerang dunia maya menulis program ke dalam file tersebut dan mengeksekusinya jika mereka mendapatkan akses ke server Anda. Itu hanya tindakan pencegahan keamanan. Anda selamanya harus secara manual mengatur bit eksekusi pada file setelah membuatnya dengan utilitas chmod