Pertanyaan Apa itu "umask" dan bagaimana cara kerjanya?


Saya percaya bahwa umask adalah sesuatu yang mengendalikan hak akses file, tetapi tidak sepenuhnya memahaminya.

Setelah berlari umask 0644 di sebuah terminalSaya tidak bisa membaca file yang saya buat dengan editor teks baris perintah nano. Saya perhatikan bahwa izin dari file itu diatur ke 0022 bukan default 0755.

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

  1. Apa itu umask sebenarnya? Jelaskan kepada saya seperti saya adalah "Linux noob"
  2. Bagaimana cara menghitung dengan umask?
  3. Apa yang digunakan untuk umask?

159
2018-05-22 20:42


asal


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


Jawaban:


Umask bertindak sebagai seperangkat izin yang aplikasi tidak dapat diatur pada file. Ini adalah topeng pembuatan mode file untuk proses dan tidak dapat diatur 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.

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

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

Sebaliknya, sebuah umask dari 000 akan membuat direktori yang baru dibuat dapat dibaca, dapat ditulis, dan tidak dapat dimasuki oleh semua orang (izinnya akan 777). Seperti umask sangat tidak aman dan Anda tidak boleh mengatur umask ke 000.

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

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

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 yang lain, katakan 077, jalankan:

umask 077

Untuk menguji apakah pengaturan ini berfungsi atau tidak, Anda dapat membuat baru file (izin file dari file yang sudah ada tidak akan terpengaruh) dan menunjukkan informasi tentang file, 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 diwariskan oleh proses yang dimulai dari shell yang sama. Sebagai contoh, mulai editor teks GEdit dengan mengeksekusi gedit di terminal dan simpan 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 menggunakan sistem yang dibagikan oleh banyak pengguna, diharapkan orang lain tidak dapat membaca file di direktori home Anda. Untuk itu, umask sangat berguna. Edit ~/.profile dan tambahkan baris baru dengan:

umask 007

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

chmod -R o-rwx ~

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


125
2018-05-22 20:59



Jadi, apa arti digit dalam umask? Kenapa 777 berarti bahwa kelompok dan orang lain akan dapat menuliskannya, sementara 077 berarti mereka tidak bisa? - HelloGoodbye
Juga, Anda mengatakan bahwa jika umask itu 000, izin file akan 777. Jadi dengan topeng default 022, bukankah seharusnya izin file 755, yaitu sesuai dengan -rwxr-xr-xtidak -rw-r--r--? - HelloGoodbye
Harus akui, penjelasan ini membuatku bingung lebih daripada itu membantuku. - Connel Hooley
catatan bahwa Umask default Ubuntu berubah menjadi 0002 hanya satu bulan setelah jawaban ini diposkan. - Jeff Puckett
@HelloGoodbye jika umask itu 000 maka tidak ada izin yang akan dihapus. aplikasi seperti touch dan nano buat file dengan default 666 jadi izin file akan tetap ada 666 tapi umask 022 akan menghapus bit menulis untuk grup dan lainnya, jadi 666 direduksi menjadi 644 aka -rw-r--r-- Mempertimbangkan mkdir yang menciptakan mode default 777 dengan umask 022 akan mengurangi izin untuk 755 - Jeff Puckett


Selain diskusi yang bagus dalam jawaban yang diterima, ada baiknya menambahkan beberapa poin lagi umask, dengan mengacu pada bagaimana itu dikelola di 12.04 dan seterusnya.

Umask dan pam_umask

Umask default sekarang dalam /etc/login.defs dan tidak dalam /etc/profile, seperti catatan resmi di /etc/profile membaca:

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

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

Pam_umask adalah salah satu dari banyak yang penting Modul PAM yang sangat penting dalam operasi Ubuntu (jalankan apropos '^pam_' untuk menemukan manpages untuk yang lain). Dalam manpage untuk pam_umask dicatat bahwa

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

Catatan pada umask default

Folder baru di $HOME dapat dibuat oleh mkdir dengan izin dan file default 775 dibuat dengan touch dengan perizinan default 664 bahkan ketika default umask adalah 022. Ini tampaknya, pada awalnya, kontradiktif, dan layak dijelaskan.

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

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

Oleh karena itu, mengapa Anda melihat yang berikut ini stat ketika folder baru dibuat dengan mkdir pada sistem pengguna tunggal seperti saya (uid dan gid adalah sama):

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

Untuk informasi lebih lanjut, lihat man pam_umask dan Ubuntu manpages online.


34
2018-04-02 00:16



Sepertinya bagian kedua Anda kehilangan sesuatu? (USERGROUP_ENABLE?) +1 untuk informasi terbaru - Lekensteyn
@Lekensteyn Anehnya, pengaturan masuk /etc/login.defs pasti USERGROUPS_ENAB yes setelah memeriksanya. Sintaks file itu sedikit tidak biasa.
Saya baru saja memeriksa file dan sumbernya dan Anda benar, pengaturan ini (dan beberapa lainnya) secara membingungkan dinamai "_ENAB". - Lekensteyn


Ini cukup tua, tapi ini layak disebut. Untuk menghitung umask, tidak seperti izin sistem file. Umat ​​oktal dihitung melalui bitwise AND dari komplemen unary dari argumen menggunakan bitwise NOT. 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

Maka 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 mengurangkan umask dari izin dasar untuk menentukan izin akhir untuk file sebagai berikut:

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

Menghitung Izin Final Untuk Direktori

Anda cukup mengurangkan 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 dari direktori baru (777-022) : 755 (rwxr-xr-x)

29
2018-04-06 08:27



Saya tidak berpikir itulah bagaimana izin terakhir dihitung, bagaimana jika nilai Unmask adalah 077 bagaimana Anda mengurangi 666-077 dalam hal itu ? - Sufiyan Ghori
@SufiyanGhori Penjelasan Baron tidak lengkap untuk izin file. Dalam kasus Anda dan perhitungan di masa mendatang, agar mudah diingat, Anda harus ingat untuk menguranginya dengan cara ini: 6-0 6-7 6-7 jika hasil apa pun dari ketiganya adalah -1 maka biarlah 0. Jadi kami memiliki hasil akhir 600 - Huy.PhamNhu
@ Huy.PhamNhu Itu tidak benar juga. Dengan izin dasar 666 dan umask 033 Anda pasti tidak akan mendapatkan 633. - maaartinus
Tidak tidak Tidak. Anda tidak dapat menggunakan pengurangan untuk menghitung umask (ia bekerja dengan nilai-nilai tertentu, tetapi tidak semua). Anda harus memikirkan umask sebagai "disable bits". Lihat jawaban lain oleh Sufiyan dan Wisbucky. - wisbucky


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

Pertama-tama, "Mask" tidak berarti "kurangi", dalam arti aritmatika - tidak ada pinjaman atau carry yang terlibat, kedua, umask adalah topeng; itu bukan angka yang harus dikurangkan.

Ketiga, topeng mematikan bit izin. Jika mereka sudah off, the umask tidak mengubah izin,

Misalnya, anggap bahwa Anda harus membuka kedok 077 dari default sistem untuk file yang 666 dan direktori yang mana 777.

Perintah yang akan Anda gunakan adalah,

umask 077

(nilai undokop dalam biner, 000 111 111)

Apa yang akan di-unmask ini adalah akan mematikan enam LSB pertama (paling tidak signifikan) jika memang demikian 1 dan tidak akan membuat perubahan jika ada yang sudah mati.

Di sini adalah bagaimana izin akhir dihitung:

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

Amati bagaimana keduanya 110 nilai telah diubah menjadi 000.

Demikian pula,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

24
2018-06-05 14:09



ini seharusnya menjadi jawabannya! - Abdelouahab
@SufiyanGhori Jadi jika umask 177 (001 111 111), itu akan mematikan pertama 7 bit paling tidak signifikan jika mereka 1 - Kasun Siyambalapitiya
itu benar @KasunSiyambalapitiya - Sufiyan Ghori


Konsep dasar:

Jika Anda seperti kebanyakan manusia dan tidak mengerti apa-apa "Oktal umasks dihitung melalui bitwise AND dari komplemen unary dari argumen menggunakan bitwise NOT" berarti, inilah penjelasan sederhana saya:

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

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

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

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

Perhitungan:

Berikut ini contoh penghitungan untuk file baru (izin default 666) 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 itulah bagaimana Anda berakhir dengan hasil 644 saat Anda membuat file baru.

Cara yang lebih mudah:

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

  • umask u=rwx,g=rx,o=rx berarti memungkinkan melewati user rwx, group rx, other rx. Yang berarti menonaktifkan group w, others w. Jika Anda menjalankan perintah ini, maka periksa umask, kamu akan mendapatkan 022.
  • umask u=rwx,g=,o= berarti memungkinkan melewati user rwx. Yang berarti menonaktifkan semua akses untuk group dan others. Jika Anda menjalankan perintah ini, maka periksa umask, kamu akan mendapatkan 077.

Perhitungan bonus:

Jika Anda benar-benar ingin mengerti apa "Oktal umasks dihitung melalui bitwise AND dari komplemen unary dari argumen menggunakan bitwise NOT" berarti, inilah beberapa tabel logika yang dapat membantu menunjukkan. Ingat, sedikit topeng 1 artinya nonaktifkan, 0 berarti 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 ini sederhana saja AND tabel logika!

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 rumusnya adalah: result = perm AND (NOT mask)


9
2018-04-03 22:30