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.

umaskFile baru (dari 666)Direktori baru (dari 777)Pemakaian umum
022644 (rw-r--r--)755 (rwxr-xr-x)standar pada server dan banyak instalasi
002664 (rw-rw-r--)775 (rwxrwxr-x)user biasa Debian/Ubuntu dengan user private group
077600 (rw-------)700 (rwx------)ruang kerja privat, hanya owner
000666 (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:

bash
umask 022
umask
umask -S

Output yang Dihasilkan:

text
0022
u=rwx,g=rx,o=rx
  1. Baris 1 (umask 022): mengganti mask sesi shell ini menjadi 022; perubahan berlaku untuk file yang dibuat setelah baris ini dijalankan.
  2. Baris 2 (umask): mencetak 0022 — empat digit oktal. Digit paling kiri adalah tempat special permissions (dibahas pada Chapter Special Permissions ); tiga digit berikutnya adalah owner, group, other.
  3. Baris 3 (umask -S): bentuk simbolik sisa permission untuk direktori baru — g=rx,o=rx adalah sisa setelah pemotongan 022.

Membuktikan dengan touch dan stat #

Teori tersebut bisa dibuktikan dalam satu blok: set umask, buat file dan direktori, lalu tampilkan mode oktalnya dengan stat:

bash
umask 022
printf 'laporan triwulan pertama\n' > laporan.txt
mkdir -p arsip
stat -c '%a %n' laporan.txt arsip

Output yang Dihasilkan:

text
644 laporan.txt
755 arsip
  1. Baris 1: memastikan mask sesi adalah 022 sehingga hasil tidak bergantung pada nilai bawaan di komputer masing-masing.
  2. Baris 2: redirection > membuat file baru; mode dasar 666 dipotong menjadi 644 — group dan other kehilangan bit w.
  3. Baris 3: mkdir membuat direktori; mode dasar 777 menjadi 755. Bit x untuk group dan other dipertahankan karena kemampuan traverse dibutuhkan agar isi folder bisa diakses.
  4. 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:

bash
umask 077
printf 'ide produk baru\n' > ide.txt
mkdir -p rahasia-bisnis
stat -c '%a %n' ide.txt rahasia-bisnis

Output yang Dihasilkan:

text
600 ide.txt
700 rahasia-bisnis

Hasilnya 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:

bash
echo 'umask 027' >> ~/.bashrc

Baris 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 .