O ile wiem, jest to na stałe zapisane w standardowych narzędziach. Mogę utworzyć strace
zarówno touch
nowy plik, jak i mkdir
nowy katalog.
touch
Ślad produkowane w ten sposób:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
podczas gdy mkdir
ślad dał to:
mkdir("newdir", 0777) = 0
Poza kodowaniem procesu tworzenia pliku / katalogu w C, nie widzę sposobu modyfikowania domyślnych uprawnień. Wydaje mi się jednak, że brak domyślnego wykonywania plików ma sens: nie chcesz, aby przypadkowy tekst był przypadkowo błędnie interpretowany jako polecenie powłoki.
Aktualizacja
Aby dać przykład, w jaki sposób bity uprawnień są na stałe zakodowane w standardowych narzędziach. Oto kilka odpowiednich wierszy z dwóch plików w coreutils
pakiecie, który zawiera kod źródłowy zarówno dla, jak touch(1)
i mkdir(1)
między innymi:
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;
}
Innymi słowy, jeśli tryb nie jest określony, ustaw go na S_IRWXUGO
(odczyt: 0777) zmodyfikowany przez umask_value
.
touch.c
jest jeszcze jaśniejszy:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
To znaczy, daj wszystkim uprawnienia do odczytu i zapisu (odczyt: 0666), które umask
oczywiście zostaną zmodyfikowane przez proces tworzenia pliku.
Możesz być w stanie obejść ten problem tylko programowo: tj. Podczas tworzenia plików z poziomu programu C, w którym wywołujesz system bezpośrednio lub z poziomu języka, który pozwala na wywołanie syscall niskiego poziomu (patrz na przykład Perl sysopen
pod perldoc -f sysopen
).
umask
co spotkałem, to zawsze 0022, tworząc domyślne uprawnienie 644.