rsync / ssh

pHoEnIx-sTyLe

Registered User
Hallo zusammen,

Mit einem Backup-Script möchte ich täglich Daten backuppen und diese dann zusätzlich auf einen Backupserver schieben. Damit das jedoch per Cron ausgeführt werden kann, muss ich ja für beide Server authorized_keys hinzufügen damit nicht nach dem passwort gefragt wird.

Ich frage extra vorläufig nochmal nach, damit ich nicht nachher blöd dastehe und nicht mehr auf den Server als root komme.

Mein Ablauf würde wie folgt aussehen:

1) Mit Puttygen einen Key erstellen. (Bsp: .rsa)
2) .ssh/authorized_keys erstellen (falls nicht vorhanden)
3) Public Key Inhalt in authorized_keys einfügen
4) sshd_config in /etc/ssh/sshd_conf anpassen.
Sieht dann wie folgt aus:

Code:
#       $OpenBSD: sshd_config,v 1.74 2006/07/19 13:07:10 dtucker Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.

Port **
Protocol 2
#ListenAddress 0.0.0.0
#ListenAddress ::

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768

# Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:
AllowUsers ***
#LoginGraceTime 2m
#PermitRootLogin yes
StrictModes no

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication yes
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords yes

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable support for the deprecated 'gssapi' authentication
# mechanism to OpenSSH 3.8p1. The newer 'gssapi-with-mic' mechanism is included
# in this release. The use of 'gssapi' is deprecated due to the presence of
# potential man-in-the-middle attacks, which 'gssapi-with-mic' is not susceptible to.
#GSSAPIEnableMITMAttack no

# Set this to 'yes' to enable PAM authentication (via challenge-response)
# and session processing. Depending on your PAM configuration, this may
# bypass the setting of 'PasswordAuthentication' and 'PermitEmptyPasswords'
UsePAM yes

#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10

# no default banner path
#Banner /some/path

# override default of no subsystems
Subsystem    sftp    /usr/lib/ssh/sftp-server

# This enables accepting locale enviroment variables LC_* LANG, see sshd_config(5).
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server

5) sshd restarten

Beides natürlich für Client und Server.
Sowie ich das verstanden habe ist es ja egal ob ich hierbei rsa oder dsa verwende. Gehe ich hier richtig in der Annahme? (Wobei ich jetzt den rsa nehmen würde)

Jetzt will ich aber trotzdem mich weiterhin ganz normal als root auf meinen Servern über ssh einloggen. Also ohne Private Key, denn mir geht es ja um den public key, den ich für rsync benötige. Solange ich in der "Auth" von Putty keine Datei auswähle, sollte dies doch weiterhin möglich sein. Oder?

Natürlich hab ich mich hierüber schon informiert und die entsprechenden Dinge aus folgendem Thema entnommen:

Es geht mir lediglich darum vorher nochmal "abgesichert" zu sein was meine Vorgehensweise an geht.
 
Soweit ich das jetzt beim überfliegen deines Posts gesehen habe, passt alles.

Wenn du an der sshd_config bastelst, dann lass dir ein Terminal Fenster offen und teste mit einer neuen Verbindung ob alles klappt. Falls nicht, kannst du dann mit der noch bestehenden, die Config wieder zurückspielen. Falls trotzdem alle Stricke reißen sollten, hast du ja auch noch immer das Rescue System, wo du deine alte Config wieder einspielen kannst. :)
 
Keys die mit putty generiert werden sind für openssh nicht lesbar. Deshalb vorher in ein von openssh lesbares Format umwandeln. Das geht auch mit puttygen, aber wenn mans nicht weiß ist es eine häufige Fehlerquelle.
 
Wenn Du das Schlüsselpaar auf einer Windowsbüchse generierst, schaffst Du eine unnötige Fehlerquelle. Weshalb generierst Du die nicht auf dem Zielserver und schiebst den public key auf die zu sichernde Box?
 
Erstmal danke für die Antworten.

Deshalb vorher in ein von openssh lesbares Format umwandeln. Das geht auch mit puttygen, ...

Welches Format meinst du jetzt genau?

Weshalb generierst Du die nicht auf dem Zielserver und schiebst den public key auf die zu sichernde Box?

Ja könnte ich auch machen, aber mir schien es mit dem puttygen einfacher. Mit erstellen auf den Zielserver hab ich mich jetzt noch nicht informiert.
 
Kommt darauf an welchen SSH Daemon du verwendest, gibts ja mehrere. Auf jeden Fall kann man mit puttygen generierte Schlüssel laden und als jeweiliges Format exportieren (Grafik)
 

Attachments

  • puttygen.jpg
    puttygen.jpg
    61.3 KB · Views: 138

Ok hab mich nun mal informiert darüber. Jedoch sind nun wieder Fragen aufgekommen.
Wenn ich über rsync Daten übertragen will, ist es nötig (so wie ich das verstanden habe) einen key ohne passphrase zu erstellen damit das passwort nicht nachgefragt wird. Hab ich das richtig verstanden, oder reicht alleine der fakt dass die zu sichernde Maschine den public key des Backup Servers hat? Also selbst wenn ich ein Passwort angebe. Denn sowie ich das verstanden habe wird doch die passphrase nur für einen private key genutzt, oder?

Wenn ich wirklich einen key ohne passphrase erstellen müsste, dann müsste ich einen ssh account erstellen der eben keine root Rechte benötigt, sondern eben nur Zugriff auf den Backup Ordner auf der Maschine hat. Eben darum um das System sicher zu halten.
 
Genau. Ich mache es immer so:

a) Erstelle User 'rsync' auf beiden Rechnern.
b) Generiere Schlüsselpaar auf Zielrechner für User 'rsync' (ohne PW)
c) Kopiere public key auf zu sichernden Rechner.
 
Alles klar, danke soweit, genau so hab ich mir da auch vorgestellt.

Noch kurz was zum User erstellen.
Ich würde gerne dem User nur rechte für den Ordner /backup geben. Also dass der User nicht munter durch meine Dateien blättern könnte. Also ein login würde direkt im ordner /backup enden. Das ganze könnte man mit chroot umsetzen, aber sollte ja auch beim anlegen des accounts funktionieren. wie hast du das umgesetzt, oder wie würdest du es umsetzen?
User mit adduser erstellen ist klar. Aber dann wirds mir auch schon unklar.
 
Da der User nur mit einem gültigen public key reinkommt, ist er immer ein automatischer Prozeß, also kein Mensch, der über eine Shell Zugriff nimmt und sich umschaut.

Da ich ausschließlich FreeBSD-Server nutze, würde ich das mit Jails realisieren.
 
ok der key wird in den authorized keys auch abgelegt.
das heisst das wäre somit auch soweit sicher.

nur mit dem useradd bin ich jetzt nicht so gewandt. hab zwar schon per man useradd versucht mich darin weiter zu informieren, nur ganz schlüssig bin ich daraus noch nicht geworden.
kann mir da jmd eine hilfestellung geben mit welchen optionen ich den user in diesem falle anlegen sollte?
 
ok der key wird in den authorized keys auch abgelegt.
das heisst das wäre somit auch soweit sicher.
Das heißt es noch nicht automatisch. Du musst den Befehl, der auf der Remote-Seite ausgeführt werden darf, explizit in authorized_keys angeben, also so:
Code:
command="rsync --server --sender -logDtprz . ../" ssh-dss AAAAB3NzaC1kc3MAAAEBAPJp87dQXqfa2HPTVp.....
Damit kann der Benutzer nur genau diesen Befehl mit genau diesen Parametern ausführen. Die genauen Parameter musst Du natürlich noch rausfinden, in dem Du den rsync-Befehl via ssh startest und gleichzeitig auf dem remote-host mit "ps aux" nachschaust, welche Optionen dort dann verwendet werden. (Siehe auch diesen Thread)

nur mit dem useradd bin ich jetzt nicht so gewandt. hab zwar schon per man useradd versucht mich darin weiter zu informieren, nur ganz schlüssig bin ich daraus noch nicht geworden.
kann mir da jmd eine hilfestellung geben mit welchen optionen ich den user in diesem falle anlegen sollte?
Code:
useradd -c "Rsync-Backup-Benutzer" -m -s /bin/bash -p "*" rsback
Den Kommentar im GCOS-Feld braucht man nicht wirklich, also könntest Du die Option -c auch weglassen; das Home-Verzeichnis muss angelegt werden (da dort die .ssh/authorized_keys hin müssen), also -m; Die Angabe der shell ist ebenfalls optional, da standardmäßig /bin/bash genommen wird; die Angabe des verschlüsselten Passwordstrings "*" ist ebenfalls nicht wirklich notwendig, da als Standard "!" eingetragen wird, was genauso dazu führt, dass der Benutzer sich nicht mit einem Passwort anmelden kann. Insofern würde als absolutes Minimum auch
Code:
useradd -m rsback
reichen.
 
Back
Top