Soweit ich das beurteilen kann, ist dies in Standarddienstprogrammen fest programmiert. Ich würde stracesowohl eine touchneue Datei als auch mkdirein neues Verzeichnis erstellen.
Die touchSpur erzeugte dies:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
während die mkdirSpur dies erzeugte:
mkdir("newdir", 0777) = 0
Abgesehen von der Codierung des Datei- / Verzeichniserstellungsprozesses in C sehe ich keine Möglichkeit, die Standardberechtigungen zu ändern. Ich halte es jedoch für sinnvoll, Dateien nicht standardmäßig ausführbar zu machen: Sie möchten nicht, dass zufälliger Text versehentlich als Shell-Befehl missverstanden wird.
Aktualisieren
Um Ihnen ein Beispiel zu geben, wie die Berechtigungsbits in den Standarddienstprogrammen fest codiert sind. Hier sind einige relevante Zeilen aus zwei Dateien im coreutilsPaket, die den Quellcode für beide touch(1)und mkdir(1)unter anderem enthalten:
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;
}
Mit anderen Worten, wenn der Modus nicht angegeben ist, setzen Sie ihn auf S_IRWXUGO(read: 0777) modified by the umask_value.
touch.c ist noch klarer:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Geben Sie also allen Benutzern Lese- und Schreibberechtigungen (read: 0666), die umasknatürlich durch den Vorgang bei der Dateierstellung geändert werden .
Möglicherweise können Sie dies nur programmgesteuert umgehen: Beim Erstellen von Dateien in einem C-Programm rufen Sie das System direkt oder in einer Sprache auf, mit der Sie einen einfachen Systemaufruf durchführen können (siehe z. B. Perl sysopenunter perldoc -f sysopen).
umaskich traf, war immer 0022, wodurch die Standardberechtigung