Sejauh yang saya tahu, ini hard-coded menjadi utilitas standar. Saya strace
berdua touch
membuat file baru dan mkdir
membuat direktori baru.
The touch
jejak yang dihasilkan ini:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
sedangkan mkdir
jejak 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 coreutils
paket 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 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
bawah perldoc -f sysopen
).
umask
saya temui adalah selalu 0022, menciptakan izin default 644.