Apa itu "umask" dan bagaimana cara kerjanya?

190

Saya percaya bahwa umask adalah sesuatu yang mengontrol izin file , tetapi tidak sepenuhnya memahaminya.

Setelah berjalan umask 0644di terminal , saya tidak bisa membaca file yang saya buat dengan editor teks baris perintah nano. Saya perhatikan bahwa izin file itu ditetapkan 0022sebagai ganti default 0755.

Bagaimana cara kerja umask? Saya pikir saya bisa menghapus setiap digit di umask dari 0777, 7 - 6 = 1dan 7 - 4 = 3, jadi saya berharap izinnya seperti itu 0133, tetapi ternyata, ini bukan masalahnya.

  1. Apa itu umask? Jelaskan kepada saya seperti saya adalah "Linux noob"
  2. Bagaimana saya menghitung dengan umask?
  3. Apa gunanya kasing untuk umask?
Lekensteyn
sumber
app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
grabantot

Jawaban:

143

Umask bertindak sebagai seperangkat izin yang aplikasi tidak dapat atur pada file. Ini adalah topeng pembuatan mode file untuk proses dan tidak dapat ditetapkan untuk direktori itu sendiri. Sebagian besar aplikasi tidak akan membuat file dengan mengeksekusi set izin, sehingga mereka akan memiliki default 666, yang kemudian dimodifikasi oleh umask.

Karena Anda telah mengatur umask untuk menghapus bit baca / tulis untuk pemilik dan bit baca untuk yang lain, default seperti 777dalam aplikasi akan menghasilkan hak akses file 133. Ini berarti bahwa Anda (dan orang lain) dapat mengeksekusi file, dan orang lain akan dapat menulis ke sana.

Jika Anda ingin membuat file tidak dapat dibaca / ditulis / dieksekusi oleh siapa pun kecuali pemiliknya, Anda harus menggunakan umask seperti 077untuk mematikan izin tersebut untuk grup & lainnya.

Sebaliknya, umask of 000akan membuat direktori yang baru dibuat dapat dibaca, ditulis dan diturunkan untuk semua orang (izinnya akan 777). Umask seperti itu sangat tidak aman dan Anda tidak boleh mengatur umask 000.

Umask default pada Ubuntu adalah 022yang berarti bahwa file yang baru dibuat dapat dibaca oleh semua orang, tetapi hanya dapat ditulis oleh pemilik:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Mulai di Ubuntu Oneiric (11.10), umask default telah dilonggarkan 002, yang memperluas akses tulis ke grup pemilik:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Melihat dan memodifikasi umask

Untuk melihat pengaturan umask Anda saat ini, buka terminal dan jalankan perintah:

umask

Untuk mengubah pengaturan umask dari shell saat ini ke sesuatu yang lain, katakan 077, jalankan:

umask 077

Untuk menguji apakah pengaturan ini berfungsi atau tidak, Anda dapat membuat file baru (izin file dari file yang sudah ada tidak akan terpengaruh) dan menampilkan informasi tentang file tersebut, jalankan:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Pengaturan umask diwarisi oleh proses yang dimulai dari shell yang sama. Misalnya, mulai editor teks GEdit dengan mengeksekusi geditdi terminal dan menyimpan file menggunakan gedit. Anda akan melihat bahwa file yang baru dibuat dipengaruhi oleh pengaturan umask yang sama seperti di terminal.

Use case: sistem multi-pengguna

Jika Anda berada di sistem yang dibagikan oleh banyak pengguna, itu diinginkan agar orang lain tidak dapat membaca file di direktori home Anda. Untuk itu, umask sangat berguna. Edit ~/.profiledan tambahkan baris baru dengan:

umask 007

Anda harus masuk kembali agar perubahan umask ini ~/.profileberlaku. Selanjutnya, Anda perlu mengubah izin file yang ada file di direktori home Anda dengan menghapus bit baca, tulis, dan eksekusi untuk dunia. Buka terminal dan jalankan:

chmod -R o-rwx ~

Jika Anda ingin pengaturan umask ini diterapkan ke semua pengguna pada sistem, Anda dapat mengedit file profil seluruh sistem di /etc/profile.

ajmitch
sumber
3
Jadi, apa arti angka dalam umask? Mengapa 777berarti bahwa kelompok dan orang lain akan dapat menulis kepadanya, sementara itu 077berarti mereka tidak bisa?
HelloGoodbye
3
Juga, Anda mengatakan bahwa jika umask itu 000, izin file akan 777. Jadi dengan mask default 022, bukankah seharusnya hak akses file 755, yaitu sesuai dengan -rwxr-xr-x, bukan -rw-r--r--?
HelloGoodbye
12
Harus saya akui, penjelasan ini membingungkan saya lebih dari itu membantu saya.
Connel Hooley
8
perhatikan bahwa umask default Ubuntu berubah menjadi 0002 hanya satu bulan setelah jawaban ini diposting.
Jeff Puckett
7
@ HaloGoodbye jika umask 000maka tidak ada izin yang akan dihapus. aplikasi suka touchdan nanomembuat file dengan standar 666sehingga izin file akan tetap 666tetapi umask 022akan menghapus bit tulis untuk grup dan yang lainnya, jadi 666dikurangi menjadi 644alias -rw-r--r--Pertimbangkan mkdirmode pembuatan default 777dengan umask apa yang 022akan mengurangi izin untuk755
Jeff Puckett
38

Selain diskusi yang baik dalam jawaban yang diterima, ada baiknya menambahkan beberapa poin tentang umask, dengan mengacu pada bagaimana hal itu dikelola dalam 12,04 dan seterusnya.

Umask dan pam_umask

Umask default sekarang dalam /etc/login.defsdan tidak dalam /etc/profile, seperti catatan resmi /etc/profileberbunyi:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umaskdijelaskan secara singkat di bawah ini, dan harus dikatakan bahwa file default untuk pengguna untuk menempatkan pengaturan umask kustomnya masih ~/.profile.

Pam_umaskadalah salah satu dari banyak modul PAM penting yang sangat penting dalam operasi Ubuntu (jalankan apropos '^pam_'untuk menemukan halaman manual untuk yang lainnya). Di halaman manual untuk pam_umaskdicatat bahwa

pam_umask adalah modul PAM untuk mengatur topeng mode pembuatan file dari lingkungan saat ini. Umask memengaruhi izin default yang ditetapkan untuk file yang baru dibuat.

Catatan tentang umask default

Folder baru di $HOMEdapat dibuat mkdirdengan izin 775 default dan file yang dibuat dengan touchizin 664 default bahkan ketika umask defaultnya adalah 022. Ini tampaknya, pada awalnya, bertentangan, dan layak untuk dijelaskan.

Meskipun umask default adalah 022 di Ubuntu, ini bukan keseluruhan cerita, karena ada pengaturan di /etc/login.defsyang memungkinkan umask menjadi 002 untuk pengguna non-root jika kondisi terpenuhi (lihat kutipan di bawah). Pada instalasi normal, /etc/login.defsberisi pengaturan USERGROUPS_ENAB yes. Ini adalah apa

Mengaktifkan pengaturan bit grup umask agar sama dengan bit pemilik (contoh: 022 -> 002, 077 -> 007) untuk pengguna non-root, jika uid sama dengan gid, dan nama pengguna sama dengan primer nama grup.

Karenanya mengapa Anda melihat yang berikut dengan statketika folder baru dibuat dengan mkdirpada sistem pengguna tunggal seperti milik saya (uid dan gid adalah sama):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Untuk informasi lebih lanjut, lihat man pam_umaskdan manual Ubuntu online .

Alex
sumber
Sepertinya bagian kedua Anda kehilangan sesuatu? (USERGROUP_ENABLE?) +1 untuk informasi yang diperbarui
Lekensteyn
2
@Lekensteyn Anehnya, pengaturan di /etc/login.defssudah pasti USERGROUPS_ENAB yessetelah memeriksanya. Sintaks file itu sedikit tidak biasa.
Saya baru saja memeriksa file dan sumbernya dan Anda benar, pengaturan ini (dan beberapa lainnya) membingungkan bernama "_ENAB".
Lekensteyn
33

Ini cukup tua, tetapi ini layak disebut. Untuk menghitung umask, tidak seperti izin sistem file. Payung oktal dihitung melalui bitwise DAN dari komplemen unary dari argumen menggunakan bitwise TIDAK. Notasi oktal adalah sebagai berikut:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Kemudian Anda dapat menghitung untuk menetapkan umask yang tepat seperti:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Menghitung Izin Akhir Untuk File

Anda cukup mengurangi umask dari izin dasar untuk menentukan izin final untuk file sebagai berikut:

666 – 022 = 644
  • Izin basis file: 666
  • nilai umask: 022
  • kurangi untuk mendapatkan izin file baru (666-022):644 (rw-r–r–)

Menghitung Izin Akhir Untuk Direktori

Anda cukup mengurangi umask dari izin dasar untuk menentukan izin akhir untuk direktori sebagai berikut:

777 – 022 = 755
  • Izin basis direktori: 777
  • nilai umask: 022
  • Kurangi untuk mendapatkan izin direktori baru (777-022):755 (rwxr-xr-x)
amrx
sumber
3
Saya tidak berpikir itulah bagaimana permissons akhir dihitung, bagaimana jika nilai membuka kedoknya adalah 077bagaimana Anda mengurangi 666-077dalam kasus itu?
Sufiyan Ghori
5
Penjelasan @SufiyanGhori Baron tidak lengkap untuk izin file. Dalam kasus Anda dan perhitungan apa pun di masa mendatang, agar mudah diingat, Anda harus ingat untuk mengurangkannya dengan cara ini: 6-0 6-7 6-7 jika ada hasil dari ketiganya adalah -1 maka biarlah 0. Jadi, kami memiliki hasil akhir 600
Huy.PhamNhu
1
@ Huy.PhamNhu Itu juga tidak benar. Dengan izin dasar 666 dan umask dari 033 Anda pasti tidak akan mendapatkan 633.
maaartinus
7
Tidak tidak Tidak. Anda tidak dapat menggunakan pengurangan untuk menghitung umask (berfungsi dengan nilai-nilai tertentu, tetapi tidak semua). Anda harus menganggap umask sebagai "disable bits". Lihat jawaban lain oleh Sufiyan dan Wisbucky.
wisbucky
33

Yang lain menjawab telah menjelaskan dengan baik konsep umasking dan mengapa itu diperlukan. Biarkan saya menambahkan dua sen saya dan memberi Anda contoh matematis tentang bagaimana perizinan sebenarnya dihitung.

Pertama-tama, "Topeng" tidak berarti "kurangi", dalam arti aritmatika - tidak ada pinjaman atau barang yang terlibat, kedua, itu umaskadalah topeng; ini bukan angka yang harus dikurangi.

Ketiga, topeng mematikan bit izin. Jika sudah tidak aktif, maka umasktidak ada perubahan pada izin,

Sebagai contoh, asumsikan bahwa Anda harus membuka kedok 077dari default sistem untuk file yang ada 666dan direktori mana 777.

Perintah yang akan Anda gunakan adalah,

umask 077

(buka tab nilai dalam biner, 000 111 111)

Apa yang akan dilakukan unmask ini adalah akan mematikan salah satu dari enam LSB pertama (bit paling tidak signifikan) jika ada 1dan tidak akan membuat perubahan jika ada yang sudah mati.

Berikut adalah bagaimana izin final dihitung:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Amati bagaimana kedua 110nilai berubah menjadi 000.

Demikian pula,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
Sufiyan Ghori
sumber
7
ini seharusnya jawabannya!
Abdelouahab
@SufiyanGhori Jadi jika umask 177(001 111 111), itu akan mematikan 7 bit paling tidak penting pertama jika mereka1
Kasun Siyambalapitiya
itu benar @KasunSiyambalapitiya
Ghori
1
begitu pula rumusnyaresult = file permission & (!umask)
Eric Hodgins
1
@EricHodgins: Ya, persis.
Amit Naidu
14

Konsep dasar:

Jika Anda seperti kebanyakan manusia dan tidak mengerti apa maksudnya "payung oktal dihitung melalui bitwise DAN dari komplemen unary dari argumen menggunakan bitwise TIDAK" artinya, inilah penjelasan sederhana saya:

Pertama-tama, pikirkan tentang apa itu "topeng". Topeng menghalangi sesuatu. Pikirkan selotip. Dalam hal ini, umask seperti selotip untuk memblokir / menonaktifkan izin saat membuat file atau direktori baru.

Izin default saat membuat dir baru adalah octal 777 (111 111 111), dan file baru adalah octal 666 (110 110 110). Kami mengatur umask untuk memblokir / menonaktifkan izin tertentu.

  • Sedikit topeng 1untuk memblokir / menonaktifkan izin itu (letakkan selotip di atasnya).
  • Sedikit topeng 0akan memungkinkan izin untuk melewati (tidak ada selotip di atas bit itu).

Jadi octal 022 (000 010 010)topeng berarti menonaktifkan group writedan others write, dan mengizinkan semua izin lainnya untuk lewat.

Perhitungan:

Berikut adalah contoh perhitungan untuk file baru (izin 666 default) dengan 022 umask:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Jadi begitulah Anda berakhir dengan hasil 644 saat Anda membuat file baru.

Cara yang lebih mudah:

Tetapi jika perhitungan topeng terbalik hanya membingungkan Anda, ada cara yang lebih mudah menggunakan notasi umask simbolis. Ketika Anda menggunakan metode ini, maka Anda hanya menentukan bit pass-through bukan bit mask.

  • umask u=rwx,g=rx,o=rxberarti memungkinkan melewati untuk user rwx, group rx, other rx. Yang menyiratkan menonaktifkan group w, others w. Jika Anda menjalankan perintah ini kemudian periksa umask, Anda akan mendapatkannya 022.
  • umask u=rwx,g=,o=berarti memungkinkan melewati user rwx. Yang menyiratkan menonaktifkan semua akses untuk groupdan others. Jika Anda menjalankan perintah ini kemudian periksa umask, Anda akan mendapatkannya 077.

Perhitungan bonus:

Jika Anda benar-benar ingin memahami apa "payung oktal dihitung melalui bitwise DAN dari komplemen unary dari argumen menggunakan bitwise TIDAK" artinya, inilah beberapa tabel logika yang dapat membantu menunjukkan. Ingat, sedikit topeng 1berarti menonaktifkan, 0berarti melewati.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Jika Anda membuat tabel dengan NOT(mask), sekarang hanya ANDtabel logika sederhana !

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Jadi rumus untuk itu adalah: result = perm AND (NOT mask)

wisbucky
sumber