Perintah umask Linux: pahami 022, 027, dan izin berkas baru
Perintah umask menetapkan bit izin yang dibatasi ketika shell saat ini dan proses turunannya membuat berkas atau direktori baru. Umask tidak mengubah izin berkas yang sudah ada. Hasil pembuatan juga bergantung pada mode yang diminta program serta kebijakan sistem berkas.
Sintaks dan arti mask
umask [-S] [MASK]
MASK adalah penanda nilai yang Anda pilih. Dalam Bash, umask merupakan perintah bawaan shell; periksa help umask untuk perilaku versi terpasang. Tanpa nilai mask, perintah membaca pengaturan saat ini. Nilai angka diperlakukan sebagai bilangan oktal, yaitu basis delapan.
Mask menyebut izin yang hendak dibatasi, bukan izin akhir yang langsung diberikan ke semua berkas. Program masih menentukan mode yang diminta saat membuat suatu objek. Umask dapat menghapus bit dari permintaan tersebut, tetapi tidak menambahkan bit yang sejak awal tidak diminta.
Baca pengaturan saat ini
umask
Hasilnya berupa mask dalam notasi oktal, misalnya 0022 atau 0027. Nol di depan tidak mengubah bit mask. Jangan menyamakan keluaran 0027 dengan mode akhir sebuah berkas; yang sedang dibaca adalah batas pada shell ini.
Periksa pengaturan pada shell atau proses yang memang membuat berkas. Membaca umask pada terminal lain tidak otomatis menjelaskan pengaturan layanan atau kontainer yang berbeda.
Lihat bentuk simbolis
umask -S
Dalam Bash, -S menyajikan pengaturan dalam bentuk izin yang diizinkan secara simbolis. Misalnya, mask 027 dapat ditampilkan sebagai u=rwx,g=rx,o=. Huruf u, g, dan o menyatakan pemilik, kelompok, serta pengguna lain.
Bentuk itu belum berarti berkas biasa akan mempunyai bit eksekusi. Jika program membuat berkas dengan permintaan 666 tanpa eksekusi, hasilnya tetap tidak mendapat eksekusi hanya karena huruf x muncul dalam tampilan simbolis umask.
Ubah mask dan siapkan cara mengembalikannya
Sebelum menjalankan contoh perubahan, simpan nilai awal pada shell yang sama dengan mask_awal=$(umask). Gunakan nama variabel itu untuk latihan ini dan jangan menggantinya sebelum pemulihan.
umask 027
umask
Nilai 027 membatasi izin tulis kelompok dan seluruh izin pengguna lain. Pada Bash, pembacaan setelahnya biasanya menunjukkan 0027. Pengaturan ini berlaku pada shell yang menjalankannya dan diwarisi proses turunan yang tidak mengubah mask sendiri.
Sesudah latihan selesai, pulihkan dengan umask "$mask_awal", lalu jalankan umask untuk memeriksa hasilnya. Mengembalikan mask hanya memengaruhi pembuatan objek selanjutnya; izin objek yang sudah dibuat selama latihan tidak ikut dipulihkan.
Hitung bit yang tersisa
Tanpa default Access Control List (ACL), yaitu aturan akses bawaan pada direktori, prinsipnya adalah mode_diminta & ~mask: bit dalam mask dihapus dari mode permintaan. Ini operasi bit, bukan pengurangan angka biasa.
- Dengan permintaan berkas 666 dan mask 022, izin dasar yang tersisa adalah 644.
- Dengan permintaan direktori 777 dan mask 022, izin dasar yang tersisa adalah 755.
- Dengan mask 027, permintaan 666 menjadi 640 dan permintaan 777 menjadi 750.
Angka 666 dan 777 merupakan permintaan yang lazim untuk contoh berkas biasa dan direktori, bukan kewajiban semua program. Program yang meminta mode lebih sempit tetap menghasilkan izin yang lebih sempit.
Buat berkas dan direktori baru untuk memeriksa hasil
Jalankan di direktori latihan baru yang belum mempunyai demo.txt atau demo-dir. Pastikan nilai awal sudah disimpan jika memakai shell yang akan dilanjutkan untuk pekerjaan lain. Touch pada berkas yang sudah ada tidak menghitung ulang izinnya sebagai berkas baru.
umask 027
umask
touch demo.txt
mkdir demo-dir
stat -c '%a %n' demo.txt demo-dir
Contoh hasil pada lingkungan yang menerapkan mode izin Unix tersebut dan tidak mempunyai default ACL yang mengubah perhitungan:
0027
640 demo.txt
750 demo-dir
Baris 0027 berasal dari pembacaan umask. Dua baris berikutnya berasal dari GNU stat: %a menampilkan mode numerik dan %n nama objek. Mode 640 memberi pemilik baca+tulis, kelompok baca, serta pengguna lain tanpa izin dasar. Mode direktori 750 memberi pemilik baca+tulis+penelusuran, kelompok baca+penelusuran, dan pengguna lain tanpa izin dasar.
Setelah memeriksa hasil, pulihkan mask awal sesuai langkah sebelumnya. Jangan menimpa berkas atau menghapus direktori kerja hanya agar contoh dapat dijalankan ulang; gunakan lokasi latihan baru bila nama contoh sudah ada.
Ringkasan nilai dan opsi Bash
| Nilai atau opsi | Arti |
|---|---|
022 |
Membatasi tulis kelompok dan tulis pengguna lain. |
027 |
Membatasi tulis kelompok dan seluruh izin pengguna lain. |
-S |
Menampilkan bentuk simbolis ketika nilai mode tidak diberikan. |
-p |
Dalam Bash, menampilkan pengaturan dalam bentuk yang dapat digunakan kembali sebagai perintah. |
Misalnya, umask -p dapat menghasilkan umask 0027 ketika mask sekarang 027. Opsi dan bentuk perintah bawaan shell dijelaskan dalam manual Bash, bagian perintah bawaan umask.
Pahami batas shell dan kebijakan sistem berkas
Perubahan di dalam shell anak tidak mengubah mask shell induk. Menjalankan skrip sebagai proses terpisah juga tidak mengubah pengaturan shell yang memanggilnya. Login shell, pengelola layanan, atau kontainer dapat menetapkan mask sendiri, jadi periksa konteks pembuatan yang sebenarnya.
Jika direktori induk mempunyai default ACL, Linux dapat memakai ACL warisan untuk menetapkan izin dan mengabaikan umask dalam jalur perhitungan itu; izin yang tidak diminta program tetap dihapus. Karena itu, jangan menjanjikan hasil 640 atau 750 pada semua sistem berkas hanya dari nilai mask. Rinciannya tersedia dalam manual Linux tentang mask pembuatan berkas.
Jika angka hasil berbeda, periksa mode permintaan program, default ACL, dan dukungan izin pada sistem berkas. Untuk mengubah berkas yang sudah ada, gunakan chmod untuk mengubah serta membaca ulang izin. Mengganti umask bukan pengganti operasi tersebut.
FAQ
Apakah umask 022 mengubah berkas lama menjadi 644?
Tidak. Umask mengatur batas saat objek baru dibuat oleh proses yang menggunakan mask itu. Izin berkas lama tetap perlu diperiksa dan diubah secara terpisah bila diperlukan.
Apakah umask yang lebih longgar membuat semua berkas bisa dieksekusi?
Tidak. Umask tidak menambahkan bit yang tidak diminta program pembuat. Berkas biasa yang diminta dengan mode 666 tidak memperoleh eksekusi hanya dengan melonggarkan mask.




