Wie ich herausgefunden habe, sind bei Verwendung von umask die höchsten Berechtigungen, die Sie Dateien erteilen können, 666. Dies geschieht durch umask 0000
. Dies liegt an den Standardberechtigungen für die Dateierstellung, die auf jedem mir bekannten System 666 zu sein scheinen.
Ich weiß, dass wir für Dateien ausführbare Rechte benötigen, um deren Inhalt anzuzeigen.
Aber warum beschränken wir die Standardberechtigungen für die Dateierstellung auf 666?
permissions
filesystems
files
Peter
quelle
quelle
umask
ich traf, war immer 0022, wodurch die Standardberechtigungumask 0000
- was immer noch auf Dateiberechtigungen von 666 beschränkt ist. (Aber anscheinend verwenden Ordner 777)Antworten:
Soweit ich das beurteilen kann, ist dies in Standarddienstprogrammen fest programmiert. Ich würde
strace
sowohl einetouch
neue Datei als auchmkdir
ein neues Verzeichnis erstellen.Die
touch
Spur erzeugte dies:während die
mkdir
Spur dies erzeugte: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 beidetouch(1)
undmkdir(1)
unter anderem enthalten:mkdir.c
:Mit anderen Worten, wenn der Modus nicht angegeben ist, setzen Sie ihn auf
S_IRWXUGO
(read: 0777) modified by theumask_value
.touch.c
ist noch klarer: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
unterperldoc -f sysopen
).quelle
umask file
undumask dir
. Legen Sie zwei verschiedene Standardwerte und fein fest. Aber jetzt habe ich keine Möglichkeit, Dateien mit exec-Berechtigungen zu erstellen.mkdir(1)
bietet Ihnen einen-m
Schalter, um den Modus des Verzeichnisses bei der Erstellung anzugeben. Da dieopen(2)
Dateierstellung bei Dateien jedoch syscall verwendet, ist das Tool, mit dem Sie die Datei erstellen, für die Übergabe der Modusbits verantwortlich,open
und Sie haben in dieser Angelegenheit kein Mitspracherecht.install(1)
Standardmäßig kopiert Ihre Datei an einen neuen Speicherort und setzt die Ausführungsbits. Dies geschieht jedoch zum Zeitpunkt der Erstellung noch nicht.touch
zum Beispiel dafür verantwortlich, die richtigen Werte einzustellen. Wissen Sie, wo die Werte gespeichert werden? Vielleicht sind sie systemweit festgelegt - also könnten wir sie ändern? Weil ich mich befreien will ;)Zunächst gibt es keinen globalen Standard. Die Berechtigungen hängen von der Anwendung ab, mit der die Datei erstellt wird. Zum Beispiel erstellt dieses kleine C-Programm eine Datei '/ tmp / foo' mit den Berechtigungen 0777, wenn umask 0000 ist (in jedem Fall sind die Berechtigungen 0777 & ~ umask):
Davon abgesehen erstellen viele Anwendungen Dateien mit den Berechtigungen 0666. Das hat zwei Gründe:
quelle