Bagaimana izin file diterapkan ke file yang baru dibuat?

12

Saya memiliki direktori yang memiliki perizinan sebagai berikut:

drwxr-s---. user group folder

Di desktop, saya mengakses folder ini dan klik kanan untuk membuat panggilan file baru foo.txt. Kemudian menggunakan terminal, saya membuat file lain menggunakan perintah $ touch bar.txt.

Ketika saya memeriksa izin untuk file-file ini, saya punya:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

Saya mengharapkan -rw-r-----. user group. Bagaimana izin menulis tambahan untuk grup dan izin baca untuk orang lain muncul?

Pertanyaan Melimpah
sumber

Jawaban:

16

setguid

Ada 2 kekuatan di sini di tempat kerja. Yang pertama adalah bit setgid yang diaktifkan pada folder folder,.

drwxr-s---. user group folder

Itulah spaket karakter di awal baris ini. Mereka dikelompokkan sebagai berikut:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

The r-sberarti bahwa setiap file atau direktori dibuat di dalam folder ini akan memiliki kelompok otomatis diatur ke grup group.

Itulah yang menyebabkan file foo.txtdan bar.txtdibuat seperti:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

izin & umask

Izin yang Anda lihat adalah masalah lain. Ini diatur oleh pengaturan untuk Anda umask. Anda dapat melihat apa umaskyang diatur dengan perintah umask:

$ umask
0002

CATATAN: bit-bit ini juga disebut bit "mode".

Itu topeng sehingga akan menonaktifkan bit yang terkait dengan izin yang diaktifkan. Dalam contoh ini satu-satunya bit yang saya inginkan adalah izin menulis untuk yang lain.

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

Representasi "bit" dalam perintah ini dalam bentuk desimal. Jadi 2 sama dengan 010 dalam bentuk biner, yang merupakan bit tulis. A 4 (100) berarti Anda ingin membaca dinonaktifkan. A 7 (111) berarti Anda ingin membaca / menulis / mengeksekusi semua yang dinonaktifkan. Membangunnya dari sini:

$ umask 007

Akan menonaktifkan bit baca / tulis / eksekusi untuk pengguna lain.

Jadi, bagaimana dengan file Anda?

Yah umaskmengatur izin yang akan ditetapkan ketika file baru dibuat. Jadi jika kita memiliki umaskset berikut :

$ umask 007

Dan mulai menyentuh file baru, kita akan melihatnya dibuat seperti ini:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

Jika kami mengubahnya menjadi sesuatu yang lain, katakan ini:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Itu tidak akan berdampak pada file yang sudah kita buat. Lihat disini:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Jadi apa yang terjadi dengan browser file?

The umaskadalah apa yang saya menelepon pengaturan "lunak". Ini tidak berarti mutlak dan dapat dilewati dengan cukup mudah di Unix dalam beberapa cara. Banyak alat mengambil sakelar yang memungkinkan Anda menentukan izin sebagai bagian dari operasinya.

Ambil mkdircontoh:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

Dengan -msaklar kita dapat menimpanya umask. The touchperintah tidak memiliki fasilitas ini sehingga Anda harus mendapatkan kreatif. Lihat U&L Q&A ini berjudul: Dapatkah file dibuat dengan izin yang ditetapkan pada baris perintah?hanya metode seperti itu.

Cara lain? Timpa saja umask. Peramban file kemungkinan besar melakukan ini atau hanya mengabaikan sepenuhnya umaskdan meletakkan file menggunakan izin apa pun yang dikonfigurasikan untuk melakukannya.

slm
sumber
Saya pikir umask seharusnya menghapus privilege, bukan menambah. Atau apakah saya melewatkan sesuatu?
Pertanyaan Overflow
@QuestionOverflow - Anda menyembunyikan mengontrol izin apa yang diizinkan ketika file dan direktori dibuat. Karena itu namanya. Ini menutupi bit agar tidak digunakan selama proses pembuatan.
slm
Umask saya membaca 0002. Jika umask memang mengatur izin alih-alih menghapus izin, maka bit eksekusi akan ditetapkan untuk pengguna dan grup saat saya melakukannya touch, tetapi tidak.
Pertanyaan Overflow
@QuestionOverflow - itu adalah batasan dari touchperintah. Lihat tautan yang saya sertakan pada A. tautan ini: unix.stackexchange.com/questions/47178/…
slm
Hanya untuk memperjelas beberapa poin berdasarkan komentar: 1) izin file baru selalu ditentukan oleh umask + program yang digunakan untuk membuat file, 2) izin tidak pernah diwarisi dari direktori induk.
Pertanyaan Overflow