debian-sys-maint Zugangsdaten verwenden für MySQL Login in der Bash

Für Wartungszwecke gibt es einen User „debian-sys-maint“ der auf jedem Debian verwandten System automatisch angelegt wird. Die Zugangsdaten sind unter /etc/mysql/debain.cnf zu finden. Der User hat die gleichen Rechte wie der DB root User.

Da die Zugangsdaten eh schon auf dem System sind kann man sich ein kleines Helferlein bauen welches den User und das Passwort verwendet für einen MySQL Login auf der CLI.

Dazu folgendes Script anlegen z.B. /usr/local/sbin/my

#!/bin/bash

mysql -u`grep user /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'` -p`grep password /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'`

Danach noch einen „chmod 500 /usr/local/sbin/my“ und wir können es testen:

max@cmkdevel:~$ sudo my
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6264
Server version: 5.7.18-0ubuntu0.16.04.1-log (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Viel Spaß 😉

 

Unattended Installation von APT Paketen (Debian/Ubuntu)

Um Pakete ohne manuelle Eingaben zu Installieren müssen die Antworten für die Assistenten bereits vorliegen.

Als Beispiel eine unattended Installation von Postfix auf einem Ubuntu 16.04 LTS System.

Um die möglichen Parameter zu erfahren verwendet man das „debconf-show“ Tool, Postfix muss auf dem Testsystem bereits installiert sein.

max@cmkdevel:/opt$ sudo debconf-show postfix
  postfix/procmail: false
  postfix/chattr: false
  postfix/recipient_delim: +
  postfix/sqlite_warning:
  postfix/dynamicmaps_conversion_warning:
  postfix/mydomain_warning:
  postfix/relayhost:
  postfix/compat_conversion_warning: true
  postfix/not_configured:
  postfix/rfc1035_violation: false
  postfix/root_address:
  postfix/protocols: all
  postfix/destinations: $myhostname, cmkdevel.m.local, localhost.m.local, , localhost
  postfix/kernel_version_warning:
  postfix/relay_restrictions_warning:
  postfix/mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  postfix/mailbox_limit: 0
  postfix/tlsmgr_upgrade_warning:
* postfix/mailname: cmkdevel.m.local
* postfix/main_mailer_type: Internet Site
  postfix/bad_recipient_delimiter:
  postfix/main_cf_conversion_warning: true
  postfix/retry_upgrade_warning:

Um für ein neues System jetzt die Antworten dem Assistenten zu übergeben verwendet man das Tool „debconf-set-selections“. Der Kommandostapel setzt alle Optionen und Installiert automatisch Postfix.

debconf-set-selections <<< "postfix postfix/main_cf_conversion_warning string true"
debconf-set-selections <<< "postfix postfix/destinations string \$myhostname, $(hostname), localhost"
debconf-set-selections <<< "postfix postfix/root_address string max@m.local"
debconf-set-selections <<< "postfix postfix/bad_recipient_delimiter string ''"
debconf-set-selections <<< "postfix postfix/mynetworks string 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"
debconf-set-selections <<< "postfix postfix/recipient_delim string +"
debconf-set-selections <<< "postfix postfix/protocols string all"
debconf-set-selections <<< "postfix postfix/relayhost string mail.example.org"
debconf-set-selections <<< "postfix postfix/mailname string $(hostname)"
debconf-set-selections <<< "postfix postfix/mailbox_limit string 0"
debconf-set-selections <<< "postfix postfix/chattr string false"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Satellite system'"
apt-get install -y postfix

Viel Spaß 😉

TMUX die Screen Alternative

TMUX ist eine nette Alternative zu Screen, es unterstützt per Default das Teilen eines Fensters horizontal oder/und vertikal.

Installation von TMUX

#Für Ubuntu / Debian:
apt install tmux

#Für Fedora / RedHat / CentOS:
yum install tmux

Tastenkürzel (Hotkeys)

HotkeyBedeutung
CTRL-B ?Anzeiger aller Hotkeys
CTRL-B D(detatch) Trennen der aktuellen Sitzung
CTRL-B S(switch) Wechseln zwischen verschiedenen Sitzungen
CTRL-B C(create) Neues Fenster
CTRL-B &Beenden des Fensters
CTRL-B ,Umbennennen des Fensters
CTRL-B "Fenster horizonal Teilen
CTRL-B %Fenster vertikal Teilen
CTRL-B PfeiltastenWechseln zwischen den Panes (Fensterscheiben)
CTRL-B WListe aller Fenster anzeigen
CTRL-B [SPACE]Pane Größe ändern
CTRL-B L(last) Wechseln zum letzen Fenster, ist mit einem Minus markiert
CTRL-B Pvorheriges Fenster
CTRL-B Nnächstes Fenster
CTRL-B 1...Wechsel zu Fenster Nr.
CTRL-B !Pane Lösen und neues Fenster

per SSH direkt in tmux Sitzung starten

Praktisches Feature wenn man seine Sitzung nicht verlieren möchte bei einem Verbindungsabriss. Dazu muss die .bashrc des Users angepasst werden.

Einfach am Ende folgendes einfügen:

if [[ -z "$TMUX" ]] && [ "$SSH_CONNECTION" != "" ]; then
    tmux attach-session -t ssh_tmux || tmux new-session -s ssh_tmux
fi

tmux Scripting

Man kann auch ganz Easy sich eigene Umgebungen scripten.

Hier ein angepasstes Beispiel von ubuntuusers.de (https://wiki.ubuntuusers.de/tmux/):

#!/bin/bash
SESSION=main
tmux="tmux -2"

# if the session is already running, just attach to it.
$tmux has-session -t $SESSION
if [ $? -eq 0 ]; then
       echo "Session $SESSION already exists. Attaching."
       sleep 1
       $tmux attach -t $SESSION
       exit 0;
fi
                                 
# create a new session, named $SESSION, and detach from it
$tmux new-session -d -s $SESSION
$tmux new-window    -t $SESSION:0 
$tmux rename-window    -t $SESSION:0 "Default SHELL"
$tmux split-window  -h -t $SESSION:0
$tmux new-window    -t $SESSION:1 "tail -f /var/log/syslog"
$tmux rename-window    -t $SESSION:1 "SYSLOG"
$tmux new-window    -t $SESSION:2 "top"
$tmux rename-window    -t $SESSION:2 "TOP"
$tmux new-window    -t $SESSION:3 "tail -f /var/log/mail.log"
$tmux rename-window    -t $SESSION:3 "MAILLOG"
$tmux split-window  -h -t $SESSION:3
$tmux new-window    -t $SESSION:4 "tail -f /omd/sites/dev1/var/log/cmc.log"
$tmux rename-window    -t $SESSION:4 "CMCLOG"
$tmux select-window -t $SESSION:0
$tmux attach -t $SESSION

 

 

Python: Oracle DB Modul für Python für CentOS6

Quelle: https://gist.github.com/hangtwenty/5547377

#!/bin/bash

# INSTALL ORACLE INSTANT CLIENT #
#################################

# NOTE: Oracle requires at least 1176 MB of swap (or something around there).
# If you are using CentOS in a VMWare VM, there's a good chance that you don't have enough by default.
# If this describes you and you need to add more swap, see the
# "Adding a Swap File to a CentOS System" section, here:
# http://www.techotopia.com/index.php/Adding_and_Managing_CentOS_Swap_Space

# Install basic dependencies
sudo yum -y install libaio bc flex

echo "Now go get some the following two RPMs ..."
echo "- basic: oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm"
echo "- SDK/devel: oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm"
echo "... from this URL: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html"
echo "WARNING: It's pretty annoying, they make you sign up for an Oracle account, etc."
echo 'I will assume you have put these two files are into ~/Downloads'
echo "Press any key once you're ready" && read -n 1 -s

sudo rpm -ivh ~/Downloads/oracle-instantclient11.2-basic-*
sudo rpm -ivh ~/Downloads/oracle-instantclient11.2-devel-*

# SET ENVIRONMENT VARIABLES #
#############################

# Source for this section: http://cx-oracle.sourceforge.net/BUILD.txt

# (SIDENOTE: I had to alter it by doing some digging around for where the Oracle RPMs really installed to;
# if you ever need to do this, do a command like this:
#     rpm -qlp <rpm_file_of_concern.rpm>)

echo '# Convoluted undocumented Oracle bullshit.' >> $HOME/.bashrc
echo 'export ORACLE_VERSION="11.2"' >> $HOME/.bashrc
echo 'export ORACLE_HOME="/usr/lib/oracle/$ORACLE_VERSION/client64/"' >> $HOME/.bashrc
echo 'export PATH=$PATH:"$ORACLE_HOME/bin"' >> $HOME/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$ORACLE_HOME/lib"' >> $HOME/.bashrc
. $HOME/.bashrc

# INSTALL cx_Oracle #
#####################

pip install cx_Oracle

Gute Anleitung zur Verwendung von cs_Oracle: http://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html

Beispiel:

import cx_Oracle

# db helper named arrays
def rows_to_dict_list(cursor):
    columns = [i[0] for i in cursor.description]
    return [dict(zip(columns, row)) for row in cursor]

# Connect to DB
dsn_tns = cx_Oracle.makedsn("10.10.10.1",1521,"TESTDB")
db = cx_Oracle.connect("testuser","password",dsn_tns)
cursor = db.cursor()

# Get data from DB
cursor.execute("SELECT * FROM test_tab")
result = rows_to_dict_list(cursor)

# Insert to DB
cursor.execute('INSERT INTO test_tab (row1, row2, row2) VALUES ("xxx", "yyy", "zzz")')
db.commit()

# close db
db.close()

 

Ubuntu/Debian: Eigene Rootzertifikate importieren und vertrauen

Um 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

Ein 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

Ich 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

Wer 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

Mit sdparm lassen sich alle Festplattenparameter auslesen.

 
apt-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

Export einer Liste installierter deb Pakete

Howto für Ubuntu und Debian

Um 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.

UUID der HDDs anzeigen

Mit

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"

http://wiki.ubuntuusers.de/fstab?highlight=fstab

.iso mount mit Gnome

Folgende 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.

Pos1 und Ende auch mit PuTTY

Für Windows verwende ich PuTTY um auf meine Linuxmaschinen zu kommen. Bei manchen Rechnern funktionierte die Pos1 und Ende Taste nicht. Ich suchte erst die Schuld am Linuxsystem das der die Tastencodes nicht kennt, herausgestellt hat sich allerdings das PuTTY damit ein Problem hat.

Das Problem kann man lösen indem man bei der Verbindung unter Connection → Data den Wert Terminal-type string von xterm auf xterm-color ändert.

Rootserver Firewall mit iptables

Einfache Firewall für Rootserver mit iptables Für alle Linux Destributionen

#!/bin/sh -e

#ROOTSERVER IP
ROOTSERVER="10.23.45.10"

#Chains flushen und Chains löschen
 iptables -F
 iptables -X
 
 # Erstmal alles in die Tonne
 iptables -P INPUT DROP
 iptables -P OUTPUT DROP
 iptables -P FORWARD DROP
 
 # Drop to Log
 iptables -N block_in
 iptables -A block_in -j LOG --log-prefix "FW DROP IN: " --log-level info
 iptables -A block_in -j DROP
 iptables -N block_out
 iptables -A block_out -j LOG --log-prefix "FW DROP OUT: " --log-level info
 iptables -A block_out -j DROP
 
 # Incoming Traffic (normal)
 iptables -N allow_in
 # Outgoing Traffic (normal)
 iptables -N allow_out
 
 # Incoming Traffic (special)
 iptables -N special_in
 # Outgoing Traffic (special)
 iptables -N special_out
 
 # Loopback
 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT
 
 # DHCP Client weil Rootie IP von DHCP bekommt
 iptables -A INPUT -i eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
 iptables -A OUTPUT -o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
 
 #################################################################
 ### Incoming Traffic
 #################################################################
 #ICMP Allow
 iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type echo-request -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type echo-reply -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type destination-unreachable -j ACCEPT
 
 #Apache / Pound(SSL)
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 80 -j ACCEPT
 #SSL
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 443 -j ACCEPT
 
 #Exim SMTP (SSL) / Courier POP3/IMAP (SSL)
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 25 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 110 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 143 -j ACCEPT
 # SSL
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 993 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 995 -j ACCEPT
 
 #PowerDNS
 iptables -A allow_in -d $ROOTSERVER -p udp --dport 53 -j ACCEPT
 
 
 #Serververkehr der reingeht
 iptables -A allow_in -d $ROOTSERVER -p udp --sport 53 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 25 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 80 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 443 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 22 -j ACCEPT
 
 
 #################################################################
 #################################################################
 
 
 #################################################################
### Outgoing Traffic
#################################################################
 
 # ICMP Allow
 iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type echo-reply -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type echo-request -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type destination-unreachable -j ACCEPT
 
 
 # Apache / Pound
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 80 -j ACCEPT
 # SSL (nicht sicher)
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 443 -j ACCEPT
 
 #Exim SMTP (SSL) / Courier POP3/IMAP (SSL)
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 25 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 110 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 143 -j ACCEPT
 #SSL
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 993 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 995 -j ACCEPT
 
 #PowerDNS
 iptables -A allow_out -s $ROOTSERVER -p udp --sport 53 -j ACCEPT
 
 
 #Serververkehr der rausgeht
 iptables -A allow_out -s $ROOTSERVER -p udp --dport 53 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 25 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 80 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 443 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 22 -j ACCEPT
  #################################################################

#################################################################
### Rules
#################################################################
 ## Incoming Traffic
 iptables -A INPUT -j allow_in
 iptables -A INPUT -j special_in
 iptables -A INPUT -j block_in
 
 ## Outgoing Traffic
 iptables -A OUTPUT -j allow_out
 iptables -A OUTPUT -j special_out
 iptables -A OUTPUT -j block_out


Probleme mit ClamAV unter Debian Etch

Kürzlich hatte ich totale Probleme mit ClamAV. Das Laden der Virendefinitionen hat teilweise mehrere Stunden gedauert und hatte 100% CPU Last. Da ich nichts an der Konfig geändert hatte bin ich fast verzweifelt weil ich den Fehler nicht finden konnte. Die Version 0.90.1 aus Debian Etch scheint fehlerhaft zu sein. Da er nach jedem Update die Datenbank anscheinend neu laden muss blockiert ClamAV den kompletten Mailversand.

Logauszug:

Mar 23 08:39:28 wiggum clamsmtpd: 1010C4: CLAMAV: couldn't connect to: /var/run/clamav/clamd.ctl: No such file or directory
Mar 23 08:39:28 wiggum clamsmtpd: 1010C4: from=root@m.corp, to=root@m.corp
Mar 23 08:39:28 wiggum clamsmtpd: 1010C6: CLAMAV: couldn't connect to: /var/run/clamav/clamd.ctl: No such file or directory

Der Fehler trat bei mir auf drei unterschiedlichen Maschinen auf und ist rekonstruierbar.

Lösung

Lösung des Problems war die Installation einer neueren ClamAV Version aus den Volatile Paketen von Debian Etch.

Folgende Zeile habe ich zu /etc/apt/sources.list hinzugefügt:

deb http://volatile.debian.org/debian-volatile etch/volatile main

Dann APT updaten …

apt-get update

und die neuen ClamAV Pakete installieren

apt-get install clamav-daemon clamav clamav-freshclam clamav-base

Jetzt sollten die Volatile Pakete installiert werden.

clamscan -V

ClamAV Version sollte dann 0.92.1 sein.

Jetzt funktioniert alles wie früher 🙂

Multitail – mehre Logs live betrachten und in Farbe

Multitail ist eine Erweiterung des tail Befehls und ermöglicht mehrere Logs live gleichzeitig zu betrachten. Außerdem unterstützt multitail Syntaxhighlighting.

Bildquelle: http://www.vanheusden.com/multitail/screenshots.html

Installation

apt-get install multitail

Die Configfiles

/etc/multitail.conf : Ihr sind die Farbschemas gespeichert und allgemeine Parameter
.multitailrc : Diese Datei kann man in seinem Homepfad anlegen und eigene Defaults festlegen

Beispiel:

defaultcscheme:postfix

Mit dieser Zeile lege ich fest, das als Default Farbschema postfix ausgewählt wird.

E-Mail check abschalten

Beim Starten von multitail tritt folgender Fehler auf:

sysadmin@pc0815:~$ multitail /var/log/mail.log
Could not determine size of file '/var/mail/sysadmin' (which is supposed to be your mailfile): mail-check is disabled.
You can prevent this message by adding the line 'check_mail:0' in /etc/multitail.conf or in .multitailrc in your home-directory.

Press enter to continue...

Um diese Warnung abzuschalten folgende Zeile entweder in die /etc/multitail.conf oder in die eigene .multitailrc einfügen.

check_mail:0

Farbschema über Commandoline bestimmen

multitail -cS <farbschema>

Folgende Farbschemas sind verfügbar:

Farbschemaname Beschreibung
syslog kernel and unsorted messages
ssh for openssh logs
liniptfw Linux IPtables (2.6.x kernel)
postfix for MTA postfix logs
apache default Apache logging (webserver)
apache_error default Apache error logging
rsstail RSSTail output (RSS feed reader)
acctail (BSD-) process accounting reader
wtmptail www.vanheusden.com/wtmptail/
squid http proxy server
asterisk software PBX
sendmail MTA sendmail
mailscanner wrapper around sendmail/clamav/spamassassin
spamassassin wrapper for spamassassin
clamav clamav virus scanner
samba samba – smb for linux
audit for audit log
exim MTA exim log
httping ping for HTTP
netstat see www.vanheusden.com/multitail/examples.html
tcpdump for tcpdump logs
dhcpd DHCP server logs
bind Bind DNS server logs
smartd smartd logs
kerberos kerberos logs
oracle oracle logs
ntpd ntpd logs
nagtail www.nagios.org status viewer
websphere WebSphere error-log
nntpcache nntpcache logs
vnetbr Veritas Netbackup backup/restore logs
procmail procmail mailprocessor logs
checkpoint Checkpoint Firewall-1 logs
pppd PPP daemon logs
inn inn logs
netscapeldap Netscape Directory server (LDAP)
vmstat vmstat is part of sysstat
log4j log4j logs
lambdamoo MUD/MOO server http://www.moo.mud.org/

Farbschema über multitail.conf festlegen

Folgende Defaults sind bereits vorhanden:

scheme:postfix:/var/log/mail/
scheme:sendmail:/var/log/mail/
scheme:exim:/var/log/mail/
scheme:apache:/var/log/apache/.*access
scheme:apache_error:/var/log/apache/.*error
scheme:asterisk:/var/log/asterisk/messages
scheme:samba:/var/log/samba/
scheme:squid:/var/log/squid/
scheme:syslog,ssh:/var/log/
scheme:vnetbr:bplog.rest
scheme:procmail:procmail.log
scheme:inn:/var/log/news/

Um jetzt für ein Logfile ein Schema festzulegen einfach eine Zeile anfügen. z.B.

scheme:postfix:/var/log/mail.log

Jetzt kann man multitail /var/log/mail.log starten ohne den -cS Parameter anzugeben und ohne ein Default Schema in der .multitailrc festgelegt zu haben.

Mehrere Logs gleichzeitig

Um mehrere Logs gleichzeitig zu betrachten gehen Sie folgendermaßen vor:

Jedes Logfile mit -i dem multitail übergeben (in einer Zeile!) z.B.

multitail -i /var/log/mail.log -i /var/log/kern.log -i /var/log/apache2/access_log

Der Monitor wird dann anhand der Anzahl der Logs geteilt.