Per quanto ne so, questo è codificato in utility standard. Ho creato strace
sia un touch
nuovo file sia una mkdir
creazione di una nuova directory.
La touch
traccia ha prodotto questo:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
mentre la mkdir
traccia ha prodotto questo:
mkdir("newdir", 0777) = 0
A corto di codifica del processo di creazione di file / directory in C, non vedo un modo per modificare le autorizzazioni predefinite. Mi sembra, tuttavia, che non rendere i file eseguibili per impostazione predefinita abbia senso: non si desidera che qualsiasi testo casuale venga erroneamente frainteso come comandi di shell.
Aggiornare
Per darvi un esempio di come i bit di autorizzazione sono codificati nelle utility standard. Ecco alcune righe rilevanti da due file nel coreutils
pacchetto che contiene il codice sorgente per entrambi touch(1)
e mkdir(1)
, tra gli altri:
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;
}
In altre parole, se la modalità non è specificata, impostarla su S_IRWXUGO
(leggi: 0777) modificata da umask_value
.
touch.c
è ancora più chiaro:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Cioè, concedi le autorizzazioni di lettura e scrittura a tutti (leggi: 0666), che saranno umask
ovviamente modificate dal processo di creazione del file.
Potresti essere in grado di aggirare questo solo a livello di programmazione: ad esempio durante la creazione di file all'interno di un programma C, in cui effettui chiamate di sistema direttamente o all'interno di una lingua che ti consente di effettuare un syscall di basso livello (vedi ad esempio Perl sysopen
sotto perldoc -f sysopen
).
umask
ho incontrato è stato sempre 0022, creando il permesso predefinito 644.