Wie setze ich die gewünschte umask mit SFTP?

23

Ich habe einen SFTP-Server (openssh / sftp-server) und möchte umask 002 für Benutzer einrichten, die diesen Dienst nutzen. Ich habe versucht, PAM (pam.d / common-session) und .profile für jeden Benutzer festzulegen, aber kein Glück.

Mit SSH Login ist alles in Ordnung, aber wenn ich es mit SFTP (mit gFTP) versuche habe ich die 022 umask gesetzt.

Ich habe bereits versucht, einen Wrapper für den SFTP-Server zu verwenden, der die Umask ändert, bevor der SFTP-Server aufgerufen wird.

Irgendeine Hilfe? Vielen Dank!

mat_jack1
quelle

Antworten:

25

Seit OpenSSH 5.4p1 können Sie meines Erachtens die Option "-u" verwenden, zum Beispiel:

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

Von der Manpage:

 -u umask
         Sets an explicit umask(2) to be applied to newly-created files
         and directories, instead of the user's default mask.
Weboide
quelle
Das ist schön!! Ich werde so schnell wie möglich einen Blick darauf werfen und meine Ergebnisse melden :)
mat_jack1
5
Für diejenigen ohne die Option -u funktioniert dies:Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Steve Clay
1
Gute Lösung. Es löst das Problem mit Client-Shells und -Anwendungen, z. B. CyberDuck, die ihre Standardberechtigungen unabhängig von der Systemumgebung festlegen. Ich fand es nützlich, sicherzustellen, dass jede Client-App die richtigen Berechtigungen hat, damit meine Benutzer gemeinsam an Gruppendateien arbeiten können. Es kann nützlich sein, hinzuzufügen, dass diese Einstellung Benutzer nicht davon abhält, Dateiberechtigungen anzupassen, wenn sie dies wünschen.
Gerlos
Eine letzte Sache, die Sie hinzufügen müssen: Wenn Sie nur die SFTP-Funktion benötigen und Ihren Benutzern keinen Shell-Zugriff gewähren müssen, können Sie erwägen, rssh anstelle von bash für ihre Shells zu verwenden und in /etc/rssh.conf den Standard umask für sie festzulegen . Dies kann Ihren Server sicherer machen
gerlos
7

Ich hoffe, das kann jemand anderem Stunden der Frustration ersparen ...

Wenn Sie eine GUI-SFTP-Anwendung verwenden, überprüfen Sie deren Einstellungen zum Festlegen von Berechtigungen für das Hochladen.

Ich hatte alle oben genannten Lösungen ausprobiert und es stellte sich heraus, dass die Anwendung sie nur überschrieb.

Malcolm
quelle
^^ Ja, ich habe lange Zeit die Umask auf SFTP gesetzt, indem ich ein Skript erstellt habe, das der Weboide-Lösung ähnelt. Kürzlich habe ich mir am Kopf gekratzt, warum dies nicht mehr so ​​gut zu funktionieren schien wie in der Vergangenheit. Nun, anscheinend hat irgendwann ein Update meines SFTP-Clients dazu geführt, dass die umask nach dem Herstellen einer Verbindung mit ssh explizit festgelegt wurde.
Jared Kipe
Es sind nicht nur GUIs. Nicht einmal Kunden. Ich habe viel zu lange gebraucht, um festzustellen, dass die von mir hochgeladene Testdatei 0600 hatte, die der Client (OpenSSH sftp) auf die Remote-Seite kopiert hat.
Xebeche
Vielen Dank! Verbrachte so viel Zeit damit, umsonst mit Berechtigungen herumzuspielen.
Tania Rascia
2

Nach stundenlangen Versuchen, verschiedene Hacks und Fixes anzuwenden, habe ich eine passende Lösung gefunden!

Es gibt einen Patch für SSH, mit dem Sie die für SFTP gewünschte umask auswählen können. Sie können es hier herunterladen: http://sftpfilecontrol.sourceforge.net/

Für mich (OpenSSH_5.2p1 + sftpfilecontrol-v1.3, OpenSSL 0.9.8g, 19. Oktober 2007) funktioniert es perfekt!

mat_jack1
quelle
2
Nur um zu bemerken, dass die Option '-u' zum Setzen der umask in OpenSSH seit 5.4p1 verfügbar ist, siehe meine Antwort weiter unten.
Weboide
2

In der ssh-Konfigurationsdatei können Sie hiermit auch den Modus der Datei spezifisch festlegen (indem Sie jedes vom Client möglicherweise festgelegte chmod überschreiben). Hier verwende ich Internal-SFTP, aber ich denke, es wäre das gleiche für SFTP-Server:

ForceCommand internal-sftp -u 0022   
Wolkenförster
quelle
0

So zitieren Sie diese Nachricht :

Ich habe dies in Ordnung gebracht, indem ich eine "umask 007" -Zeile in /etc/init.d/ssh eingefügt habe.

Bash verwendet die .profilefür interaktive Login-Shells. Ich denke nicht, dass dies sftpeiner ist. Möglicherweise können Sie die umask einstellen, /etc/bash.bashrcoder ~/.bashrcwenn der obige Tipp nicht funktioniert, oder Sie möchten eine feinkörnigere Steuerung.

Bis auf weiteres angehalten.
quelle
2
danke für die antwort, aber ich hatte schon in ssh umask 002 (ich habe es auch mit 0002 versucht) und es funktioniert nicht :( auch der bashrc wird nicht berücksichtigt, da ich bei einem externen SFTP-client nicht glaube, dass bash verwendet wird. Wenn ich mich direkt mit ssh
anmelde,
Hoppla, du hast recht. Ich weiß nicht, warum ich daran gedacht habe, dass Bash dabei ist.
Bis auf weiteres angehalten.
0

In dieser Frage finden Sie eine einfache Lösung, für die weder bestimmte OpenSh-Versionen noch benutzerdefinierte Patches erforderlich sind.

Unode
quelle