Kleine und große Linux AHAs
Beiträge getaggt mit ssh
HDYUYD Teil IV: How do you use your terminal
25. Feb
Administration von Linux Servern ohne Terminal ist für mich nicht wirklich vorstellbar. Natürlich gibt es irgendwelche Blackboxen die über ein Webinterface administriert werden und so perfekt gemacht sind, dass man die Konsole nicht wirklich braucht. Ich spreche hier aber von Linux Servern in Unternehmen – ich beschreibe ja auch was ich so zum Arbeiten nutze und wie. Da kommt man nicht um ein Terminal herum.
Nun hat auch für die Konsole jeder seine Mittel, Vorlieben und Wege um zu arbeiten.
Gnome-Terminal
Natürlich nutze ich das Gnome-Terminal
Für mich gibt es dabei ein paar wichtige Einstellungen damit ich mich wohlfühle.
Größe
Per Default ist das Terminal recht klein. Damit ich nicht immer wieder die Größe mit Hilfe der Maus ändern muss, ist für mich eine der ersten Einstellungen die Default Größe des Terminals. Das geschieht über Bearbeiten->Profile->Default->Benutzerdefinierte Größe …
Man kann natürlich auch das Terminal mit dem Parameter –geometry die Größe für den Aufruf anpassen. Allerdings funktioniert das dann nicht mit Gnome-Do
Rollbraten
Ähem, Rollbalken natürlich. Mit Rollbalken ist im Prinzip die Anzahl der Zeilen gemeint, die man per <shift>+<bild auf> oder mit der Maus nach oben scrollen kann. Die Standardeinstellung von 512 Zeilen reicht bei weitem nicht aus und macht auch meiner Meinung nach keinen Sinn. Es genügt schon sich ein paar Mal die Prozessliste anzuschauen um die 512 Zeilen zu überschreiten.
Ganz nebenbei habe ich den wirklichen Rollbalken auch komplett deaktiviert, da ich lediglich die o.g. Tastenkombination nutze.
Unnützes deaktivieren
Ebenso wie den Rollbalken habe ich auch das Menü deaktiviert.
Das Menü wird – wenigstens von mir – nur sehr sehr selten genutzt. Daher macht es keinen Sinn es eingeblendet zu lassen. Vor allem da man es ausblenden kann
Hat man das Menü ausgeblendet, so kann es mit Hilfe der rechten Maustaste (auf das Terminal) wieder eingeblendet werden.
Farbschema
Wenn man den ganzen Tag mit der Konsole arbeitet möchte man keine Transparenz haben. Also wenigstens für mein Empfinden macht das wahnsinnig. Daher nutze ich ein ganz konservatives Schwarz auf Gelb.
Gehhilfen
s
“s” ist der definitv am meisten genutzte “Shortcut”. Dabei liegt dahinter eine Funktion die ssh mit diversen Parametern aufruft. Das ganze in die .bashrc gepackt und man kann sich einige Tipparbeit sparen. In meinem Beispiel sieht das so aus. Alle Server an unserem größten Standort beginnen mit den gleichen Anfangsbuchstaben – sagen wir xyz. Generell ist die Konvention für Servernamen xyz-lxs01 (lxs -> Linux Server, 01 -> fortlaufende Nummer).
Nun habe ich “s” so angepasst, dass wenn ich nur lxs01 eingebe, er den xyz von selbst hinzufügt. Gebe ich allerdings einen Servernamen für einen anderen Standort an dann nimmt er diesen (xxx-lxs01). Des Weiteren werden Parameter mit übergeben, wobei die Funktion offen ist für weitere Parameter.
function s {
if [[ "$*" =~ ^lxs ]]; then
ssh -AYC -o TCPKeepAlive=yes root@xyz-$*
else
ssh -AYC -o TCPKeepAlive=yes root@$*
fi
}
Obwohl der User mit root@ angegeben ist, kann man mit dem Parameter -l einen anderen Loginnamen übergeben.
Ein normaler Aufruf reduziert sich bei mir also auf “s lxs01″.
sshknownhosts
Sascha hat in seinem Artikel die Funktion sshknownhosts bereits erklärt. Auch diese gehört zu meinem Repertoire.
<STRG>+<R>
Ein Bash Shortcut den ich lange nicht gekannt habe ist <STRG>+<R>. Damit kann man in den letzten Befehlen (history) direkt suchen. Man gibt einen Teil eines Befehls ein und bekommt sofort ein Ergebnis (soweit vorhanden) präsentiert. Mehrere Treffer kann mit nochmaliger Anwendung der Shortcuts durchlaufen.
<ESC>+<.>
Auch ein lange nicht bekannter Shortcut (thx Sascha) ist <ESC>+<.>. Dieser zeigt den/die zuletzt verwendeten Parameter (den letzten Parameter). Hat man beispielsweise gerade eine Datei per cat ausgegeben und möchte sie nun per vi öffnen, so kann man das ganze verkürzen indem man “vi <ESC>+<.>” anwendet. Auch dieser Befehl durchläuft die Liste der letzten Parameter wenn man den Shortcut häufiger anwendet.
Gut versteckt: Ubuntu Server Systemstatus beim Login deaktivieren
24. Sep
![]()
Welcome to Ubuntu! * Documentation: https://help.ubuntu.com/ System information as of Fr 24. Sep 10:39:57 CEST 2010 System load: 0.0 Swap usage: 0% Users logged in: 1 Usage of /: 9.5% of 9.17GB Temperature: 8 C Memory usage: 32% Processes: 120
Wenn man sich nur selten an einem System einloggt, so wird das nicht stören. Loggt man sich öfter ein, so nervt das mitunter da es den Login verzögert. Des Weiteren möchte man vielleicht einen eigenen Text dort anzeigen.
Da ich ein wenig suchen musste um zu finden wie das ganze gemacht ist, möchte ich es mit euch teilen
Rauswurf
In der /etc/pam.d/sshd, bzw. in der /etc/pam.d/login wird ein PAM-Modul für diese Funktion ausgeführt.
# Print the message of the day upon successful login. session optional pam_motd.so # [1]
Was war jetzt da so schwer dran?
SSH authorized_keys mal anders verwalten
15. Jun
Wir haben viele Admins, die sich über ihre SSH Schlüssel per root an unsere RHEL Server direkt anmelden wollen. Das root Passwort ist keinem bekannt. Durch geeignete Log Optionen in der sshd_config können finger prints der Schlüssel, die sich anmelden protokolliert werden.
Die Verwaltung der authorized_keys auf so vielen Servern war aber immer etwas mühselig, bis wir auf die Idee gekommen sind, das ganze per RPM verwalten zu lassen. Den öffentlichen Schlüsselteil verpacken wir in ein RPM mit sprechendem Namen und verteilen dieses auf die entsprechenden Systeme.
Das Verfahren hat folgende Vorteile:
- Wenn ein Admin einen neuen Schlüssel erzeugt (weil Passphrase vergessen, Schlüssel kompromittiert, …), ist die Verteilung des neuen Schlüssels durch ein neues RPM mit höherer Versionsnummer sehr einfach über die Standard System Update Mechanismen (Satellite usw.) zu realisieren.
- Wer direkten Root Zugriff hat ist leicht über die RPM Paketliste zu erkennen.
- Scheidet ein Kollege aus, muss nur sein RPM überall deinstalliert werden und schon hat er keinen root Zugriff mehr auf die Systeme.
So funktionierts:
Das Spec File für das ssh rootkey RPM findet ihr hier: ssh-rootkey-_USERNAME_.spec
Einfach überall _USERNAME_ in einen sprechenden Namen austauschen, z.B. ssh-rootkey-hsimpson.spec und die SSHKEY_-Variablen mit den Schlüsselinformationen bestücken und das Spec file ist fertig.
Ein rpm -bb erzeugt dann das entsprechende RPM. Ab ins System Management Tool, auf die Systeme installiert und schon hat der Admin mit seinem Schlüssel Zugriff auf das System.
sftp Server Teil II – “Jail made easy”
08. Feb
Im ersten Teil haben wir das aktuelle openssh Paket für RHEL gebaut und sollten das auch mittlerweile installiert haben. Die Konfiguration des SSH-Servers hat sich nur wenig geändert. Es gibt eigentlich auch nur wenig neue Stellen die hier für uns interessant sind. Aber wir beginnen am Anfang:
Gruppe für sftp
Die Steuerung ob ein Benutzer in einer “gechrooteten” Umgebung landet wird über eine Gruppe gesteuert. Diese könnte man beispielsweise “sftpchroot” nennen. Diese Gruppe wird also angelegt:
groupadd sftpchroot
Benutzer anlegen
Als nächstes muss der Benutzeraccount angelegt werden, der sich auch in der Gruppe sftpchroot befindet:
useradd testuser -G sftpchroot
(Passwort setzen oder disablen, je nach dem ob sich per Key oder Passwort eingeloggt werden soll. Eine Shell benötigt der User auch nicht unbedingt.)
Benutzerhome anpassen
Das Benutzerhome (/home/testuser) muss von den Rechten her angepasst werden, damit das “chrooten” funktioniert. Gleichzeitig legen wir ein Verzeichnis (exchange) an, in welches der Benutzer über sftp schreiben darf.
chown root:sftpchroot /home/testuser mkdir /home/testuser/exchange chown testuser:testuser /home/testuser/exchange
Möchte man die Authentifizierung per Key machen, so muss folgendes ebenfalls eingerichtet werden:
mkdir /home/testuser/.ssh chown testuser:testuser /home/testuser/.ssh
Der Key kommt dann in die authorized_keys; die Rechte werden auf 0600 gesetzt und fertig.
Logging
Wir möchten genau sehen, welche Befehle auf dem SFTP Server abgesetzt werden. Daher muss auch das Logging aufgesetzt werden. Dazu ist es nötig, dass in jedem Home ein dev Verzeichnis angelegt wird (-> mkdir /home/testuser/dev). Dort wird dann vom dem Syslog Server des Vertrauens eine Pipe angelegt und damit ist das Logging im System.
Wir verwenden den syslog-ng (syslog-ng). Die Konfiguration dafür sieht wie folgt aus:
source s_sftpchroot {
# Please add each chrooted environment here
# These logs stay on the local machine; not sended to the syslog-server
unix-stream ("/home/testuser/dev/log");
};
destination d_sftplog { file("/var/log/sftp_chrooted.log"); };
log { source(s_sftpchroot); destination(d_sftplog); };
Jede Chroot Umgebung muss hier im Abschnitt “source” eingetragen werden. Damit fließen alle sftp logs in eine Datei. Alternativ kann natürlich auch für jeden Benutzer ein eigenes Log geschrieben werden. Welche Konfigteile dazu angepasst werden müssen sollte ersichtlich sein
Openssh Chroot
Nun zu dem früher schwierigsten, heute jedoch einfachsten Teil. Das Openssh Chroot. Ich zeige einfach die Konfiguration – it`s that easy !
Subsystem sftp internal-sftp Match group sftpchroot X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp -l VERBOSE ChrootDirectory /home/%u
Mit dieser Konfiguation am Ende der sshd_config (/etc/ssh) bekommt jeder Benutzer, der sich in der Gruppe sftpchroot befindet, besondere Optionen. Unter anderem wird lediglich der interne sftp-server (internal-sftp) zugelassen, der mit dem Parameter “-l VERBOSE” sämtliche Befehle des Benutzers loggt. Fertig.
sftp Server Teil I – RPM bauen “made easy”
04. Feb
Ein SFTP Server ist heutzutage eigentlich nichts besonderes mehr – kommt auf die Anforderungen an. Ich möchte in zwei Teilen erklären, wie man einen sicheren “SFTP only” Server aufbaut. Das ist an sich auch wirklich nicht so schwierig.
Wenn googelt wird man schnell sehen, dass es wahnsinnig viele Anleitungen gibt um sowas zu machen. “chrooted sftp” ist da das Stichwort und es sind diverse Patches notwendig. Allerdings sind die meisten dieser Anleitungen hinfällig, da die aktuellen Version von Openssh (5.3p) bereits alles mitbringt, was man benötigt.
Unter RHEL 5 gibt es zur Zeit Openssh Version 4.3p2 als aktuellstes Package. Damit kann man weder ein “Gefängnis” (Jail -> chrooted User) bauen, noch ist das Logging so, dass man damit auch im Problemfall etwas nachvollziehen kann. Da es sehr einfach ist, das Paket selbst zu bauen, bin ich auch gar nicht erst auf die Suche gegangen um irgendwo ein fertiges zu finden.
Quellen besorgen
Die Quellen für Openssh gibt es natürlich unter openssh.org – bzw. die Mirrorliste hier. Bei Erstellung war die aktuelle Version openssh-5.3p1.tar.gz
Prerequisites
yum install gcc openssl-devel pam-devel rpm-build
Auspacken und los
tar zxvf openssh-5.2p1.tar.gz cp openssh-<VERSION>/contrib/redhat/openssh.spec /usr/src/redhat/SPECS/ cp openssh-<VERSION>.tar.gz /usr/src/redhat/SOURCES/ cd /usr/src/redhat/SPECS # askpass wird nicht benoetigt perl -i.bak -pe 's/^(%define no_(gnome|x11)_askpass)\s+0$/$1 1/' openssh.spec rpmbuild -bb openssh.spec
Fertige RPMs
Die fertigen RPMs sind dann unter
cd /usr/src/redhat/RPMS/`uname -i`
zu finden.
Vor der Installation sollten die alten (alle !) Pakete deinstalliert werden oder die neuen mit “rpm -U” als Update installieren.
Veraltete Einträge in .ssh/known_hosts
04. Mai
Ronny hat mir grade eine kleine Bash Funktion geschickt, die mir ab jetzt viel Nerven sparen wird:
Wenn ein Server neu installiert wird (passiert bei uns schon ab und zu) ändern sich auch die SSH Server Keys. Beim nächsten Versuch, sich per SSH auf die neu installierte Maschine zu verbinden, verweigert SSH Aufgrund der Sicherheitseinstellungen den Dienst.
Es war dann immer umständlich, die alten Keys aus der known_hosts zu löschen.
Mit der folgenden Funktion (eingebaut in die .bashrc) geht das recht flott.
Als Übergabe nur die Zeilennummer mitgeben, die bei der SSH Fehlermeldung steht:
function sshknownhosts {
if [ $1 ]; then
sed -i ${1}d ~/.ssh/known_hosts
sed -i ${1}d ~/.ssh/known_hosts
echo "Zeile ${1} geloescht"
else
echo "Bitte Zeilennummer angeben"
fi
}
Sehr feines sed Skript zum löschen einer Zeile in einer Textdatei.
Thx Ronny!





