blog.bartlweb - a technologist's external brain

Thema: Linux

remote Befehle per SSH ausführen

SSH erlaubt es direkt Befehle an den entfernten Rechner als Parameter mit zu übergeben.

ssh <servername> -p <port> -l <username> -t "<remote-command>"

Das folgende Beispiel startet den Remote-Rechner neu.

ssh 10.0.0.1 -p 22 -l root -t "shutdown -r now"

Wer den SSH-Zugriff über Zertifikate steuert kann somit auch innerhalb von seinen Skripten Befehle per SSH an entfernte Rechner senden.

SSH Zugang für Benutzer auf IP-Basis beschränken

Gerade wer auf seine Server (aus welchen Gründen auch immer) den Zugriff von root per SSH erlaubt sollte diesen auf das lokale Netzwerk einschränken. Der SSH-Server bietet dafür den Konfigurationsparamerter AllowUsers mit dessen Hilfe sich der Zugriff auf einzelne Nutzer und Netzwerke einschränken lässt. Die entsprechende Konfigurationsdatei finden Sie unter /etc/ssh/sshd_config.

Konfigurationsbeispiele

SSH-Zugriff nur für die Benutzer user1 und user 2 zulassen.

AllowUsers user1 user2

SSH-Zugriff für die Benutzer user1 und user2 zulassen und zustätzlich für den Benutzer root insofern sich der Client im lokalen Netzwerk (10.0.0.*) befindet.

AllowUsers root@10.0.0.* user1 user2

SSH-Tunnel für entfernte Dienste

Linux bietet mit SSH nicht nur die Möglichkeit das System fernzuwarten oder Dateien sicher zu übertragen. Über SSH können auch einzelne Dienste des Remote-Rechners oder aus dessen Netzwerk für den lokalen Rechner zugänglich gemacht werden. Dazu kann man mittels SSH einen Tunnel für einzelne Ports aufbauen.

ssh <your.server.com> -p <ssh-Port> -l <benutzername> -L <lokalerPort:ZielServer:ZielPort>

Achten Sie darauf den lokalen Port so zu wählen, dass dieser nicht durch einen anderen oder gleichwertigen Dienst belegt ist.

Beispiel 1

Wir wollen lokal direkt auf den MySQL-Server des Zielrechners zugreifen.

ssh server.example.com -p 22 -l root -L 3307:localhost:3306

In Ihrer Anwendung können Sie den MySQL-Server nun unter localhost und dem Port 3307 erreichen.

Distributions-Upgrade von OpenSuse

Wie vor jeder größeren Systemänderung sollten Sie zunächst ein Backup des kompletten Systems erstellen.

Vor dem Upgrade Ihrer aktuellen OpenSuse-Installation auf eine neue Version sollten Sie zunächst alle für die aktuelle Distribution erhältichen Updates einspielen.

Kontrollieren Sie mit dem folgenden Befehl ob die aktuellen Repositories für Ihr System eingebunden und aktiviert sind.

zypper repos --uri

Jetzt können Sie mit den beiden untenstehenden Befehlen alle vorhandenen Updates einspielen.

zypper refresh
zypper update

Nun kann das eigentliche Distributions-Upgrade stattfinden. Wechseln Sie zunächst die Urls zu den Update-Repositories auf die der neuen Version aus. Der folgende Befehl deaktiviert alle aktuellen Repositories.

Server mit iptables absichern

Die folgende Anleitung erläutert wie mit Hilfe von iptables der Zugriff auf Serverdienste aus dem Netzwerk abgesichert werden kann. Nähere Information zu iptables finden sich auch in der Online-Dokumentation von Ubuntu: https://help.ubuntu.com/community/IptablesHowTo

iptables konfigurieren

Als erstes müssen die iptabels-Regeln erstellt werden. Dazu müssen Sie die folgenden Befehle auf der Konsole eingeben.

iptables -A INPUT -p tcp --dport 22 -m recent --set --name ssh --rsource
iptables -A INPUT -p tcp --dport 22 -m recent ! --rcheck --seconds 60 --hitcount 4 --name ssh --rsource -j ACCEPT
 
iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

Die erste Regel unterbindet eine Dictionary-Attacke auf den SSH-Zugang in dem nur 4 Verbindungsversuche pro 60 Sekunden zugelassen werden . Die zweite Regel unterbindet jeglichen Zugriff auf den MySQL-Standardport.

Textdateien unter Linux dursuchen

Der Befehl grep ermöglicht es uns Textdateien nach einem Begriff zu durchsuchen und die entsprechenden Pfade zu den Dateien auszugeben

grep -rl 'suchbegriff' /path/to/search

Der Parameter -r steht für recursiv, d.h. es wird auch in Unterordnern des angegebenen Verzeichnisses gesucht.

Um nur die Anzahl der Dateien zu ermitteln muss der Befehl wie folgt ergänzt werden.

grep -rl 'suchbegriff' /path/to/search | wc -l

vsftpd für den Zugriff auf www-Root konfigurieren

Die folgende Anleitung erläutert die Konfiguration eines FTP-Servers für den Zugriff von Benutzern ohne Shell-Login auf das Rootverzeichnis des Webservers.

Installieren Sie zunächst den FTP-Server vsftpd. Unter OpenSuse via Yast, unter Ubuntu via apt-get install vsftpd.

Benutzer anlegen und Rechte vergeben

Zunächst legen wir eine neue Benutzergruppe (im Beispiel wwwftp) an unter der all unsere FTP-Benutzer zusammengefasst werden.

groupadd wwwftp

Danach legen wir unseren ersten Benutzer ftpuser an. Diesen fügen wir unserer Gruppe wwwftp hinzu und setzen das Home-Verzeichnis auf unser Root-Verzeichnis des Webservers /var/www. Dadurch wird dem Benutzer beim einloggen via FTP sofort das Webserver-Rootverzechnis präsentiert.

Filesystem-Checks fsck unter Linux händeln

Wer kennt das Problem nicht: Immer dann wenn der Server-Reboot schnell gehen muss wird wieder eine automatische Überprüfung des Dateisystems durchgeführt - und das kann dauern.

Parameter für den Neustart

Darum gibt es die Möglichkeit über den Shutdown-Befehl die Überprüfung beim Reboot expliziet zu verhindern oder zu erzwingen.

Filesystem-Check verhindern

shutdown -f -r now

Filesystem-Check erzwingen

shutdown -F -r now

Überprüfungsintervall auslesen und anpassen

Die wichtigsten Parameter im Zusammenhang mit der automatischen Überprüfung sind: mount count, maximum mount count, last checked, check interval, next check after. Diese lassen Sich für jede Partition über den folgenden Befehl abrufen:

3ware/LSI 3DM2 Init-Skript

Wer die Verwaltungssoftware 3DM2 für LSI/3ware RAID-Controller unter Linux installiert wird feststellen, dass kein Init-Skript mitgeliefert wird. Um die Verwaltungssoftware dennoch beim Boot automatisch mit zu starten findet Sie unten ein für Ubuntu geschriebenes Init-Skript.

Autostart konfigurieren

Erstellen Sie unter /etc/init.d/ eine Datei mit dem Namen 3dm2 und dem unteren Skript als Inhalt.

Passen Sie die Rechte entsprechend an:

chown root:root 3dm2
chmod 755 3dm2

Konfigurieren Sie die Datei für den Autostart:

update-rc.d 3dm2 defaults

 Skript

 

#!/bin/sh
#
# Start the 3DM2 Management Interface
#
# Copyright © 2011 Christian Bartl
#
### BEGIN INIT INFO
# Provides:          3dm2
# Required-Start:   
# Required-Stop:    
# Should-Start:     
# Default-Start:     3 4 5
# Default-Stop:     
# Short-Description: 3ware management interface
# Description:       3ware management interface
### END INIT INFO
#
set -e
 
# /etc/init.d/3dm2: start and stop the 3DM2 "3ware management" daemon
 
DAEMON=/usr/sbin/3dm2
PIDFILE=/usr/sbin/3dm2.pid
 
. /lib/lsb/init-functions
 
test -x "$DAEMON" || exit 0
 
case "${1:-}" in
  start)
    log_daemon_msg "Starting 3ware management console" 3dm2
    if start-stop-daemon -S -b -o -n $DAEMON -x $DAEMON; then
       log_end_msg 0
    else
       log_end_msg 1
    fi
    ;;
  stop)
    log_daemon_msg "Stopping 3ware management console" 3dm2
    if start-stop-daemon -K -o -x $DAEMON; then
      # rm -f $PIDFILE
       log_end_msg 0
    else
       log_end_msg 1
    fi
    ;;
  restart|reload|force-reload)
    ${0:-} stop
    ${0:-} start
    ;;
  *)
    echo "Usage: ${0:-} {start|stop|restart}" >&2
    exit 1
    ;;
esac
 
exit 0

Windows-Freigabe automatisch beim Booten mounten

Um eine Windows-Freigabe automatisch beim Start von Linux zu mounten bedarf es einem Eintrag in der Fstab-Datei.

Share beim Booten mounten

Um Samba-Shares bzw. Windows-Freigaben mounten zu können, müssen Sie zunächst smbfs auf Ihrem Server installieren. Unter Ubuntu passiert dies mit folgendem Befehl:

apt-get install smbfs

Danach legen wir eine Text-Datei mit den Zugangsdaten zu unserer Freigabe an. Speichern Sie diese unter /etc/fstab.smbcredentials mit dem folgenden Inhalt (Ersetzten Sie <benutzername> und <passwort> durch Ihre Zugangsdaten.

username=<benutzername>
password=<passwort>

Da Sie vermutlich mit einen bestimmten Benutzer (z.B. ihr lokaler Benutzer oder der Benutzer des Webserver) lesend bzw. schreibend auf die Freigabe zugreifen möchten, müssen Sie noch die Benutzer-ID (uid) und Gruppen-ID (gid) des Benutzers ermitteln.