Ich habe nach einer Möglichkeit gesucht , OpenSSHs umask für 0027
alle Verbindungstypen einheitlich einzurichten .
Nach Verbindungstypen beziehe ich mich auf:
- sftp
- scp
- SSH- Hostname
- SSH- Hostname- Programm
Der Unterschied zwischen 3. und 4. besteht darin, dass ersteres eine Shell startet, die normalerweise die /etc/profile
Informationen liest, während letztere dies nicht tut.
Beim Lesen dieses Beitrags wurde ich außerdem auf die Option -u aufmerksam, die in neueren Versionen von OpenSSH verfügbar ist. Dies funktioniert jedoch nicht.
Ich muss auch hinzufügen, dass das /etc/profile
jetzt beinhaltet umask 0027
.
Punkt für Punkt gehen:
- SFTP - Einstellung
-u 0027
insshd_config
wie erwähnt hier , ist nicht genug.
Wenn ich diesen Parameter nicht einstelle, verwendet sftp standardmäßig umask 0022
. Das bedeutet, wenn ich die beiden Dateien habe:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Wenn ich sftp verwende, um sie auf dem Zielcomputer abzulegen, erhalte ich tatsächlich:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
Allerdings , wenn ich festgelegt -u 0027
auf sshd_config
der Zielmaschine ich wirklich:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
was nicht zu erwarten ist, da es eigentlich sein sollte:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
Versteht jemand, warum das passiert?
scp - Unabhängig von den Einstellungen für sftp sind die Berechtigungen immer gültig
umask 0022
. Ich habe derzeit keine Ahnung, wie ich das ändern soll.SSH- Hostname - hier kein Problem, da die Shell
/etc/profile
standardmäßig liest, wasumask 0027
im aktuellen Setup bedeutet.SSH Hostname Programm - gleiche Situation wie SCP .
Zusammenfassend lässt sich sagen, dass das Setzen von umask sftp
das Ergebnis ändert, aber nicht so, wie es sollte. Es ssh hostname
funktioniert wie erwartet /etc/profile
und beides scp
und ssh hostname program
scheint umask 0022
irgendwo fest codiert zu sein.
Jeder Einblick in einen der oben genannten Punkte ist willkommen.
BEARBEITEN: Ich möchte Patches vermeiden, die das manuelle Kompilieren von openssh erfordern. Auf dem System läuft Ubuntu Server 10.04.01 (lucid) LTS mit openssh
Paketen von maverick.
Antwort: Wie durch poige angegeben, hat die Verwendung von pam_umask den Trick getan.
Die genauen Änderungen waren:
Zeilen hinzugefügt zu /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Um alle Login-Shells zu beeinflussen, unabhängig davon, ob sie stammen /etc/profile
oder nicht, wurden dieselben Zeilen ebenfalls hinzugefügt /etc/pam.d/login
.
EDIT : Nach einigen Kommentaren habe ich dieses Problem erneut getestet.
Zumindest in Ubuntu (wo ich getestet habe) scheint es, dass, wenn der Benutzer eine andere Umask in den Init-Dateien seiner Shell festgelegt hat (.bashrc, .zshrc, ...), die PAM-Umask ignoriert und stattdessen die benutzerdefinierte Umask verwendet wird. Änderungen in hatten /etc/profile
keine Auswirkungen auf das Ergebnis, es sei denn, der Benutzer bezieht diese Änderungen ausdrücklich in die Init-Dateien.
Es ist derzeit unklar, ob dieses Verhalten in allen Distributionen auftritt.
UsePAM yes
in deiner sshd_config?/etc/profile
. So etwas wiealias umask=/bin/true
Antworten:
Ich kann zwei Dinge vorschlagen:
quelle
sudo
odersudo su
dergleichen.Hier ist eine Lösung, mit der Sie auf Benutzerbasis das tun können, was Sie wollen. Es verwendet nur native
sshd
Funktionen und muss nicht mit lokal verwalteten Patches herumgespielt werden. Diese Lösung nutzt dasForceCommand
Verhalten von sshd, um in jede ssh-Verbindung ein Umgebungs-Setup-Skript einzufügen und anschließend den ursprünglichen Befehl auszuführen.Erstellen Sie zunächst irgendwo auf Ihrem System ein Skript mit den folgenden Inhalten:
Für die Zwecke dieses Beispiels gehe ich davon aus, dass Sie dies aufgerufen haben
/usr/bin/umask-wrapper
.Nun haben Sie einige Möglichkeiten, dies einzurichten. Wenn Sie möchten, dass dies eine obligatorische Konfiguration für alle Benutzer ist (was ein wenig unwahrscheinlich erscheint), können Sie Ihre sshd-Konfiguration so ändern, dass sie Folgendes enthält:
Wenn Sie möchten, dass dies nur für einige Benutzer gilt, können Sie einen
Match
Block verwenden (dies steht am Ende Ihrersshd_config
):Wenn Sie möchten, dass dieses Verhalten vom Benutzer gesteuert werden kann, können Sie die
command=
Option in einerauthorized_key
Datei verwenden, um dieses Verhalten für bestimmte Schlüssel auszuwählen. Während ich das ausprobierte, fügte ich meinerauthorized_keys
Datei beispielsweise einen Eintrag hinzu , der ungefähr so aussieht:Und hier sind einige Ergebnisse meines Tests:
Verwenden
ssh
ohne Befehl:Verwenden
ssh
mit einem Befehl:Verwenden von
scp
:Verwenden von
sftp
:Und da hast du es. Ich glaube, das ist das Verhalten, nach dem Sie gesucht haben. Bei Fragen zu dieser Lösung stehe ich Ihnen gerne zur Verfügung.
quelle
command=
ist in der Tat eine nette Eigenschaft von ssh.Ich habe einen etwas anderen Ansatz gewählt, um die Einstellung zu zentralisieren.
Dies wurde hinzugefügt zu
/etc/pam.d/common-session
:Dies wurde geändert in
/etc/login.defs
:quelle
Ich habe pam_umask dazu gebracht, mit ssh zu arbeiten, aber nicht mit scp oder sftp.
Die Wrapper-Methode macht auch nichts für sftp oder scp. Ich bin mir nicht sicher, ob 027 ein gutes Beispiel ist, da die meisten Distributionen dies bereits eingestellt haben. Versuchen Sie es mit 002 und sehen Sie, ob das funktioniert.
quelle
Programme, die keine eigene umask setzen, erben die umask der Anwendung, die sie gestartet hat. Stoppen Sie sshd vollständig, setzen Sie Ihre umask auf 0027 und starten Sie sie dann erneut. (Sie können den Befehl umask im Init-Skript für zukünftige Neustarts hinzufügen.)
Getestet um mit scp zu arbeiten.
quelle
umask 0027
(wenn sie lesen/etc/profile
), aber ein Neustart von ssh wirkt sich weder auf scp noch auf ssh aus.Wenn
pam_umask
scheint nicht Ihre SFTP - Sitzungen zu beeinflussen, dann prüfen , obUsePam
eingestellt wirdYes
in der/etc/ssh/sshd_config
Datei.Wenn Sie die Kennwortauthentifizierung deaktiviert haben und
UsePam
als Standard festgelegt wurdenNo
. Möglicherweise möchten SieChallengeResponseAuthentication No
in dersshd_config
Datei festlegen, da Sie andernfalls möglicherweise versehentlich eine Kennwortauthentifizierung über dieses System aktivieren.quelle
Eine zusätzliche Anmerkung zu der obigen Antwort von user188737:
Dies mag selbstverständlich sein, aber wenn Sie das openssh-server- Paket nicht verwenden und OpenSSH manuell kompiliert haben, stellen Sie sicher, dass Sie die PAM-Unterstützung aktivieren , indem Sie das Konfigurationsflag übergeben.
--with-pam
Andernfalls werden
UsePAM=yes
in sshd_config alle Änderungen an von/etc/pam.d/*
ignoriertsshd
.Schließlich wurde mir klar, warum keine der empfohlenen PAM-Lösungen Auswirkungen auf Tests über nicht interaktive SFTP-Verbindungen hatte ...
quelle
Da umask vom übergeordneten Prozess geerbt wird, können Sie auf einem Slackware-System, das
/etc/rc.d/rc.sshd
zum Starten / Stoppen / Neustarten von sshd verwendet wird,umask 0027
direkt über "sshd_start" oder "sshd_restart" oder an einer beliebigen Stelle vor dem sshd_restart eine Zeile einfügen Der Hauptausführungsabschnitt beginnt in/etc/rc.d/rc.sshd
:Oder alternativ oben in der Datei:
quelle
Ich habe gerade eine mögliche Verbesserung der Optionen von larsks sshd_config unter Solaris 11 getestet
Richten Sie eine Gruppe mit den zu verwaltenden Benutzern ein und verschieben Sie das Skript in die Konfigurationsdatei selbst. In meinem Fall wollte ich die umask auf 0002 setzen.
die resultierende Konfiguration wird ....
quelle
Ich hatte Probleme mit diesem Problem, insbesondere mit den Dateiberechtigungen nach dem Kopieren einer Datei mit scp , und es kam mir schließlich vor, einfach ssh zu verwenden, um die Berechtigungen nach dem Kopieren zu ändern.
Hier ist die Lösung:
localhost$ scp filename remotehost:umask-test/filename
localhost$ ssh remotehost "chmod go+r umask-test/filename"
Das Beste ist, dass für diese Lösung kein Root-Zugriff erforderlich ist.
quelle