Linux Tipps & Tricks
Ubuntu/Debian: Eigene Rootzertifikate importieren und vertrauen
0Um Zertifikatsfehler bei eigenen CAs zu beseitigen muss man das Root CA Zertifikat dem Zertifikatsstore des Betriebssystems bekannt machen.
Das Root CA Zertifikat muss im Ordner /usr/share/ca-certificates abgelegt werden mit der Endung .crt (nicht .pem). Man sollte einen passenden und aussagekräfigen Namen für die Datei vergeben. Bei Ubuntu sind zusätzlich die Zertifikate in verschiedene Unterordner einsortiert. Wenn es mehrere sind kann man auch noch einen eigenen Ordner erstellen.
root@foobar:/usr/share/ca-certificates# ls -la insgesamt 52 drwxr-xr-x 11 root root 4096 2011-07-29 12:29 . drwxr-xr-x 101 root root 4096 2011-07-28 11:10 .. drwxr-xr-x 2 root root 4096 2011-07-28 10:16 brasil.gov.br drwxr-xr-x 2 root root 4096 2011-07-28 10:16 cacert.org drwxr-xr-x 2 root root 4096 2011-07-28 10:16 debconf.org drwxr-xr-x 2 root root 4096 2011-07-28 10:16 gouv.fr drwxr-xr-x 2 root root 12288 2011-07-28 10:16 mozilla drwxr-xr-x 2 root root 4096 2011-07-28 10:16 signet.pl drwxr-xr-x 2 root root 4096 2011-07-28 10:16 spi-inc.org drwxr-xr-x 2 root root 4096 2011-07-28 10:16 telesec.de
Nach dem Ablegen des Zertifikats muss man dieses noch installieren. Dazu ist das Kommando “dpkg-reconfigure ca-certificates” auszuführen. Es öffnet sich ein Menü, hier ist sicherheitshalber “Fragen” auszuwählen.
┌──────────────────────────────┤ ca-certificates configuration ├───────────────────────────────┐ │ Dieses Paket kann neue Zertifikate von CAs (Zertifizierungsstellen) installieren, wenn ein │ │ Upgrade durchgeführt wird. Sie sollten solche neuen CA-Zertifikate vielleicht prüfen und │ │ nur Zertifikate auswählen, denen Sie vertrauen. │ │ │ │ - Ja : neuen CA-Zertifikaten wird vertraut und sie werden installiert; │ │ - Nein : neue CA-Zertifikate werden standardmäßig nicht installiert; │ │ - Fragen: fragt bei jedem neuen CA-Zertifikat nach. │ │ │ │ Neuen Zertifikaten von Zertifizierungsstellen vertrauen? │ │ │ │ Ja │ │ Nein │ │ Fragen │ │ │ │ │ │ <Ok> │ │ │ └──────────────────────────────────────────────────────────────────────────────────────────────┘
Im nächsten Screen muss das zu installierende Zertifikat markiert werden.
┌──────────────────────────────┤ ca-certificates configuration ├──────────────────────────────┐ │ Dieses Paket installiert gebräuchliche Zertifikate von CAs (Zertifizierungsstellen) unter │ │ /usr/share/ca-certificates. │ │ │ │ Bitte wählen Sie die Zertifizierungsstellen aus, denen Sie vertrauen, damit deren │ │ Zertifikate in /etc/ssl/certs installiert werden. Sie werden in eine einzige Datei │ │ /etc/ssl/certs/ca-certificates.crt zusammengestellt. │ │ │ │ Zu aktivierende Zertifikate: │ │ │ │ [*] brasil.gov.br/brasil.gov.br.crt ↑ │ │ [*] cacert.org/cacert.org.crt ▮ │ │ [*] debconf.org/ca.crt ▒ │ │ [*] gouv.fr/cert_igca_dsa.crt ▒ │ │ [*] gouv.fr/cert_igca_rsa.crt ▒ │ │ [ ] eigene-root-ca/root-ca.crt ▒ │ │ [*] mozilla/ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA.crt ▒ │ │ [*] mozilla/AddTrust_External_Root.crt ↓ │ │ │ │ │ │ <Ok> │ │ │ └─────────────────────────────────────────────────────────────────────────────────────────────┘
Das ganze mit OK bestätigen, das Zertifikat wird installiert.
Postfix: Mail-Relay mit SMTP-Auth via Submission/TLS für ausgehende Mails
0Ein Server soll als Relayhost (oder in der Windowswelt auch Smarthost gennant) dienen. Wer keine feste IP Adresse mit passenden DNS Reverse Eintrag hat wird schlechte Chancen haben das ein richtig konfigurierter Mailserver die Mails annehmen wird. Die Lösung ist die Mails an einen anderen Relayhost oder Mailserver zu schicken und dieser stellt dann die Mails zu. Manchmal bieten die Provider selbst Relayhosts an in vielen Fällen bleibt nichts anderes übrig als das ganze über ein Postfach zu versenden. Einige Provider bieten das Anliefern von Mails nur noch über Submission (TCP/587) und TLS verschlüsselt an. Ist mir persönlich auch lieber …
Beispielszenario
Provider: example.net
Mailaccount: user1@example.net Password: example%1
Mailserver: mail.example.net
Submission (TCP/587) und TLS sind notwendig.
Lösung
“/etc/postfix/main.cf” ergänzen mit:
relayhost = mail.example.net:submission smtp_use_tls=yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth smtp_sasl_security_options = noanonymous, noplaintext smtp_sasl_tls_security_options = noanonymous
/etc/postfix/smtp_auth (Map-Datei, muss initialisiert werden!!!)
mail.example.net:submission user1@example.net:example%1
Folgende Kommandos sind noch auszuführen:
postmap /etc/postfix/smtp_auth
durchführen um die Datei zu mappen.
/etc/init.d/postfix restart
durchführen um die Änderungen zu aktivieren.
Massenhafte Änderungen von Datei und Verzeichnis Rechten unter Linux
0Ich habe gerade das Tool OpenTimeTool auf einem Server installiert. Im Paket sind alle Dateien und Verzeichnisse mit 777 Rechten vorhanden. Man sollte wenn die Kiste im Internet steht die Berechtungungen schon ein wenig restriktiver vergeben. Normalerweise haben Dateien auf einem Webserver eine 644 Maske und Verzeichnisse eine 755 Maske.
foo@bar:/var/www/bar/opentimetool/test# ls -la insgesamt 2404 drwxr-xr-x 7 root root 4096 2011-07-21 15:10 . drwxr-xr-x 8 foo foo 4096 2011-07-21 15:10 .. -rwxrwxrwx 1 root root 9513 2011-04-18 22:12 CHANGELOG drwxrwxrwx 3 root root 4096 2011-04-18 22:25 classes -rwxrwxrwx 1 root root 1371 2008-10-21 21:20 config-local.php.dist -rwxrwxrwx 1 root root 8179 2011-04-18 22:12 config.php -rwxrwxrwx 1 root root 3642 2011-01-05 00:10 db_upgrade.php drwxrwxrwx 3 root root 4096 2011-04-18 22:25 docs drwxrwxrwx 9 root root 4096 2011-04-18 22:25 htdocs drwxrwxrwx 15 root root 4096 2011-04-18 22:25 includes -rwxrwxrwx 1 root root 1546 2008-03-18 15:45 index.php -rwxrwxrwx 1 root root 22871 2011-01-05 00:10 init.php -rwxrwxrwx 1 root root 2983 2008-09-22 18:51 INSTALL -rwxrwxrwx 1 root root 2403 2008-09-22 18:51 INSTALL.de -rwxrwxrwx 1 root root 18009 2008-03-18 15:45 LICENSE -rwxrwxrwx 1 root root 17 2008-03-18 15:45 media -rwxrwxrwx 1 root root 856 2008-03-18 15:45 messages.php -rwxrwxrwx 1 root root 717 2008-10-21 21:20 mobile_access.README drwxrwxrwx 2 root root 4096 2011-04-18 22:25 mobile_login -rwxrwxrwx 1 root root 63312 2010-09-09 10:24 mysql.sql -rw-r--r-- 1 root root 2201345 2011-04-27 22:02 openTimetool_2.3.1.tar.gz -rwxrwxrwx 1 root root 214 2008-03-18 15:45 phpinfo.php -rwxrwxrwx 1 root root 676 2008-03-18 15:45 README -rwxrwxrwx 1 root root 915 2008-03-18 15:45 SafeMode.README -rwxrwxrwx 1 root root 709 2008-03-24 21:18 Suhosin-README.txt -rwxrwxrwx 1 root root 10215 2008-03-18 15:45 TODO -rwxrwxrwx 1 root root 10761 2010-02-09 09:59 translate_de.sql -rwxrwxrwx 1 root root 9243 2010-02-09 09:59 translate_en.sql -rwxrwxrwx 1 root root 982 2010-02-09 09:59 update.README
Mit den Linuxboardmitteln kann man sich viel Arbeit sparen. Mit “find” kann ich einen Parameter -type mitgeben wo ich entweder Dateien (f = Files) oder Verzeichnisse (d = Directory) als Ergebnis zurückgeben lassen kann. Mit dem Parameter -exec kann ich anschließend direkt ein Kommando ausführen und das gefundene als Parameter ({}) mitgeben.
find /var/www/bar/opentimetool/test -type f -exec chmod 644 {} \;
find /var/www/bar/opentimetool/test -type d -exec chmod 755 {} \;
Zuletzt sollte man noch den Benutzer und die Gruppe richtig setzen.
chown www-data:www-data -R /var/www/bar/opentimetool/test
Das Resultat sieht dann wie folgt aus:
foo@bar:/var/www/opentimetool/test# ls -la insgesamt 2404 drwxr-xr-x 7 www-data www-data 4096 2011-07-21 15:10 . drwxr-xr-x 8 foo foo 4096 2011-07-21 15:10 .. -rw-r--r-- 1 www-data www-data 9513 2011-04-18 22:12 CHANGELOG drwxr-xr-x 3 www-data www-data 4096 2011-04-18 22:25 classes -rw-r--r-- 1 www-data www-data 1371 2008-10-21 21:20 config-local.php.dist -rw-r--r-- 1 www-data www-data 8179 2011-04-18 22:12 config.php -rw-r--r-- 1 www-data www-data 3642 2011-01-05 00:10 db_upgrade.php drwxr-xr-x 3 www-data www-data 4096 2011-04-18 22:25 docs drwxr-xr-x 9 www-data www-data 4096 2011-04-18 22:25 htdocs drwxr-xr-x 15 www-data www-data 4096 2011-04-18 22:25 includes -rw-r--r-- 1 www-data www-data 1546 2008-03-18 15:45 index.php -rw-r--r-- 1 www-data www-data 22871 2011-01-05 00:10 init.php -rw-r--r-- 1 www-data www-data 2983 2008-09-22 18:51 INSTALL -rw-r--r-- 1 www-data www-data 2403 2008-09-22 18:51 INSTALL.de -rw-r--r-- 1 www-data www-data 18009 2008-03-18 15:45 LICENSE -rw-r--r-- 1 www-data www-data 17 2008-03-18 15:45 media -rw-r--r-- 1 www-data www-data 856 2008-03-18 15:45 messages.php -rw-r--r-- 1 www-data www-data 717 2008-10-21 21:20 mobile_access.README drwxr-xr-x 2 www-data www-data 4096 2011-04-18 22:25 mobile_login -rw-r--r-- 1 www-data www-data 63312 2010-09-09 10:24 mysql.sql -rw-r--r-- 1 www-data www-data 2201345 2011-04-27 22:02 openTimetool_2.3.1.tar.gz -rw-r--r-- 1 www-data www-data 214 2008-03-18 15:45 phpinfo.php -rw-r--r-- 1 www-data www-data 676 2008-03-18 15:45 README -rw-r--r-- 1 www-data www-data 915 2008-03-18 15:45 SafeMode.README -rw-r--r-- 1 www-data www-data 709 2008-03-24 21:18 Suhosin-README.txt -rw-r--r-- 1 www-data www-data 10215 2008-03-18 15:45 TODO -rw-r--r-- 1 www-data www-data 10761 2010-02-09 09:59 translate_de.sql -rw-r--r-- 1 www-data www-data 9243 2010-02-09 09:59 translate_en.sql -rw-r--r-- 1 www-data www-data 982 2010-02-09 09:59 update.README
socat: Pfiffiges Tool zum Mappen von IPv6 auf IPv4 Adressen
0Wer gerade vor dem Problem steht alle Dienste auf seinen Linux Maschinen IPv4/IPv6 Dualstack fähig zu machen, der ist froh wenn er so ein Tool wie socat findet.
Es sind zwar die meisten Linux Dienste bereits Dualstack fähig aber es gibt vereinzelt noch Dienste wo keine regelmäßige bis keine Pflege der Software stattfindet.
socat ist quasi ein IPv6 -> IPv4 Relay. Das Paket ist im Packet Repository von Debian / Ubuntu verfügbar.
Beschreibung von socat aus der README des Pakets:
socat is a relay for bidirectional data transfer between two independent data channels. Each of these data channels may be a file, pipe, device (serial line etc. or a pseudo terminal), a socket (UNIX, IP4, IP6 - raw, UDP, TCP), an SSL socket, proxy CONNECT connection, a file descriptor (stdin etc.), the GNU line editor (readline), a program, or a combination of two of these. These modes include generation of "listening" sockets, named pipes, and pseudo terminals. socat can be used, e.g., as TCP port forwarder (one-shot or daemon), as an external socksifier, for attacking weak firewalls, as a shell interface to UNIX sockets, IP6 relay, for redirecting TCP oriented programs to a serial line, to logically connect serial lines on different computers, or to establish a relatively secure environment (su and chroot) for running client or server shell scripts with network connections. Many options are available to refine socats behaviour: terminal parameters, open() options, file permissions, file and process owners, basic socket options like bind address, advanced socket options like IP source routing, linger, TTL, TOS (type of service), or TCP performance tuning. More capabilities, like daemon mode with forking, client address check, "tail -f" mode, some stream data processing (line terminator conversion), choosing sockets, pipes, or ptys for interprocess communication, debug and trace options, logging to syslog, stderr or file, and last but not least precise error messages make it a versatile tool for many different purposes. In fact, many of these features already exist in specialized tools; but until now, there does not seem to exists another tool that provides such a generic, flexible, simple and almost comprehensive (UNIX) byte stream connector.
Das Tool kann noch wesentlich mehr, Infos findet man auf der Webseite des Programmierers http://www.dest-unreach.org/socat/.
Ich habe das für meinen alten SKS Keyserver verwendet, der noch kein IPv6 beherrscht. Ich lasse das ganze in einzelnen Screens laufen.
screen -dmS socat1 socat TCP6-LISTEN:11370,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11370 screen -dmS socat2 socat TCP6-LISTEN:11371,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11371 screen -dmS socat3 socat TCP6-LISTEN:80,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11371
Damit das ganze auch noch einen Neustart überlebt kann man es noch in die /etc/rc.local vor dem “exit 0″ einfügen.
Seriennummer und Parameter aus Festplatte auslesen
0apt-get install sdparm
root@server:~# sdparm /dev/sdb /dev/sdb: ATA SAMSUNG HD502IJ 1AA0 Read write error recovery mode page: AWRE 1 ARRE 0 PER 0 Caching (SBC) mode page: WCE 1 RCD 0 Control mode page: SWP 0
Seriennummer:
root@server:~# sdparm --inquiry /dev/sdb
/dev/sdb: ATA SAMSUNG HD502IJ 1AA0
Device identification VPD page:
Addressed logical unit:
designator type: vendor specific [0x0], code set: ASCII
00 53 31 33 54 4a 31 42 51 36 30 31 32 38 31 20 20 S13TJ1BQ601281
10 20 20 20 20
designator type: T10 vendor identification, code set: ASCII
vendor id: ATA
vendor specific: SAMSUNG HD502IJ S13TJ1BQ601281
Caching Mode Seite:
root@server:~# sdparm --page=ca /dev/sdb
/dev/sdb: ATA SAMSUNG HD502IJ 1AA0
Caching (SBC) mode page:
IC 0
ABPF 0
CAP 0
DISC 0
SIZE 0
WCE 1
MF 0
RCD 0
DRRP 0
WRP 0
DPTL 0
MIPF 0
MAPF 0
MAPFC 0
FSW 0
LBCSS 0
DRA 0
NV_DIS 0
NCS 0
CSS 0
Dateien finden die Älter als xxx sind und löschen
0Vorabtest welche Dateien betroffen sind:
find /pfad -mtime +30 -exec ls -l {} \;
Dateien löschen die Älter als 30 Tage sind:
find /pfad -mtime +30 -exec rm {} \;
Export einer Liste installierter deb Pakete
0Um eine Liste mit Paketen auszugeben einfach
dpkg -l
ausführen.
Wenn man die Liste der installierten Pakete für eine Neuinstallation auf einem anderen System verwenden will funktioniert folgendes Kommando.
Nur Anzeigen
dpkg -l | awk '{print $2}' | sed ':a;N;$!ba;s/\n/ /g'
Direkt in eine Datei schrieben
dpkg -l | awk '{print $2}' | sed ':a;N;$!ba;s/\n/ /g' > /tmp/installed_debs
Achtung: Es sollten die gleichen Paketquellen verfügbar sein! /etc/apt/sources.list mitkopieren.
HTTPS erzwingen mit Apache 2
0Einfach eine .htaccess Datei im Ordner mit folgendem Inhalt anlegen: (mod_rewrite muss installiert sein!)
# HTTPS-Verschluesselung erzwingen
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
# fuer alle Dateien
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI}
UUID der HDDs anzeigen
0Mit
sudo blkid
können alle UUIDs im System angezeigt werden.
root@server:~# blkid /dev/sda1: TYPE="swap" UUID="5798db50-d232-4877-835a-xxxxxxxxxxxxxx" /dev/sda2: UUID="f655640c-a973-46b9-8038-86a711cxxxxx" TYPE="ext3" /dev/sdb1: UUID="afc712ab-333d-4a11-ad48-703a94xxxxxx" TYPE="ext3" /dev/sdc1: UUID="81161f94-0bdb-4220-a104-c25fasxxxxxx" TYPE="ext3" /dev/sdd1: UUID="19959052-c0f5-47e6-9b5e-dd2c1fxxxxxx" TYPE="ext3" /dev/sde1: UUID="5083e4ce-ef64-40b3-bc01-daf65bxxxxxx" TYPE="reiserfs"
.iso mount mit Gnome
0Folgende Scripts müssen in den Ordner ~/.gnome2/nautilus-scripts
iso-mount.sh:
#!/bin/bash # mount gksudo -k /bin/echo "got r00t?" BASENAME=`basename $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS .iso` sudo mkdir "/media/$BASENAME" zenity --info --title "ISO Mounter" --text "$BASENAME e $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" if sudo mount -o loop -t iso9660 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS "/media/$BASENAME" then if zenity --question --title "ISO Mounter" --text "$BASENAME Successfully Mounted. Open Volume?" then nautilus /media/"$BASENAME" --no-desktop fi exit 0 else sudo rmdir "/media/$BASENAME" zenity --error --title "ISO Mounter" --text "Cannot mount $BASENAME!" exit 1 fi
iso-unmount.sh:
#!/bin/bash # unmount gksudo -k /bin/echo "got r00t?" BASENAME=`basename $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS .iso` sudo umount "/media/$BASENAME" sudo rmdir "/media/$BASENAME" zenity --info --text "Successfully unmounted /media/$BASENAME" exit 0
Beide Files müssen ausführbar sein. (chmod 700 iso-*.sh)
Jetzt lassen sich .iso Files in Gnome folgendermaßen starten.
File auswählen → Rechtsklick → „Skripte >“ auswählen → iso-mount.sh anklicken.
Gleiche Prozedur mit iso-unmount.sh für das Unmounten.
ISO Images werden unter /media/„Name der Datei“ eingebunden.