Bagaimana umask dihitung di Linux?

15

Jadi saya tahu umaskdapat membatasi pengguna istimewa, menggunakan format ini umask ugo.

Saya mengerti bahwa read = 4, write = 2, dan exec = 1. Namun, ketika saya mengetik umask, ia mengembalikan 4 digit yang 0022atau 0073. Saya tidak mengerti bagaimana cara kerjanya sekarang karena ada angka tambahan. Apa digit tambahan itu dan apa 0022artinya?

Braiam
sumber

Jawaban:

18

Asumsikan topeng default 0666. umask0022 akan membuat topeng baru 0644 (0666-0022 = 0644) yang berarti bahwa grup dan orang lain telah membaca (tidak menulis atau mengeksekusi) izin.

Digit "ekstra" (angka pertama = 0), menentukan bahwa tidak ada mode khusus.

Jika mode dimulai dengan angka maka akan ditafsirkan sebagai oktal jika tidak dimaksudkan untuk menjadi simbolis.

0 adalah digit, seperti 1 (untuk bit yang lengket) atau 6 (untuk SGID). Perintah seperti chmoddapat dipanggil dengan metode lain, seperti di chmod ug+rw mydirmana Anda akan menambahkan izin baca dan tulis ke pengguna dan grup. Perhatikan bahwa mode dalam kasus ini (ug + rw) tidak dimulai dengan digit, sehingga tidak akan diartikan sebagai oktal tetapi lebih simbolis.

Lihat en.wikipedia.org/wiki/Chmod#Symbolic_examples untuk simbolik serta www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/ untuk sedikit tentang mode khusus.

Saya tidak tahu bahwa Anda akan membuka kedok bit pertama umask, tetapi secara teknis Anda bisa. Ini akan menjelaskan mengapa Anda hampir selalu melihatnya sebagai nol.

Kredit ke pinkfloydx33

Digit pertama dari mask berkaitan dengan izin khusus yang tidak begitu pas dengan pemilik / grup / model lainnya. Ketika empat digit disediakan untuk izin file, yang pertama merujuk pada nilai-nilai khusus:

4000 = SUID
2000 = SGID
1000 = sticky bit

Bit SUID, kependekan dari set-user-ID, menyebabkan program yang dapat dieksekusi dijalankan dengan id pengguna yang efektif (uid) dari pemilik - dengan kata lain, tidak peduli siapa yang mengeksekusinya, program dijalankan dengan hak-hak pemilik. Ini biasanya terlihat dalam program yang melakukan hal-hal yang memerlukan hak akses root, tetapi dimaksudkan untuk dijalankan oleh pengguna normal:passwd adalah salah satu contohnya.

Bit SGID, kependekan dari set-group-ID, sangat mirip, tetapi berjalan dengan id grup (gid) pemilik yang efektif .

Bit lengket sedikit lebih rumit, jika Anda ingin informasi lebih lanjut tentang itu, Anda dapat membaca halaman manualnya sticky.

Bit-bit ini juga dapat digunakan dengan direktori, tetapi artinya berubah.

Saya tidak percaya Anda dapat mengaturnya umask agar Anda dapat mengaktifkan bit tambahan ini secara default, tetapi Anda mungkin tidak akan pernah mau melakukannya.

Kredit ke pengguna470379

Braiam
sumber
1
Sebenarnya, Anda tidak dapat memberikan nilai bukan nol selain dalam 3 digit terakhir. Menurut Posix: "Interpretasi nilai mode yang menentukan bit mode file selain bit izin file tidak ditentukan." Menurut man 2 umask(panggilan sistem yang sesuai) "hanya bit izin file maskyang digunakan". Dalam bash, umask 1000 menghasilkan kesalahan: "angka oktal di luar jangkauan". Jadi mengapa 0 ekstra? Saya pikir itu hanya untuk menunjukkan bahwa angka tersebut dalam oktal.
rici
pastebin itu tidak memiliki referensi apa pun untuk umask, jadi saya tidak melihat bagaimana itu relevan. chmod memungkinkan tiga bit pertama untuk diatur, tetapi umask tidak mengizinkannya untuk ditutup-tutupi. (yaitu Anda bisa menulis chmod 6777 dropbox. Dan, omong-omong, juga chmod ug+s.)
rici
Ya, Anda benar, tidak tahu apa yang saya pikirkan.
Braiam
@Braiam: Formula Anda untuk menghitung topeng baru salah, bukan 0666-0022 , itu 0666 & ~0022.
cuonglm
1
Saya pikir keberatannya bukan cara angka-angka ditulis, tetapi penggunaan operator pengurangan (-) bukannya bitwise dan (&).
BowlOfRed