Aus offensichtlichen Gründen muss ich den umask
Wert für einen bestimmten Ordner festlegen . Wie kann man das machen?
Vielen Dank im Voraus!
UPDATE 1
Der Grund, warum ich umask für einen bestimmten Ordner verwenden muss, ist folgender. Ich habe eine Webanwendung und beim Erstellen einer Datei ist die Standardberechtigung 700. Für diese Datei benötige ich jedoch mindestens 755 Berechtigungen. Ich denke, ich könnte das Problem jetzt klarer erklären.
permissions
umask
Bakhtiyor
quelle
quelle
Antworten:
Du könntest benutzen
setfacl
Wo
name
ist der Gruppenname?Um herauszufinden, welcher Gruppe Sie oder ein bestimmter Benutzer angehören, lesen Sie unter Unix / Linux, wie Sie über die Befehlszeile herausfinden, welcher Gruppe ein bestimmter Benutzer angehört.
quelle
setfacl
hat sich geändert. Ich erhalte die Fehlermeldung, dass dies-m
keine gültige Option ist.setfacl
ist nicht verändert. Höchstwahrscheinlich haben Sie keinen richtigen Gruppennamen (nach-m
) angegeben.setfacl
ist für Access Control Lists und nichtumask
. Eine bessere Lösung aber eigentlich nicht was gefragt wurde, denke ich nicht.sudo setfacl -Rdm ...
(R für Rekursion weglassen) sollte funktionieren. @ Wyatt8740 (richtig). Um sicherzugehen, führen Sie Folgendes aus:man setfacl
und geben Sie Folgendes ein/-modify
. Sie müssen verwendensudo
.Sie können umask nicht pro Verzeichnis festlegen, da dies ein Wert auf Prozessebene ist. Wenn Sie verhindern möchten, dass andere Benutzer Dateien in einem Verzeichnis lesen, widerrufen Sie die entsprechenden Berechtigungsbits.
Wenn Sie beispielsweise ein Verzeichnis
/home/user/directory
mit einigen Dateien und Verzeichnissen haben, die Berechtigungen wie 777 von einem Prozess erhalten können, setzen Sie die Berechtigungsbits/home/user/directory
auf 700. Dadurch ist es für andere Benutzer (mit Ausnahme des Superuser-Stamms) nicht möglich, einen Abstieg durchzuführen in/home/user/directory
.Ich bin paranoid und setze die Berechtigungen auf
/home/user
750, sodass nur ich in meinem Home-Verzeichnis lesen, schreiben und absteigen kann. Dies hat zur Folge, dass Ordner wie/home/user/Public
für andere nicht zugänglich sind, aber ich kann damit leben.Per Update Ihrer Frage: Trotzdem können Sie nicht steuern, dass im Dateisystem (anders als bei Verwendung eines anderen Dateisystemtyps wie FAT, der stark entkoppelt ist), Sie dies in Ihrer Webanwendung tun müssen. Wenn Ihre Webapplikation in PHP programmiert ist, können Sie die umask mit der folgenden
umask
Funktion im Handumdrehen ändern :Sie können dies in eine Konfigurationsdatei einfügen, z. B. in die Datei, die das Kennwort für die Datenbankverbindung enthält (in Apps wie Wordpress).
Denken Sie daran, dass es sich um einen Prozesswert handelt. Bei einigen Webservern können Sie diesen in den Konfigurationsdateien festlegen. Andernfalls können Sie die Startskripte ändern, um die gewünschte Umask festzulegen. Denken Sie daran , dass die Berechtigungen wie
755
und644
sind ziemlich gefährlich für Webapps, wenn der Code empfindlich ist, jeder kann es lesen.quelle
/home/user/Public
(mount -o bind /home/user/Public /some/other/place
) binden, um das Problem mit den Berechtigungen für das übergeordnete Verzeichnis zu umgehen.Um die Berechtigungen für einen Ordner zu ändern, verwenden Sie chmod. umask ist für Dateien.Setze umask auf das, was du brauchst
und ändere dich zurück, wenn du fertig bist
quelle
umask
). Entschuldigung, dass Sie verwirrende Informationen hinzugefügt haben.Eine andere Lösung könnte darin bestehen, die Gruppen-ID nur für Dateien festzulegen, die im Verzeichnis erstellt wurden. Dadurch werden die neuen Dateien in den Besitz der Verzeichnis-Gruppen-ID anstatt der Gruppen-ID des Benutzers versetzt, der die Dateien erstellt hat. Also ich denke du könntest einfach tun:
chown www-data:www-data /my/folder
chmod 4755 /my/folder
Dadurch wird die spezielle Dateiberechtigung setgid festgelegt, die dazu führt, dass alle in erstellten Dateien
/my/folder
derwww-data
Gruppe gehören, die dann aufgrund des übergeordneten Verzeichnisses über die Berechtigung rx (5) verfügt.quelle
Stellen Sie eine andere Lösung bereit, die mit Schalenhaken und implementiert ist
direnv
. Die folgende Lösung ist möglicherweise kompatibler, fallssetfacl
sie auf Ihrem System nicht verfügbar ist. (zB macOS)Verwenden Sie
.envrc
dieseexport
Option, um denumask
Wert für ein bestimmtes Verzeichnis anzupassen, und die Variableexport
ed env wird entladen, wenn Sie dieses Verzeichnis verlassen.Definieren Sie einen Haken, um den
umask
Wert zu ändern , sobald das Arbeitsverzeichnis geändert wird.Derzeit unterstützt die Direnv-Hook-Initialisierung für zsh keinen
chpwd
Hook. Wenn die Pull-Anforderung GH-514 nicht zusammengeführt wurde, wenn Sie diese Seite sehen. Bitte kommentieren Sieeval "$(direnv hook zsh)"
und Hakendirenv
aufchpwd
manuell mit folgendem Code,Quelle: dynamic-umask-based-on-cwd.md
quelle
Im Zusammenhang, aber in diesem Fall möglicherweise nicht zutreffend, stammt der folgende Clip von
.zshrc
:Für den interaktiven Gebrauch würde so etwas funktionieren (aber natürlich nicht, um Sicherheit zu bieten).
quelle