Soweit ich das beurteilen kann, ist dies in Standarddienstprogrammen fest programmiert. Ich würde strace
sowohl eine touch
neue Datei als auch mkdir
ein neues Verzeichnis erstellen.
Die touch
Spur erzeugte dies:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
während die mkdir
Spur 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 coreutils
Paket, 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 umask
natü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 sysopen
unter perldoc -f sysopen
).
umask
ich traf, war immer 0022, wodurch die Standardberechtigung