Frage 1
Meine Frage ist, wie ich den Befehl auf nur diese SFTP-Übertragung im generierten öffentlichen Schlüssel beschränken kann.
Hierfür gibt es zwei Methoden.
1. - Einschränkung durch sshd
Bei dieser Methode wird die SFTP-Funktion in Ihrem SSH-Daemon eingerichtet sshd
. Dies wird über die /etc/ssh/sshd_config
Konfigurationsdatei gesteuert . HINWEIS: Dadurch wird der Benutzer darauf beschränkt, backup
nur SFTP auf den Server zu übertragen.
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
## You want to put only certain users (i.e users who belongs to sftpusers
## group) in the chroot jail environment. Add the following lines at the end
## of /etc/ssh/sshd_config
Match User backup
ForceCommand internal-sftp
2. - Einschränkung durch autorisierte_Tasten
Diese Methode beinhaltet keine Änderungen an der sshd_config
Datei. Sie können einen Benutzer + einen SSH-Schlüssel über die command=
Funktion, die Sie bereits in Ihrer Frage erwähnt haben, auf einen einzelnen Befehl beschränken . Der Trick besteht darin, welchen Befehl Sie einschließen. Sie können den SFTP-Server in diese command=
Zeile einfügen. Dies hat den gleichen Effekt wie das Einrichten des SFTP-Servers in Ihrer sshd_config
Datei.
# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host
HINWEIS: Wenn der Benutzer Schreibzugriff hat ~/.ssh/authorized_keys
, kann er ihn lesen und / oder ändern. Zum Beispiel könnten sie es herunterladen, bearbeiten und erneut hochladen, indem sie das entfernen commmand=...
und ihm uneingeschränkten Befehlszugriff gewähren, einschließlich der Shell. Wenn der Benutzer Schreibzugriff hat ~/.ssh
, kann er auch einfach die Verknüpfung aufheben und die Datei neu erstellen oder chmod
sie zum Schreiben verwenden. Es gibt viele mögliche Lösungen, z. B. das Ablegen der ~/.ssh/authorized_keys
Dateien an einem nicht vom Benutzer beschreibbaren Ort, z. B.:
Match Group sftponly
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
Frage 2
Und wie kann ich das Problem "Fehlender bekannter Host" bei jeder Änderung meiner IP-Adresse überwinden, da ich eine dynamische IP-Adresse habe?
Dies ist schwieriger, aber auch mit der from=
Funktion in der authorized_keys
Datei möglich. Hier beschränken wir den Zugriff nur vom Host aus somehost.dyndns.org
.
from = "somehost.dyndns.org", command = "/ usr / libexec / openssh / sftp-server", keine Portweiterleitung, keine X11-Weiterleitung, keine Agentenweiterleitung, keine pty ssh-dss AAAAC8ghi9ldw == backup @ host
Die zusätzlichen Einstellungen nach dem command=
sind ebenso wichtig, da sie die Verwendung des SSH-Schlüssels noch weiter einschränken.
Aufschlüsselung der Funktionen
from='hostname1,hostname2,''
- Beschränkt den Zugriff über die angegebenen IP- oder Hostnamenmuster
command='command'
- Führt den angegebenen Befehl nach der Authentifizierung aus
no-pty
- Weist keine Pty zu (erlaubt keine interaktive Anmeldung)
no-port-forwarding
- Ermöglicht keine Portweiterleitung
no-X11-forwarding
- Der Benutzer kann die X11-GUIs für die Anzeige nicht entfernen
no-agent-forwarding
- Der Benutzer kann diesen Host nicht an andere interne Hosts weiterleiten
Um die Meldung über die "fehlenden bekannten Hosts" zu entfernen, können Sie dem Client diese SSH-Option hinzufügen, wenn er eine Verbindung wie folgt herstellt:
$ ssh -o StrictHostKeyChecking=no ....
ssh_config
Ausführliche Informationen zu diesem Schalter finden Sie in der Manpage .
Einschränkung der Benutzer-Shell
Bei beiden oben genannten Lösungen möchten Sie den backup
Benutzer wahrscheinlich sperren, indem Sie auch die Shell dieses Benutzers in der /etc/passwd
Datei einschränken . Normalerweise möchten Sie es einstellen scponly
, aber es gibt auch andere Möglichkeiten dafür. In diesem U & L-Q & A mit dem Titel " Benötigen Sie eine Shell für SCP? "
Die Verwendung von /sbin/nologin
kann auch verwendet werden, wenn Sie die Chroot-Funktion sshd_config
wie oben in Nr. 1 beschrieben verwenden . Wenn Sie sich jedoch für die in Nr. 2 beschriebene Methode entscheiden , müssen Sie wahrscheinlich scponly
oder etwas anderes für die Shell des Benutzers verwenden /etc/passwd
.
BONUS - Erweiterung Nr. 2 oben
Wenn Sie eine Reihe von Befehlen für diesen Benutzer verfügbar machen müssen, können Sie dies auch tun. Erstellen Sie ein Skript wie folgt /home/backup/commands.sh
:
#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
"diskspace")
df -h
;;
"dirlist")
ls -1
;;
"apache_restart")
/etc/init.d/apache restart
;;
*)
echo "Unknown command"
esac
Anschließend richten Sie die authorized_keys
Datei folgendermaßen ein:
command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host
Der backup
Benutzer kann diese Befehle dann folgendermaßen ausführen:
# diskspace
$ ssh -q user@remote_host diskspace
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev-root 39G 2.2G 35G 6% /
# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql
Verweise