Seperti yang saya ketahui, saat menggunakan umask, izin tertinggi yang dapat Anda berikan ke file adalah 666. Yang dilakukan oleh umask 0000
. Itu karena izin pembuatan file default, yang tampaknya 666 pada setiap sistem yang saya tahu.
Saya tahu untuk file, kami membutuhkan hak yang dapat dieksekusi untuk menampilkan kontennya.
Tapi mengapa kita membatasi izin pembuatan file default di 666?
permissions
filesystems
files
Peter
sumber
sumber
umask
saya temui adalah selalu 0022, menciptakan izin default 644.umask 0000
- yang masih membatasi untuk mengajukan izin 666. (Tetapi ternyata folder menggunakan 777)Jawaban:
Sejauh yang saya tahu, ini hard-coded menjadi utilitas standar. Saya
strace
berduatouch
membuat file baru danmkdir
membuat direktori baru.The
touch
jejak yang dihasilkan ini:sedangkan
mkdir
jejak menghasilkan ini:Pendek pengkodean proses pembuatan file / direktori di C, saya tidak melihat cara memodifikasi izin default. Bagi saya, tampaknya, membuat file yang tidak dapat dieksekusi secara default masuk akal: Anda tidak ingin teks acak sengaja disalahartikan sebagai perintah shell.
Memperbarui
Untuk memberi Anda contoh bagaimana bit izin dikodekan dengan keras ke dalam utilitas standar. Berikut adalah beberapa baris yang relevan dari dua file dalam
coreutils
paket yang berisi kode sumber untuk keduanyatouch(1)
danmkdir(1)
, antara lain:mkdir.c
:Dengan kata lain, jika mode tidak ditentukan, atur ke
S_IRWXUGO
(baca: 0777) dimodifikasi olehumask_value
.touch.c
bahkan lebih jelas:Artinya, berikan izin baca dan tulis kepada semua orang (baca: 0666), yang akan dimodifikasi oleh proses
umask
pembuatan file, tentu saja.Anda mungkin dapat mengatasi ini hanya secara programatik: yaitu saat membuat file dari salah satu program C, di mana Anda membuat panggilan sistem secara langsung atau dari dalam bahasa yang memungkinkan Anda untuk melakukan syscall tingkat rendah (lihat misalnya Perl di
sysopen
bawahperldoc -f sysopen
).sumber
umask file
danumask dir
. Tetapkan dua nilai standar yang berbeda dan baik-baik saja. Tapi sekarang saya tidak punya cara untuk membuat file dengan perm exec.mkdir(1)
memang menawarkan Anda-m
beralih untuk menentukan mode direktori pada saat pembuatan. Namun, dengan file, karena pembuatan file menggunakanopen(2)
syscall, alat yang Anda gunakan untuk membuat file adalah yang bertanggung jawab untuk meneruskan bit mode keopen
dan Anda tidak mendapatkan suara dalam masalah ini.install(1)
secara default menyalin file Anda ke lokasi baru dan menetapkan bit eksekusi, tetapi itu masih tidak terjadi pada waktu pembuatan.touch
misalnya bertanggung jawab untuk menetapkan nilai yang benar. Apakah Anda tahu di mana nilai itu disimpan? Mungkin mereka diatur di seluruh sistem - jadi kita bisa mengubahnya? Karena saya ingin membebaskan diri ;)Pertama, tidak ada standar global, izin tergantung pada aplikasi yang membuat file. Misalnya, program C kecil ini akan membuat file '/ tmp / foo' dengan izin 0777 jika umask adalah 0000 (dalam hal apa pun izin akan menjadi 0777 & ~ umask):
Yang sedang berkata, banyak aplikasi membuat file dengan izin 0666. Itu memiliki dua alasan:
sumber