Sejauh yang saya tahu, ini hard-coded menjadi utilitas standar. Saya straceberdua touchmembuat file baru dan mkdirmembuat direktori baru.
The touchjejak yang dihasilkan ini:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
sedangkan mkdirjejak menghasilkan ini:
mkdir("newdir", 0777) = 0
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 coreutilspaket yang berisi kode sumber untuk keduanya touch(1)dan mkdir(1), antara lain:
mkdir.c:
if (specified_mode)
{
struct mode_change *change = mode_compile (specified_mode);
if (!change)
error (EXIT_FAILURE, 0, _("invalid mode %s"),
quote (specified_mode));
options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
&options.mode_bits);
free (change);
}
else
options.mode = S_IRWXUGO & ~umask_value;
}
Dengan kata lain, jika mode tidak ditentukan, atur ke S_IRWXUGO(baca: 0777) dimodifikasi oleh umask_value.
touch.c bahkan lebih jelas:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Artinya, berikan izin baca dan tulis kepada semua orang (baca: 0666), yang akan dimodifikasi oleh proses umaskpembuatan 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 sysopenbawah perldoc -f sysopen).
umasksaya temui adalah selalu 0022, menciptakan izin default 644.