Setiap file baru yang kita buat — lewat touch, editor teks, atau redirection — tidak lahir dengan permission acak. Kernel menyiapkan mode dasar, yaitu 666 untuk file dan 777 untuk direktori, lalu memotongnya dengan sebuah mask yang disebut umask (user file creation mode mask). Berkat mask inilah file baru pada umumnya tampil 644, bukan 666 yang bisa ditulis siapa saja. Chapter ini membongkar cara kerja mask tersebut, membuktikan hasilnya dengan touch dan stat, lalu mengatur umask yang sesuai untuk ruang kerja privat — kelanjutan dari pembahasan chmod pada Chapter chmod dan chown
.
Mask yang Memotong Mode Dasar #
Mode dasar 666 dan 777 menyediakan semua bit baca dan tulis sejak awal; umask bertugas mematikan bit yang tidak diinginkan. Setiap bit yang diset pada umask akan dihapus dari mode dasar pada saat file dibuat. Contoh paling umum adalah 022: digit pertama tidak memotong apa pun untuk owner, sedangkan digit kedua dan ketiga menghapus bit w untuk group dan other.
| umask | File baru (dari 666) | Direktori baru (dari 777) | Pemakaian umum |
|---|---|---|---|
022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) | standar pada server dan banyak instalasi |
002 | 664 (rw-rw-r--) | 775 (rwxrwxr-x) | user biasa Debian/Ubuntu dengan user private group |
077 | 600 (rw-------) | 700 (rwx------) | ruang kerja privat, hanya owner |
000 | 666 (rw-rw-rw-) | 777 (rwxrwxrwx) | tanpa pemotongan — hampir tidak pernah diinginkan |
Melihat dan Mengatur umask #
Perintah umask adalah shell builtin. Dipanggil tanpa argumen, perintah ini menampilkan mask yang berlaku; dipanggil dengan satu nilai oktal, perintah ini mengganti mask untuk shell yang sedang berjalan beserta proses turunannya. Option -S menampilkan bentuk simbolik — permission yang tersisa untuk direktori baru, bukan bit yang dipotong. Nilai bawaan berbeda-beda antar sistem, jadi kita set dulu agar hasilnya bisa diprediksi:
umask 022
umask
umask -SOutput yang Dihasilkan:
0022
u=rwx,g=rx,o=rx- Baris 1 (
umask 022): mengganti mask sesi shell ini menjadi022; perubahan berlaku untuk file yang dibuat setelah baris ini dijalankan. - Baris 2 (
umask): mencetak0022— empat digit oktal. Digit paling kiri adalah tempat special permissions (dibahas pada Chapter Special Permissions ); tiga digit berikutnya adalah owner, group, other. - Baris 3 (
umask -S): bentuk simbolik sisa permission untuk direktori baru —g=rx,o=rxadalah sisa setelah pemotongan022.
Membuktikan dengan touch dan stat #
Teori tersebut bisa dibuktikan dalam satu blok: set umask, buat file dan direktori, lalu tampilkan mode oktalnya dengan stat:
umask 022
printf 'laporan triwulan pertama\n' > laporan.txt
mkdir -p arsip
stat -c '%a %n' laporan.txt arsipOutput yang Dihasilkan:
644 laporan.txt
755 arsip- Baris 1: memastikan mask sesi adalah
022sehingga hasil tidak bergantung pada nilai bawaan di komputer masing-masing. - Baris 2: redirection
>membuat file baru; mode dasar666dipotong menjadi644— group dan other kehilangan bitw. - Baris 3:
mkdirmembuat direktori; mode dasar777menjadi755. Bitxuntuk group dan other dipertahankan karena kemampuan traverse dibutuhkan agar isi folder bisa diakses. - Baris 4:
stat -c '%a %n'mencetak mode oktal beserta nama file.
Dua hal penting dari mekanisme ini: umask hanya berlaku pada pembuatan file — mengubah umask tidak menyentuh file yang sudah ada, untuk itu kita tetap memakai chmod — dan program pembuat file bisa meminta mode lebih ketat lewat syscall-nya sendiri, seperti ssh-keygen yang selalu membuat kunci privat 600.
umask 077 untuk Ruang Kerja Privat #
Pada komputer yang dipakai bersama beberapa user, umask 022 terlalu terbuka untuk dokumen kerja: siapa pun bisa membaca isi folder home kita. Mask 077 memotong seluruh bit untuk group dan other sehingga file baru benar-benar hanya milik pembuatnya:
umask 077
printf 'ide produk baru\n' > ide.txt
mkdir -p rahasia-bisnis
stat -c '%a %n' ide.txt rahasia-bisnisOutput yang Dihasilkan:
600 ide.txt
700 rahasia-bisnisHasilnya 600 untuk file dan 700 untuk direktori — di luar owner, tidak ada yang membaca apa pun. Konsekuensinya: rekan satu tim tidak bisa memeriksa pekerjaan kita tanpa chmod manual, jadi mask ini paling cocok untuk folder pribadi seperti ~/.ssh atau draf dokumen sensitif. Untuk folder proyek bersama, justru 002 atau Chapter Access Control Lists
yang tepat.
Per Sesi atau Permanen #
Perubahan umask hanya menempel pada shell tempat perintah itu dijalankan; shell baru kembali membaca nilai bawaan sistem. Nilai bawaan itu berasal dari konfigurasi login seperti /etc/login.defs dan modul pam_umask yang dibahas pada Chapter Authentication Basics
; detail lengkap mekanismenya ada di halaman manual umask(2)
. Debian dan Ubuntu memberi user biasa nilai 002 — longgar di posisi group — karena setiap user memiliki user private group yang tidak beranggota siapa pun selain dirinya sendiri, konsep yang dijelaskan di wiki Debian tentang User Private Groups
.
Untuk mengatur umask secara permanen per user, tambahkan satu baris di akhir ~/.bashrc:
echo 'umask 027' >> ~/.bashrcBaris tersebut membuat setiap shell interaktif baru mengeset mask 027 — file baru 640, direktori baru 750 — sebelum kita mengetik perintah pertama. Nilai ini jalan tengah yang layak: group masih bisa membaca, other tidak mendapat apa-apa.
Dengan umask, permission file baru terkendali sejak detik pertama file itu lahir. Pertanyaan berikutnya menyangkut pekerjaan yang menuntut hak lebih tinggi dari user biasa: mengubah file sistem, memasang paket, menghentikan service. Linux menjawabnya dengan akun root dan mekanisme elevasi perintah sudo — materi Chapter sudo dan root
.