Beim Versuch, Dateien per SFTP auf einen Server hochzuladen, tritt ein seltsames Problem auf.
Wenn ich aus Sicherheitsgründen einen Benutzer mit deaktivierter Shell („/bin/false“) zum Hochladen von Dateien verwende, erhalte ich für die hochgeladenen Dateien den Modus 640, und das ist nicht das, was ich möchte (lokale Dateien haben den Modus 664).
Wenn ich jedoch die Shell „/bin/bash“ für denselben Benutzer aktiviere, erhalte ich den richtigen Modus, 664.
Ich verstehe nicht genau, was hier passiert. Warum ändert das Deaktivieren der Shell den Modus der hochgeladenen Dateien?
Meine SSHD-Konfiguration:
Port 22
Protocol 2
AcceptEnv LANG LC_*
UsePAM yes
UseDNS no
Subsystem sftp internal-sftp
Antwort1
Da keine gültige Shell vorhanden ist, wird die systemeigene Standard-Umask nicht angewendet/verwendet.
Was Sie tun können, ist, Ihre Benutzer in eine Gruppe einzuordnen und über die Datei einige Dinge zu erzwingen /etc/sshd_config
, darunter eine Umask -
Match Group uploadusers
ForceCommand internal-sftp -u 0002
Die -u 0002
Option legt eine Umask für das interne SFTP-Programm/Subsystem und alle darüber hochgeladenen Dateien fest, WENN der Benutzer Mitglied der uploadusers
Gruppe ist.
Persönlich richte ich chroot
die Benutzer auch so ein, dass sie nur auf ihre Verzeichnisse zugreifen können – aktivieren Sie die ChrootDirectory
Option, da sie auf eine Match Group
Anweisung in der sshd_config
Datei zutrifft.
Antwort2
Der Grund dafür ist, dass bei Eingreifen einer Shell eine UMASK angewendet wird. In Ihrem Fall wird sie (für Bash) wahrscheinlich innerhalb von /etc/bashrc angewendet (dies setzt eine moderne Red Hat/Centos 7-Version voraus). Der Speicherort dieser Dateien kann variieren. Wenn Sie nichts verwenden, überprüfen Sie möglicherweise die UMASK-Einstellung in /etc/profile.