Wie setze ich in sftp die Standardberechtigung für alle Dateien in einem Ordner?

Ich möchte die Standardberechtigung für alle Dateien in einem Ordner, einschließlich neu hochgeladener, auf einen bestimmten Wert festlegen, z. B. 644, anstatt ständig "chmod 644" auszuführen.

Gibt es einen Befehl, der dies ermöglicht?

Author: armstrhb, 2011-09-05

5 answers

Ich habe viel Zeit damit verbracht, nach einer vollständigeren Antwort auf diese Frage zu suchen. Das Konfigurieren einer anderen Umask für sftp ist gut und gut, aber es ist keine universelle Antwort, da die umask nur Berechtigungen einschränkt und keine zusätzlichen gewährt. Welche genauen Berechtigungen eine über sftp hochgeladene Datei hat, hängt auch von den Berechtigungen der ursprünglichen Quelldatei und vom Client ab, der für den Upload verwendet wird.

Als Beispiel habe ich die Umask auf meinem (OpenSSH, auf einem roten Hut) gesetzt server) sftp-Server auf 0002, aber wenn ich eine Textdatei mit 0600 Berechtigungen auf das Quellsystem mit dem OpenSSH sftp-Client hochlade, hat sie immer noch 0600 Berechtigungen am Ziel. Dies bedeutet insbesondere, dass ich meines Wissens nach nicht sicherstellen kann, dass auf diesen SFTP-Server hochgeladene Dateien überhaupt über Gruppenberechtigungen verfügen, was bedeutet, dass ich Access Control Lists (ACL) auch nicht verwenden kann, um Berechtigungen auf andere Benutzer oder Gruppen zu erweitern.

Um zwei Methoden zu versuchen, die adressieren würden dies, obwohl sie in beiden Fällen mehr Problemumgehungen als Lösungen sind:

  • Erstellen Sie einen Cron-Job, um die gewünschten Berechtigungen nach der Tat manuell festzulegen. Einfach genug, aber asynchron, obwohl Sie es häufig ausführen können.
  • Verwenden Sie inotify, um die vom sftp-Server verwendeten Zielverzeichnisse zu überwachen und die gewünschten Berechtigungen für alle darin erstellten Dateien festzulegen. Dies sollte praktisch sofort sein, kann aber andere Einschränkungen haben, wie im Fall von großen anzahl der Dateien oder Verzeichnisse.

I came upon a blog post at positon.org was die Option inotify mit Beispielen und sogar Init-Skripten gut erklärt. Es wird am besten dort gelesen, aber für den Fall, dass die Site jemals verschwindet, lautet der Schlüsselbefehl:

inotifywait -mrq -e CREATE --format %w%f /tmp/mytest/ | while IFS= read -r FILE; do chmod g=u "$FILE"; done

So ordentlich das auch ist, ich wäre immer noch sehr daran interessiert, durch Feature oder Tricks das gleiche Ergebnis innerhalb von sftp oder zumindest der Shell zu erzielen, ohne separate Dienstprogramme einzubeziehen.

 6
Author: anlag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-05-12 13:41:05

Alternativ können Sie die umask für alle sftp-Anmeldungen in der Konfigurationsdatei von sshd festlegen (/etc/ssh/sshd_config auf meiner Debian-Box). Fügen Sie dazu -u 022 wie folgt zur sftp-Subsystemzeile hinzu:

Subsystem sftp /usr/lib/openssh/sftp-server -u 022

Von man sftp-server:

-u umask
     Sets an explicit umask(2) to be applied to newly-created files and directo‐
     ries, instead of the user's default mask.
 5
Author: cstork,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-02-08 20:04:37

Die Berechtigungsdateien, mit denen Sie erstellt werden, hängen von Ihrem umask ab. Um 644 Berechtigungen zu erhalten, setzen Sie Ihre umask auf 022 (umask 022).

Um diese Änderung dauerhaft zu machen, setzen Sie diesen Befehl in den Remote-Servern ~/.profile (abhängig von Ihrer Shell).

 0
Author: Ingmar Hupp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-09-06 00:05:41

Die .profil wird im Home-Verzeichnis für Ihr Benutzerkonto sein. Wenn sich ssh in Ihrem Home-Verzeichnis befindet, können Sie die Shell jedoch auch in Ihr Home-Verzeichnis ändern, indem Sie Folgendes eingeben:

cd

Wenn Sie unter Linux sind und Ihre Benutzer-Shell Bash ist, wie die meisten Leute, werden Sie wahrscheinlich keine haben .profil, aber Sie können eine haben .bash_profile und .bashrc. Legen Sie die Umask in einer dieser Dateien fest, anstatt eine zu erstellen .Profil.

 0
Author: gview,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-09-06 06:50:41

Ändern Sie /etc/ssh/sshd_config zu haben:

Subsystem sftp internal-sftp -m 0644

SSHD-Konfiguration neu laden:

sudo systemctl reload sshd
 0
Author: tomuxi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-02-13 15:38:14