Linux 2

Aus wiki@ANOnet
Wechseln zu: Navigation, Suche

ergänzend zu Linux 1

Inhaltsverzeichnis

LPI-102

Einiges zum Thema LPI-102


Inhalte:

  1. shell-Umgebung
  2. schreiben und anpassen von einfachen Scripts
  3. SQL Data-Management
  4. x11
  5. Systemanpassungen
  6. Administrative Tasks
    1. Usermanagement
  7. Automatisierungen (cron/at)
  8. Lokalisierung
  9. NTP
  10. Logging
  11. MTA
  12. Printing
  13. Netzwerkgrundeinstellungen
    1. Troubleshooting
  14. Security
    1. Hostsecurity
    2. Verschlüsselung

shell

(249)

Interpretation

Unterschied ' " "" wertet $, \, `, ! aus,


nicht


Ausgabekanäle:

0 - StdIN
1 - StdOUT
2 - StdERROR

Redirection:

| Standardout wird als Standardin beim hinteren Kommando verwendet
> ersetzen
< 
>> anhängen

<< "inhere" liest von StdIN, bis eine gewisse Zeichenfolge kommt
cat << aus
> 2345
> 2345
> 2345
> sef
> aus
2345
2345
2345
sef
[student@station19 ~]$ 
2>&1 Umleiten von StdERROR nach StdOUT
echo "ERROR" >&2
& am Ende eines Kommandos sendet einen Job in den Hintergrund
; trennt Kommandos, führt die Kommandos unabhängig voneinander aus
cmd1 && cmd2 || cmd3 wenn cmd1 erfolgreich DANN cmd2 und ignoriere cmd3, wenn cmd1 NICHT erfolgreich, dann ignoriere cmd2 und führe cmd3 aus


# leitet einen Kommentar ein, welcher nicht ausgewertet wird
() lässt die befehle in der Klammer in einem sub-Prozess laufen, was bedeutet, dass Ereignisse, die durch die Befehlskette in der Klammer ausgelöst werden, letztendlich auf die Shell keinerlei einfluss haben. So ist zb das Wechseln von Verzeichnissen ohne Folge
{} fügt Befehle zusammen, allerdings nicht in einem eigenen Prozess

Abarbeitung

  1. Wordlist
  2. Alias
  3. Variables
  4. Command-Substitution
  5. FNG
  6. Wordlist
  7. Redirection
  8. Execute Command


ls -l "my file" *.pdf `cat file.txt` $home > file.txt

ein Kommando, mit 5 Optionen:

ls --color=tty -l "my file"....
ls --color=tty -l "my file" *.pdf `cat file.txt` /home/sepp
ls --color=tty -l "my file" *.pdf x.txt y.txt /home/sepp
ls --color=tty -l "my file" a.pdf b.pdf c.pdf x.txt y.txt /home/sepp
ls --color=tty -l my file a.pdf b.pdf c.pdf x.txt y.txt /home/sepp

mittlerweiel sind es 8 Optionen nun würde die Redirection abgearbeitet, uind das file.txt befüllt

Einsatz von Variablen

VAR1=Inhalt

in der cshell würde dies mit

set VAR1=Inhalt

passieren

set

zeigt alle gesetzten Variablen an

EDITOR=gedit

würde den standard-Editor dieser Shell auf gedit setzen

export EDITOR 

würde nun die Variable auch für andere Prozesse zur Verfügung stellen. Diese Variable gilt dann allerdings nur für Unterprozesse der Shell, in der die Variable exportiert wurden


Arten von Variablen

  • selbst definierte Variablen
  • Systemvariablen wie $USER
  • built-in-Variablen wie echo $$, echo $!, aber auch Argumentlisten (set a b c, echo $2 würde "b" bringen) (set `date`; echo $3 würde den Tag aus dem date liefern)

Setzen von Variablen

1 /etc/profile  ---> (sh, ksh, bash)
2 /etc/profile.d/*.sh  ---> (sh, ksh, bash)
5 /etc/bashrc (/etc/bash.bashrc)  ---> (bash)
3 ~/.profile  ---> (sh, ksh)
 ~/.bash_profile  ---> (bash)
4+6 ~/.bashrc  ---> (bash)
~/.kshrc  ---> (ksh)


Weiters wird unterschieden zwischen einer Loginshell und einer nonlogin-Shell Mit

shopt

wird angezeigt, ob es sich um eine Login- oder um eine nonlogion-Shell verwendet wird. So wird zb

su -

eine Loginshell aktivieren

Eine Loginshell führt alle relevanten Scripts duurch, eine nonlogin-Shell nur die rc-Dateien ( /etc/bashrc (/etc/bash.bashrc), ~/.bashrc, ~/.kshrc

Die Dateien in /etc/ darf nur root bearbeiten, die in den Homeverzeichnissen können (auch) vom User angepasst werden

echo ${VAR1}

würde zulassen, dem Variableninhalt eine "Erweiterung" zufügen

INTERFACE=eth
echo $INTERFACE
eth
echo ${INTERFACE}1
eth1


Variablen vergleichen:

if [ "$WERT" = "abc" ];then echo Wert OK;else echo Falscher Wert;fi


profile

hier kommen Variablen hinein, die für weitere Prozesse exportiert werden müssen, sie wird nur beim ersten Login gestartet. Dadurch ist sie auch für Terminaleinstellungen interessant

bashrc

passiert bei jedem aufruf einer Shell, hier werden auch lokale Variablen defineirt, auch die ALIASES sollten hier definiert werden


ulimit

Hiermit können für die shell Limits gesetzt werden. Die Prioritäten für gestartete Prozelle können gesetzt werden, Speicherkonfigurationen vorgenommen, CPU-Time u.a. vergeben werden

ulimit -u 10

würde den User dahingehend beschränken, dass er nur 10 Prozesse starten könnte


in

/etc/security/limits.conf

können für User soft- bzw hardlimits gesetzt werden, diese dann für alle shells, zusammengerechnet werden. Sollte für "hardening" auf 100 prozesse pro User reichen (ohne GUI). Weiters sollte die Speicherverwaltung genutzt werden

Einfaches Scripting

read

würde eine Eingabe übernehmen

echo

dieses Anzeigen

Eingaben in der gleichen Zeile erwarten wäre so möglich:

echo -n "geben Sie den Wert ein"

Weiters sollte ein Script wie folgt beginnen:

#!/bin/bash

Durch diesen Eintrag wird dieses Script mit der bash gestartet. Auch andere Shells könnten hier angegeben werden

Durch den

. ./my.sh

wird allerdings die erste Zeile ignoriert, ebenso in

bash my.sh

interessant für debugging

bash -v my.sh

Als Kommentare in den folgenden Zeilen wären Name, Autor, Versionsnummer u.ä. interessant, ebenso eine kleine Beschreibung


#!/bin/bash
# Name: my.sh
# Author 

echo -n "Bitte geben Sie einen Wert ein: "
read WERT
if [ $WERT ]
then
   echo "Sie haben $WERT eingegeben"
else
   echo "ERROR: Kein Wert" >&2
   exit 5
fi
echo "Aktuelle PID: $$"

mit

chmod +x my.sh 

wird das Script ausführbar gemacht.

Auswerten von Argumenten

echo "0. Argument: $0"
echo "1. Argument: $1"
echo "2. Argument: $2"
echo "3. Argument: $3"
echo "4. Argument: $4"
echo "10. Argument: ${10}"
echo "11. Argument: ${11}"
echo "Anzahl der Argumente: $#"
echo "Alle Argumente: $*"
echo "Alle Argumente: $@"

ab $10 muss die Zahl in {} gesetzt werden $@ wpürde alle Argumente als ein Wort liefern, $* als einzelne Wörter

echo "0. Argument: $0"
echo "1. Argument: $1"
echo "2. Argument: $2"
echo "3. Argument: $3"
echo "4. Argument: $4"
echo "10. Argument: ${10}"
echo "11. Argument: ${11}"
echo "Anzahl der Argumente: $#"
echo "Alle Argumente: $*"
echo "Alle Argumente: $@"

shift

echo "0. Argument: $0"
echo "1. Argument: $1"
echo "2. Argument: $2"
echo "3. Argument: $3"
echo "4. Argument: $4"
echo "10. Argument: ${10}"
echo "11. Argument: ${11}"
echo "Anzahl der Argumente: $#"
echo "Alle Argumente: $*"
echo "Alle Argumente: $@"

Würde nun die gleiche Anzahl der Werte ausgeben, allerdings das erste würde verworfen werden.

if [ $# -eq 1 ];then
  WERT=$1
elif [ $# -gt 1 ];then
 echo "ERROR: Zu viele Argumente" >&2
 echo "usage: my.sh <WERT>" >&2
 exit 4
else


echo -n "Bitte geben Sie einen Wert ein: "
 read WERT
 if [ $WERT ]
 then
   echo "Sie haben $WERT eingegeben"
 else
   echo "ERROR: Kein Wert" >&2
   exit 5
 fi
fi
echo "Sie haben $WERT eingegeben"
echo "Aktuelle PID: $$"


Hier würde an hand der IF-Schleife abgefragt werden, ob ein Wert eingegeben wurde

[student] [/home/student] $> xeyes &
[1] 17581
[student] [/home/student] $> echo $! > /tmp/xeyes.$$.pid
[student] [/home/student] $> cat /tmp/xeyes.$$.pid 
kill `cat /tmp/xeyes.$$.pid`

würde nun ein vorher gestartetes xeyes als "name" in /tmp ablegen. Der Sinn hierfür ist u.a. das gezielte killen des Prozesses

while cmd1; do cmd2, cmd3, cmd4, done
while w | grep root > /dev/null; do echo 'root is here'; sleep 1; done

würde so im Sekundentakt melden, dass root angemeldet ist!

until w | grep root > /dev/null; do echo 'root is not here'; sleep 1; done

wäre das gegenstück

for Y in a b c; do echo in Variable Y steht $Y; echo $X. Runde; ((X++));done


case

damit könnten Variablen abgefragt werden

case $A in; a) echo a gefunden;; b) echo b gefunden;; *) echo anderes ;; esac


HELP=false
VERB=false
SECURE=false
while [ $# -gt 0 ]; do
case $1 in
       -h*|-H*) HELP=true;;
# | wäre ein oder
       -v) VERB=true;;
       -s) SECURE=true;;
       *)
# * würde auch hier als Wildcard stehen 
 echo "ERROR, Falsche Option" >&2
 echo "Usage (-s|-h|-v)i" >&2
  exit 5;;
esac
shift
done
echo HELP:$HELP
echo VERB:$VERB
echo SECURE:$SECURE

Einfaches Script, um Scripte zu erstellen

#Author ANOther
#Name newscript.sh
date > datum
DATUM=`cat datum`



if [ $# -eq 1 ];then
SCRIPTNAME=$1
elif [ $# -eq 0 ];then
echo -n "Bitte geben Sie einen Scriptnamen an: "
read EINGEGEBEN
   if [ $EINGEGEBEN ];then
    SCRIPTNAME=$EINGEGEBEN
    else 
    echo "Ein Wort, bitte"
    exit 2
    fi

else
  echo "Ein Wort, bitte"
  exit 3
fi

if [ -f $SCRIPTNAME -a -w $SCRIPTNAME ];then
  vi $SCRIPTNAME



elif [ -e $SCRIPTNAME ];then
 echo "ERROR4, RECHTEPROBLEM!!"
 exit 4

else
SCRIPTNAME=$SCRIPTNAME.sh
if [ -e $SCRIPTNAME ];then
 echo "ERROR4, RECHTEPROBLEM!!"
 exit 5
fi







cat << EOF > $SCRIPTNAME
#!/bin/bash
#Author ANOther
#Name $SCRIPTNAME
#Date $DATUM

EOF
chmod +x $SCRIPTNAME
fi
vi $SCRIPTNAME

rechnen

X=(expr $X \* 5)
((x=2+3))
((x=$x+2))

debug

bash -xv my.sh

-xv und +xv kann ebenso IN ein Script eingebaut werden, um nur Teile zu untersuchen

X-window

Da die Grafik am Client angezeuigt werden soll, die Netzwerkkarte u.a. sich ebenso dort befindet, muss an der Clientseite der X-Server, an der Serverseite der X-Client konfiguriert werden. Die Verbindung passiert über 6000/TCP Am XServer wird gestartet

xhost +[IP]

am X-Client

xeyes -display [IP]:0.0
0 wäre die Serverinstanz
Die folgende Null wäre die optionale Angabe des Screens, hier kann der Ausgabemonitor mitgegeben werden

Damit nicht immer die Displayvariable mitgegeben werden muss, kann auch eine Displayvariable gesetzt werden:

export DISPLAY=[IP]:0
[GUI-Kommando] -display [IP]:0

würde in >90% der GUI-Kommandos ebensoo zum Erfolg führen

Aus Sicherheitsgründen ist dies abgedreht

unter

/usr/share/gdm/defaults.conf 

finden sich zwei Werte:

DisallowTCP

Dieser Parameter äre mit "false" aktiv zu setzen

[xdmcp]
Enable=true

lässt in Folge zu, den kompletten Login-Prozess übers Netz erfolgen. (Diese Datei sollte NICHT bearbeitet werden --->hinweise enthalten!!)

Nun lauscht der X-Server, zu prüfen mit netstat

Heute wird dafür

ssh -X verwendet


in der ssh_config kann das X11-forwarding aufgedreht werden, damit erspart man sich das ssh -X

/etc/x11/xorg.conf

Hier finden sich die Sektionen Grafikkartentreiber, Monitor, Files uvm

/etc/xhost

hier werden die Freigaben für x verwaltet:

DISPLAY=[IP]:0

Security

Verschlüsselung

VPN

(Dies wird ebenso bei HTTPS, SMTPS u.ä. verwendet)

Drei Eckpunkte einer VPN-Verbindung wären

  1. Authentifizierung
  2. Integritätsprüfung
  3. Verschlüsselung

zu 3) es gibt 2 Arten der Verschlüsselungen

  1. symmetrisch: (schneller auf kosten der Sicherheit). Sie wird für die Verschlüsselung der Daten verwendet
  2. asymmetrisch(sicherer): Für den Austausch der Schküssel und die Authentifizierung.


GPG

ist ein asym. Verschlüsselungsverfahren, es besteht also aus einem Schlüsselpaar, dem Private- und dem Publickey. Der Private Schlüssel wird zusätzlich mit einem Passwort abgesichert (dies allerdings symmetrisch)

Ein öffentlicher Schlüssel kann nun auf einen Keyserver gelegt werden, damit wird für den Rest der Welt die Möglichkeit geschaffen, verschlüsselte Mails an den Key-Ersteller zu senden

gpg --sendkey [Keyserver]
gpg --export --output keyfile.txt

würde den Schlüssel in ein File exportieren


gpg --gen-key

erstellt den Schlüssel

gpg --list-leys

zeigt den Schlüssel an

gpd --armor --output [file] --export ["NAME"]

exportiert den pub-Key


gpg --encrypt --recipient [gegner] file.txt gpg --output file.txt --decrypt file.txt.gpg

ver- und entschlüsselt


SSL

Über asym. wird ein Schlüssel ausgetauscht, der für die sym. Verschlüsselung vorgenommen wird. Es wird ein "zusätzlicher Layer" eingebaut, der dann die Verschlüsselung des Datenbereiches vornimmt


HTTP mit ssl installieren:

yum -y install https
yum -y install mod_ssl
service httpd start

in /etc/httpd/httpd.conf läge die Konfiguration für diesen Dienst, u.a. ist auch die Anpassung


in /etc/pki lägen die Schlüssel für diesen Server. den privaten unter /private/localhost.key


Erstellen eines Keypaars: in

/etc/pki/tls/certs/

liegt ein Makefile, welches etwas abgeändert werden könnte, damit - für die Verwendung eines Daemons - das Passwort nicht abgefragt wird. Allerdings kann die Schlüsselgenerierung auch händisch durchgeführt werden:

[root@station19 ~]# cd  /etc/pki/tls/certs/
[root@station19 certs]# /usr/bin/openssl genrsa 1024 > ../private/httpd.key
chown apache ../private/httpd.key

nun ist der key erstellt und dem Apachen zugeteilt

ls -l ../private/httpd.key

würde nun den Key anzeigen

Request erzeugen:

/usr/bin/openssl req -new -key ../private/httpd.key -out httpd.csr

erstellt das File, welches an eine CA gesendet werden könnte auf www.cacert.org können Zertifikate gratis beantragt werden (allerdings noch nicht in den Browsern integriert!)

Selbst erstellen könnte man dieses Zertifikat ebenso...

/usr/bin/openssl req -x509 -days 365 -new -key ../private/httpd.key -out httpd.cet

Schlüssel und Konfig müssen noch in die ssl-conf des jeweiligen Dienstes eingefügt und der Dienst neu gestartet werden, danach ist XXXXs einsatzbereit

ssh

Auch hier ist das Bauen des Schlüsselpaares wichtig:

ssh-keygen -t dsa

Hier werden gleich der private und der public Key erstellt. Mit diesen Schlüsseln kann die Verbindung angestoßen werden, allerdings auch die authentifizierung

ssh-copy-id -i .ssh/id_dsa.pub root@entfernter_server

Hier wird der Schlüssel nach .ssh/autorized_keys kopiert Nun kann die Anmeldung ohne Passwort passieren, denn SSH die Authentifizierung verwendet ssh, scp und sftp


ssh root@station11 tar -czvf -/var >/var/tmp/sicherung_11

würde eine Remotesicherung auslösen, das File am lokalen Rechner abgelegt


scp [lokales File] [user]@[zielhost]:/tmp

bzw

scp [user]@[zielhost]:/tmp [lokales File]
rsync -e ssh -acH 

würde auf einen anderen Rechner syncronisieren


Die Konfiguration von sshd passiert in /etc/sshd.config

Hier sollte "PermitRootLogin" auf NO gesetzt werden Weiters sollte am Ende

AllowUsers [user] 

eingetragen werden, som,it werden nur die angelegten User eingelassen

Weiters kann hier auch mit den keys gearbeitet werden (PasswordAuthentication no)

ssh ohne login

ssh-keygen -t rsa
scp ssh/id_rsa.pub 8.7.6.5:.ssh/authorized_keys

ssh-Tunnel

ssh -L lokalport:zielserver:zielport -l user tunnelserver

ermöglicht den Zugriff via

https://localhost:lokalport/

~.bash_logout

rm ~/.bash_history

dieses Script wird beim Ausloggen durchgeführt

sudo

hier kann einem User das Recht zugestanden werden, Kommandos als root austzführen. Die Konfigdatei dazu wäre die

/etc/sudoers

Die sudoers wird mit

visodu 

bearbeitet. Sie wird beim schließen geprüft


Diese Datei muss IDR erst eingerichtet werden. sudo arbeitet mit dem SUID-Bit.

sudo /usr/sbin/useradd -m user

würde nun einem User erlauben, einen anderen anzulegen, ohne root zu sein, ohne das root-pwd zu kennen

In der sudoers sind "Commandaliases" eingerichtet, um Rechte zu gruppieren

karl ALL=USERDB 

wäre nun die möglichkeit, dem User karl das Recht der Gruppe USERDB zuzuteilen. ! [cmd] nach ALL würde ein Kommando gezielt ausschließen

ALL

bedeutet, dass der User nicht nur lokal, sondern auch bei remote-Zugriff die Berechtigung zur Ausführung der in der Gruppe definierten Befehle Hier könnten auch IP-Adressen u.ä. angegeben werden

=USERDB

wäre - wie schon erwähnt - die Gruppe.

Beim sudo wird das USER-Passwort gefragt, um sicherzustellen, dass es sich beim User um den User handelt, so können irrtümlich offengelassene Terminalsitzungen abgesichert werden. Um diesen Mechanismus abzustellen, kann am ende noch

NOPASSWD

angefügt werden

So kann ein User in der der Gruppe WHEEL zugefügt werden, diese Gruppe in der sudoers berechtigt werden und der root-Account inaktiv gesetzt werden



RemoteAccessControll

kann durchgeführt werden durch

  1. iptables (greift in ALLEN Fällen)
  2. PAM (plugable Auth-Module) (muss vom libary unterstützt werden)
  3. TCP-Wrapper (muss vom libary unterstützt werden, einfach zu konfigurieren)
  4. xinetd (wenn der Dienst xinetd verwendet)
  5. Configfile des Dienstes (wenn der Dienst dies unterstützt)

(idealerweise 1+5;))

TCP-Wrapper

Er ist kein Dienst, kein Service, sondern ein libary. Er wird über das libwrap.so eingebunden.

mittels

ldd /usr/sbin/sshd | grep wrap

kann dieses abgefragt werden, in diesem Falle sshd

Die Wrapper sind eine Art "Firewall", sie können als Zugriffskontrolle verwendet werden

Es verwenden u.a. folgende Daemons die Wrapper

  • sshd
  • alles sich im xinetd befindlichen Services
  • sendmail
  • slapd
  • vsftpd
  • gdm
  • mount
  • portmap


läuft mit nur zwei Konfigurationsdateien: Abweisungen finden sich in /var/log/secure


/etc/hosts.allow

sie wird zuerst abgearbeitet.

Schreibweise: DAEMON_LIST(Name des Daemons, für ssh zb sshd):CLIENT_LIST

in.telnet.d:192.168.0.0/255.255.255.0

würde telnet vom 192.168.0.0/24-Netz erlauben. Um die anderen Auszuschließen müsste allerdings die hosts.deny ebenso bearbeitet werden


Die Daemons können, durch "," getrennt, auch aufgefädelt werden. Änderungen sind sofort aktiv!

192.168.0.

würde ebenso das Netz ausschließen

In der Clientlist kann stehen:

  • Hostname
  • IP-Adresse
  • Netz
  • Netgroup (-> etc/netgroup)
  • Domain
  • ALL
  • LOCAL --> alle Hostnamen, die keinen "." im Namen haben (station12)
  • KNOWN --> wenn die IPAdresse auf einen Hostnamen aufgelöst werden kann
  • UNKNOWN --> kann die IP NICHT in einen Hostnamen auflösen
  • PARANOID --> löst die IP in einen Hostnamen auf, und beim retourauflösen kommt eine andere IP

/etc/hosts.deny

sshd:192.168.1.0/255.255.255.0 except 192.168.1.5

würde nun alle aus dem 1.0/24-Netz sperren, ausgenommen den 1.5

WHITELIST: In der host.deny ALL:ALL, in die hosts.allow ALL:127. und die Dienste einzeln freigeben


Hardening - Hostsecurity

  • Minimalinstallation
  • sshd installieren und absichern (sshd.conf)
  • Services überprüfen (xinietd)
  • unnötig Pakete deinstallieren
  • Installationsserver -> yum
  • Passwortrichtlinien (/etc/login.defs--> PASS_MIN_LEN=8, /etc/default/useradd bzw /etc/pam.d/system-auth für Passworthistory[0], Komplexität u.a. [1])
  • root-User deaktivieren [2] bzw user nach wheel und /etc/pamd.su editieren [3]
  • se-linux (lokale sec)
  • iptables (remote sec)
  • Zugangskontrolle (--> konfigfiles, pam, tcpwrapper, xinetd)
  • Logfiles --> Logserver, Dauer (logrotate)
  • etc/fstab-> mountoptionen (-ro, -noexec, -nodev, -nosiud, ...)
  • backup/restore planen [4]
  • cronjobs einrichten [5]
  • ~/lash.logout > rm ~/.bash_history
  • /etc/profile: TMOUT=300, HISTFILESIZE=100
  • chattr [6]
  • services nach chroot
  • /etc/security/limits.conf ->
    • noproc hard 100,
    • rss hard 1024000
  • Festplattenquotas
  • rpm --> /var/lib/rpm sperren
  • kein compiler
  • BIOS/Bootloader absichern (->/etc/grub --> password --md5)
  • inittab: ctrl-alt-del löschen, 1:2345:respawn:/sbin/mingetty tty1 --noclear
  • services: banner löschen
  • /etc/issue, /etc/issue.net



[0] pam_unix.so --> remember=25 hinzufügen, "nullok" entfernen

[1] pam-cracklib.so, hierzu liegt unter /usr/share/docs/pam-[version]/txts/README.pam.cracklib, pam_unix.so remember=25

[2] vigr admin-user nach wheel, visudo sudoers -> wheel aktivieren)

[3] # Uncomment the following line to require a user to be in the "wheel" group. --> nur ein User der wheel-Gruppe darf su

[4] Dokumentation, diff einer Config (cp .conf .conf.orig, diff .conf .conf.orig, Differenz nach .config.diff(f. patch))

[5] find / -perm 2000 -o perm 4000 > file, find / -perm -0002 > file others. Dies per cron regelmäßig ablaufen lassen, initialfile erstellen, unterschied per Mail

[6] +i [file]-> nicht veränderbar; +S sync, +s secure del (überschreiben), +u editierbar, aber nicht löschbar

USERMANAGEMENT

lokal

/etc/passwd

USERNAME:PASSWORD:UID:GID:infofield:HOMEDIR:LOGINSHELL:GECOS

anstatt einer shell kann auch ein Script angegeben werden. Nach dem beenden des Scripts wird der User wieder geworfen. Hier kann auch nach /bin/false oder /sbin/nologin geschickt werden Hier ist nur die primäre GruppenID zu finden. Diese Gruppe wird auf die erstellten Dateien angewendet Mit useradd wird ein user angelegt, mit usermod wird dieser bearbeitet, mit userdel wieder gelöscht Rechte: rw-r--r--

/etc/shadow

r-------- mit

authconfig

kann das Passwortversxchlüsselungssystem geändert werden. Allerdings passiert dies so, dass bei einer userseitigen PWD-Änderung das geänderte PWD in der neuen Verschlüsselung abgelegt wird. Ebenso finden sich hier die max.Time für PWDs und andere Passwortkriterien

/etc/login.defs

hier werden verschiedene Defaults gesetzt, wie zb PWD-Richtlinien, Mailboxen, der UID-Bereich ist festgelegt. Weiters wird hier definiert, ob das home-dir eingerichtet wird, ev. mit der umask (077)

/etc/default/useradd

weitere Parameter für alle neu angelegten User

auch wird hier definiert, dass alle Dateien aus /etc/skel ins home des Users gekegt werden

/etc/group

[root@station19 etc]# grep ANOther /etc/group
ANOther:x:501:

Hier findet sich die Gruppe, die GIDs, ev. das GruppenPWD Hier werden auch die Hilfsgruppen gefunden

/etc/gshadow

[root@station19 etc]# grep ANOther /etc/gshadow
ANOther:!::

hier ist kein Passwort gesetzt (!)

Hier finden sich auch die User, die Passwörter und die User, die "switchen" dürfen, ohne Passwortabfrage (sg)

Ein Passwort für die Gruppe würde mit

passwd 

gesetzt

chage

-l

liefert die Shadow leserlicher USERNAME:PASSWORD:LASTCHANGE: USERNAME:PASSWORD

ACLs

Mit AccessControlLists kann die Berechtigungsverwaltung erweitert werden. Dies ist eine Sonderfunktion, die das Filesystem unterstützen muss

mount -o acl

wird benötigt, um die ACLs zu aktivieren. Dies kann auch über die default-mount-options (tune2fs) oder über fstab passieren

User Hogo soll auch auf Franzes File zugreifen können:

[franz@station19 data1]$ setfacl -m u:hugo:rw- franz.txt

in ls -l scheint nur ein kleines "+" auf, welches den Hinweis auf ACLs liefert:

-rw-rw----+ 1 franz project 6 Apr 21 09:31 franz.txt

Mit getfacl kann die "echte" Berechtigung überprüft werden

[franz@station19 data1]$ getfacl franz.txt 
# file: franz.txt
# owner: franz
# group: project
user::rw-
user:hugo:rw-
group::---
mask::rw-
other::---

Anwendung v.a. für Windows-Fileserver (samba)

SElinux

[root@station19 ~]# sestatus

SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted
[root@station19 ~]# ls -Z
-rw-------  root root system_u:object_r:user_home_t    anaconda-ks.cfg
-rw-r--r--  root root root:object_r:user_home_t        install.log
-rw-r--r--  root root root:object_r:user_home_t        install.log.syslog
-rw-r--r--  root root system_u:object_r:user_home_dir_t virt-manager-install.log

Logging

syslogd wäre der (veralterte) zentrale Syslog-daemon. SuSE löste ihn ab durch "ng-syslogd), redhat durch "rsyslogd"

Einer der Gründe waren die Filtermöglichkeiten, die bei den neueren eben auf die aktuelleren Anforderungen angepasst worden sind. Allerdings verwenden nicht alle Anwendungen den syslogd, sondern verwenden eigene Logs in /var/log. Die Services, die eigene Logs generieren, erstellen eigene Unterverzeichnisse. In einigen Anwendungen kann in der .conf angepasst werden, welche "Art" des Loggings verwendet werden soll.

Ein weiterer Mechanismus wäre das Kernel-log, dieses kommt in einen eigenen Buffer, da der Kernel nicht in ein Logfile schreiben kann (dmesg), allerdings existiert eine Logdatei /var/log/dmesg (macht klogd), die nach vollfüllen des zur Verfügung stehenden Buffers geschrieben. Weiters wird, wie oben, die /var/log/messages, die zentrale Logdatei, befüllt. Dort liegen ~90% aller Logmeldungen

Der SyslogD verwendet eine Configdatei (/etc/syslog.conf), in der vermerkt wird, wohin gelogt werden soll

/etc/syslog.conf

man 3 syslog

Das System besteht aus 8 Log-Levels. Der loggende Dienst muss nun also Mitschicken, in welchen Bereich seine Meldung gehört (facilities) und den Level der Meldung

      LOG_EMERG
             system is unusable
      LOG_ALERT
             action must be taken immediately
      LOG_CRIT
             critical conditions
      LOG_ERR
             error conditions
      LOG_WARNING
             warning conditions
      LOG_NOTICE
             normal, but significant, condition
      LOG_INFO
             informational message
      LOG_DEBUG
             debug-level message

Der Aufbau in dieser Datei ist

facility:level Ziel

sar

Dieses Tool ist beinhaltet in sysstat*** Es loggt per default alle 10 Minuten Memory, Prozessorlast uvm. Es wird jeden Tag ein File nach /var/log/sa erstellt, welches die Analyse der Rechnerlast zulässt

zeitgesteuerte Vorgänge

Mittels ntpq -p kann der Status der eingetragenen Zeitserver abgefragt werden, die Zeitserver werden in /etc/ntp.conf eingetragen


/etc/cron.deny
/etc/at.deny

Es können per definition alle User cron und at ausführen, ausser sie finden sich ein einer der .deny-files. Wird die .deny gelöscht und eine .allow angelegt, gilt genau der umgekehrte Fall, es darf keiner, nur der, der sich in der .allow befindet

at:

at now + 10 min 

liefert einen prompt, in den Befehle eingegeben werden können mit

"strg-D"

wird der Job bestätigt

atq liefert eine Übersicht der laufenden Jobs
atrm entfernt Jobs
at -c [JobID]

zeigt, dass dieser at ein Script ist, welches die Variablen der shell verwendet. Dies kann genutzt werden, einen anderen User per Mail zu verständigen:

at 9:00 tomorrow
PATH=/usr/local/bin:/bin
MAILTO=test@domain.tld
backup.sh

würde nun die Variablen der shell übernehmen bzw. überschreiben. Jeder Output würde per Mail an (standard oder definierten) User gesendet

sollte eine zeitgesteuerte Aktion regelmäßig durchgeführt werden, sollte

cron

verwendet werden cron wird von der /etc/cron.conf gemanagt, mit

crontab -e

editiert:

Am Beginn der Crontab können ebenso Variablen gesetzt werden:

PATH=/bin:/sbin:/usr/bin:/usr/sbin
MAILTO=test@domain.tld
#MIN HOUR DAY MONTH DOW CMDs
30    4    *    *    4   /home/ANOther/bin/script.sh

an jedem Donnerstag um 4:30 wird dieses Script gestartet.

0,10,20,30,40,50    8-17  *    *    *   test.sh

oder

*/10                8-17  *    *    *     test.sh

würde alle 10min zwischen 8 und 17:50 das script ausführen. Sollte der Task um 17:00 enden, müsste dies in einer zweiten Zeile passieren

20-50/10

würde bedeuten, dass dies alle 10 min, von Minute 10 bis Minute 50 passiert (nicht Unix!)

Beim Schließen des Files wird der Eintrag auf die Richtigkeit geprüft und ausgeführt

mit service crong restart würde der Daemon neu gestartet

System-Jobs werden in /etc/crontab abgelegt:

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Auffallend ist hier, dass der User mit angegeben ist. Dies lässt den Start der Scripts unter dem angegebenen User zu

Weitere Crontabs finden sich in der /etc/cron.d/ Dadurch kann jeder Dienst seine eigene Crontab mitbringen


Zu beachten wäre, dass cron die Ausgabe (des Scripts) per Mail cersendet. Um dies zu unterdrücken kann

./script > /dev/null 2>&1

cerwendet werden, um die Ausgabe dach dev0 zu schicken

Printing

In Linux hat sich CUPS als Drucksystem durchgesetzt. CUPS verwendet primär das IPP (Internet Printing Protokoll). Per Default sind die Printer freigegeben Als Printprotokolle sind weiters im Einsatz: lpd, TCP/IP Printing

netstat -taupen | grep cups

würde das Port für die CUPS-Verwaltung am localhost liefern Die Verwaltung von CUPS kann über den Webbrowser (127.0.0.1:631) geschehen. Hier kann auch der "default-Printer" angelegt/definiert werden. Der User kann mit

export PRINTER=[drucker]

einen eigenen Drucker definieren

In redhat existiert auch eine GUI-Komponente (system-config-printer). Hier kann der Drucker ebenso verwaltet werden


export PRINTER=[drucker]

setzt den Drucker


systemV-Kommandos

lp -d (Druckername) (file)
lpstat -t (q)
cancel (requeast-ID, aus lpstat)


BSD-Kommandos

lpr -P (Druckername) (file)
lpq zeigt die q
lprm (job-ID)
lpinfo

bringt Infos zum Druckerdaemon

lpadmin 

lässt den Drucker an der CLI einrichten

cupsdisable

schaltet den Drucker aus

Konfiguration

/etc/cups/printers.conf 
/etc/cups/cupsd.conf

In diesem File kann konfiguriert werden, dass der CUPS auch von anderen, NICHT-localhostrechnern, erreicht werden. Ebenso kann - im Apachestyle - der Zugriff geregelt werden

mit

pr

kann eine Datei "formatiert" werden, dh Lochrand, Seitennummer u.ä. können erstellt werden

Localization

mit

loadkeys

kann die Keyboard-Konfiguration angepasst werden


In redHat

setup

ein TUI, in dem Keyboard und Zeitzonen konfiguriert werden können.

Die Zeitzone lässt sich mit

timeconfig

ändern.

iconv

konvertiert Files von einem Schriftsatz in einen anderen

Zeitzone

timeconfig
/etc/localtime

aus

/usr/share/zoneinfo/Europe/Vienna

umschalten:

cp  /usr/share/zoneinfo/Europe/Vienna  /etc/localtime

Variablen im Einsatz

$LANG

definiert den Schriftsatz LANG=c würde auf ASCII umschalten. Hier wird auch die Sprache definiert.

[root@station19 sa]# echo $LANG
en_US.UTF-8
[root@station19 sa]# ls -l
total 868
-rw-r--r-- 1 root root 340144 Apr 21 23:50 sa21
-rw-r--r-- 1 root root 249744 Apr 22 11:20 sa22
-rw-r--r-- 1 root root 269154 Apr 21 23:53 sar21
[root@station19 sa]# LANG=de_AT.UTF-8
[root@station19 sa]# echo $LANG
de_AT.UTF-8
[root@station19 sa]# ls -l
total 868
-rw-r--r-- 1 root root 340144 21. Apr 23:50 sa21
-rw-r--r-- 1 root root 249744 22. Apr 11:20 sa22
-rw-r--r-- 1 root root 269154 21. Apr 23:53 sar21

In den unterschiedlichen Lokalisierungen neben der Datumsschreibweise auch die Unterschiede zwischen .at und .de, wie zb die Schreibweise Jänner/Januar Ebenso werden - wenn installiert - auch die man-Pages in der ausgewählten Sprache gebracht

 /usr/share/i18n/locales/de_AT

kann angepasst werden. Die LANG-Variable kann verfeinert werden, indem die betreffenden Variablen, aufzurufen unter

locale

kann die LANG-Variable überschrieben werden

Netzwerk

(x)inetd

Er ist da, um Dienste bei Bedarf zu aktivieren, um Ressourcen zu sparen. So können auch mehrere (Telnet-)Daemons, für jeden User einer, gestartet werden. Dies erleichtert die Programmierung der jew. Anwendungen

Konfiguriert wird indetd in

/etc/inetd.conf


xinetd.conf ist der Nachfolger.

chkconfig --list

liefert nicht nur die installierten Services, ebenso die xinetd-Dienste

mit chkconfig [service] aon/off würde den Dienst starten/beenden


Die "Konfigurationsdateien" für die Dienste liegen in

/etc/xinetd.d


Die Kondigurationsdatei zum Daemon selber wäre die

/etc/xinetd.conf

Namensauflösung

in der /etc/nsswitch steht die Suchreihenfolge, wie gesucht werden soll.

files

verweist auf /etc/hosts

dns

verweist auf /etc/resolv.conf

in der resilv.conf kann auch ein Such"string" angegeben werden, der bei Abfragen ggf. mit angefügt wird. So wird zb erst nach host23 gesucht, danach nach host23.example.com. Es können bis zu 3 Nameserver und 6 (optionale) Suchstrings angegeben werden. Eine Änderung in dieser Datei sind sofort scharf, das bedeutet, es muss nicht neu gestartet/geladen werden. Auch existiert kein Cache, kein Daemon

Netzwerkkonfiguration

ifconfig

Hiermit können die IP-Adressen den Interfaces zugewiesen werden Mit

ifconfig -a

wird gelistet, welche Interfaces zur Verfügung stehen.

das Tool

ip

soll über kurz oder lang ifconfig ersetzen

ifconfig eth0 [IP] netmask [mask]

würde eth0 eine IP zuweisen. Ebenso kann ein eth0:x-Device angelegt werden, x weitere IPs am Interface (Virtual IPs)

mit

vconfig

kann auf jedem Interface ein VLAN gebaut werden (802.1q). Diese Interfaces würden dann als eth0.x aufscheinen

mit

iwconfig

könnte eine WLAN-Karte für eben diesen Einsatz konfiguriert werden.

in

/etc/sysconfig/network-scrips

findet sich

ifcfg-eth0

In dieser Datei muss stehen:

DEVICE=eth0
ONBOOT=yes
BOOTP=none|bootp|dhcp (diese Optionen setzen dhcpdclient....rpm voraus)
HWADDRESS=[MAC]
IPADDR=[IP]
NETMASK=[mask]
GATEWAY=[IP des Gates]

Statische Routen können allerdings auch mit

route add default gw [IP]

oder

ip route add default via [IP]

Um dies statisch einzutragen, kann die

/etc/sysconfig/network

mit

GATEWAY=[IP]

verwendet werden


Statische Routen werden mit

ip route add [IP] via [IP-Router]

temporär. Permanent muss

/etc/sysconfig/network-scripts/route-eth0

angelegt werden. Hier würde

[IP] via [IP-Router]

zu schreiben sein

Für dynamische Routen wird das Paket quagga verwendet


Speed/Duplex

mii-tool (alt)
/etc/rc.d/rclocal
ethtool

Mit beiden Tools lassen sich - wenn vom Treiber unterstützt - Speed/Duplex gesetzt werden

ethtool -s eth1 speed 10 autoneg off duplex full

Fix wäre dies in

/etc/sysconfig/network-scripts/ifcfg-eth1 

Sollte dies SO nicht funktionieren, kann dies über Kernelmodule passieren, dh mit modinfo das Modul finden, und die parms setzen Dies kann über modprobe.conf passieren:

options 3c59x full-duplex=1

Die zu setzenden Optionen der Kernelmodule stehen in der kernel-doc (dies setzt allerdings IDR einen reboot voraus)

Troubleshooting

ifconfig eth0 up/down
ifconfig -a
netstat -rn zeigt die Routingtable
netstat -an zeigt alle Ports/Sockets
netstat -taupen liefert, welcher Service auf welches Port hört (auch lsof)
netstat -i (time) zeigt die Infp in angegebenen Sekunden
netstat -s liefert eine Statistik
arp -an auslesen der MAC-Tabelle
arp -
tcpdump

-w [file] schreibt ein File, welches wireshark interpretieren kann


nmap

nmap

dig 
host umgehen den nsswitch und verwenden gleich die /resolv.conf


iptraf

liefert informationen zum Netzwerkverkehr


ipperf

kann als Client und als Server betrieben werden und leifert so Informationen zum Netzwerkdurchsatz

Mail

http://www.iredmail.org/

Der Mailuseragent von pluto in goofy.at sendet die Mail trick@donald.at. Das Mail wird an den "internen" Mailserver zugestellt, welcher in dieser Form als MailRelay und als MTA agiert. Der MTA checkt nun, ob der Sender "erlaubt" ist, ein Mail zu senden (IDR für die eigene Domain), und leitet die Mail weiter an einen Mailserver in der DMZ, welcher wieder als RELAY und als MTA agiert. Dieser MTA könnte nun Spam/Virenfilter beherbergen.

Der nach aussen angebundene MTA möchte nun den Zielmailserver kennen, und fragt den DNS mittels eines DNS-requests um den MX des Empfängers, in weiterer Folge kann der MTA die Mail direkt via SMTP an den Zielmailserver, der ggf. wieder Sicherheitsaufgaben übernimmt, und die mail schließlich auf den internen Mailserver der Empfängerdimain weiter. Der Zielserver wird auch als MDA bezeichnet. Dort landet die Mail dann in der User-Mailbox, unter

/var/spool/mail/user

In einem Mail-Directorysystem landet jedes Mail ein einem eigenen File, welches performanter ist. Auch können hier Mails einzeln wiederhergestellt werden. Allerdings sollte das Filesystem eine variable Inode-erweiterung zulassen (da jedes Mail eine eigene Inodenummer verbraucht. (Default ist allerdings das Mailbox-system, alles in ein File)

Der MUA der Zieldomain muss mit einem Protokoll (NICHT SMTP) auf dieses Postfach zugreifen können. In der UNIX-Welt wird hier IDR auf IMAP oder POP zurückgegriffen.

Der Vorteil vom SMTP ist, dass es leicht les/verstehbar ist.

sendmail

Bei einer Linux-Installation ist IDR ein Mailserver mit installiert, welcher allerdings nur auf 127.0.0.1 lauscht

[root@station19 ~]# netstat -taupen | grep :25
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      0          10570      2585/sendmail: acce 

wird sendmail verwendet liegt in

/etc/mail/sendmail.cf
sendmail.mc

wäre die lesbarere Variante. Um den Sendy nun der Welt zu öffnen: dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

Weiters muss das File neu rekonfiguriert werden

yum install sendmail-cf
make -C /etc/mail
service sendmail restart

(eine neue sendmail.cf wurde erstellt)


nun hört Sendmail auf seine anderen IPs. Es ist allerdings so kein Relay, und der remote-Zugriff funktioniert noch nicht


[root@station19 mail]# mail -v student@station19.example.com
Subject: test
.
Cc: .   
Null message body; hope that's ok
student@station19.example.com,.... Connecting to [127.0.0.1] via relay...
220 station19.example.com ESMTP Sendmail 8.13.8/8.13.8; Tue, 27 Apr 2010 11:54:39 +0200
>>> EHLO station19.example.com
250-station19.example.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-DELIVERBY
250 HELP
>>> MAIL From:<root@station19.example.com> SIZE=55 AUTH=root@station19.example.com
250 2.1.0 <root@station19.example.com>... Sender ok
>>> RCPT To:<student@station19.example.com>
>>> RCPT To:<.@station19.example.com>
>>> DATA
250 2.1.5 <student@station19.example.com>... Recipient ok
550 5.1.1 <.@station19.example.com>... User unknown
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 o3R9sd5K032178 Message accepted for delivery
student@station19.example.com... Sent (o3R9sd5K032178 Message accepted for delivery)
>>> RSET
250 2.0.0 Reset state
root... Using cached ESMTP connection to [127.0.0.1] via relay...
>>> MAIL From:<> SIZE=1079
250 2.1.0 <>... Sender ok
>>> RCPT To:<root@station19.example.com>
>>> DATA
250 2.1.5 <root@station19.example.com>... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 o3R9sd5M032178 Message accepted for delivery
root... Sent (o3R9sd5M032178 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 station19.example.com closing connection


nun werden Mails lokal zugestellt


Um Mails verschicken und empfangen zu können müssen noch einige Konfigurationen vorgenommen werden: local-host-names hier muss eingetragen werden, für welche Domains der Server zuständig sein soll:

example.com

weiters muss die Datei

access

bearbeitet werden

Connect:192.168.0                       OK


Danach wieder

make -C /etc/mail
service sendmail restart

Nun wurde access.db erstellt (Hier könnte der TCP-Wrapper wieder zuschlagen!!)

Nun darf das Netz 192.168.0.0/24 Mails senden. Für ein Relay müsste statt OK ein RELAY stehen


Antivir

clamav

amavir

spam

spamassassin

procmail

Procmail kann auf zwei Arten verwendet werden, einmal Global, das heisst, Filter werden am gesamten System angewendet (Konfigurationsdatei /etc/procmail), und einmal Userbezogen ( Datei im Userhome, .procmail).

So können zum Einen globale Einstellungen getroffen und so Spam sowie Virenfilter eingebunden werden, zum Anderen hat jeder User das Recht, eigene Mailfilter und weiterleitungen zu konfigurieren.

e


http://trash.net/faq/procmail.shtml


Filter in procmail

Mails an "adresse@domain.tld" an einen bestimmten IMAP-Ordner leiten

# adresse@domain.tld
:0 w
* ^To: .*adresse@domain.tld
/home/USER/mail/IN.adresse@domain.tld

Wobei der Ordner "IN.adresse@domain.tld" existieren muss


MAILDIR=$HOME/mail/

würde allerdings den Pfad verkürzen und "globalisieren", der obrige Filtereintrag würde nun mit der definierten MAILDIR-Variable so aussehen:

 # adresse@domain.tld
:0 w
* ^To: .*adresse@domain.tld
$MAILDIR/IN.adresse@domain.tld

Durch die Verwendung von Variablen anstatt der absoluten Pfadangaben erreicht man auch hier eine bessere Übersicht, bessere Anpassungsmöglichkeiten sowie die Möglichkeit, diese Datei via /etc/skel anlegen zu lassen


regex

http://www.perlcode.org/tutorials/procmail/regular_expressions.pod

postfix

mit

alternatives --config mta 

kann der standard-MTA aktiviert werden

Die Konfigdateien finden sich in /etc/postfix

in master.cf werden Dienste, Ports und Protokolle definiert

Grundlegendes wird in main.cf konfiguriert: unter SENDING MAIL wird deginiert, für welche Domäne der Server zuständig ist (myorigin = $mydomain) In Receiving sollte auf "all" gesetzt werden, um alle Mails anzunehmen Weiters sollte unter "mydestination" "$mydomain" konfiguriert sein

Weiter zu "TRUST AND RELAY CONTROL":

Hier werden entweder das Subnet oder/und a/b/c-Klasse verwendet werden

http://www.postfix-howto.de/konfiguration/postfix.htm

Mail-Rewrite

http://www.postfix.org/VIRTUAL_README.html

/etc/postfix/virtual

am Ende berny@domain20.example.com another

postmap virtual

erstellt ein binäres File

danach

virtual_alias_maps = hash:/etc/postfix/virtual

nach main.conf

in canonical

another vorname.nachname

dann wieder

postmap canonical

canonical = hash:/etc/postfix/canonical

nun wird auch beim Senden umgeschrieben

in /etc/aliases kann ein lokaler User definiert werden, an den Mails weitergemapt werden


muss allerdings in der main.cf noch aktiviert werden --ANOther 05:17, 21. Jan. 2011 (UTC)

smtps

smtps     inet  n       -       -       -       -       smtpd

nach /etc/postfix/master.cf

Nach einem postfix-Neustart lauscht smtp auch auf dem Port

tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      0          168431      32254/master

/etc/aliases

Hir wird festgelegt, dass alle Servicedienste nach root gemapt werden. Hier sollte am Ende die Person (mailadresse) eingetragen werden, der des roots Mails bekommt. En kann keine Mailadresse auf eine andere Adresse zu mappen, nur user auf user! Nach einer Änderung muss

newaliases

oder ein

make -C /etc/mail

ausgeführt werden


/etc/mail/virtusertable

(gilt für sendmail, unter postfix virtual) hier wird eine Mailadresse auf eine andere Mailadresse gemappt (Gilt auch für ganze Domains!) in postfix heisst diese Datei

/etc/mail/virtual
max@goofy.at  donald@duck.at,daisy


würde eine Mail an max an die Mailadresse donalds weiterleiten, ebenso an den User daisy

~/.forward

Eine im Homedir eingerichtete Datei erlaubt dem User, eigene Weiterleitungen zu definieren (Rechte auf 600!!!!)

mailq

in /var/spool/mailq lieget Mails, bis sie ausgeliefert werden können

MUA

Mail User Agent (pine, mail, outlook, ...) squirrelmail für webmail

MTA

MailTransferAgent (sendmail, qmail, exchange, exim, postfix, ...)

MDA

MailDeliveryAgent w.o., zusätzlich procmail (hier können weitere Regeln definiert werden). Der MDA legt unter linux die mail nach /var/spool/user ab. Dieses "Postfach", eine leere Datei, wird durch useradd angelegt. In diese Datei werden alle Mails gelegt (mailbox). Alternativ kann "Maildirectory" verwendet werden, wo jede Mail ein eigenes File wird. Der Vorteil hier ist, dass Mails einzeln wieder hergestellt werden können, der Nachteil ist, dass ggf die Performance des Dateisystems in die Knie gehen kann...

MRA

MailRetrievalAgent Abholen der Mails aus dem Postfach (cyrus, Dovecot, ...)

dovecot

/etc/dovecot.conf

protocols = imap pop3 
mail_location = maildir:~/Maildir

für mailDIR

mail_location = mbox:~/mail:INBOX=~/mail/%u

würde die mailBOX ins user~ legen

Der imap-daemon muss noch installiert werden:

apt-get install dovecot-imapd

Sollte der Fernzugriff via IMAP und in folge mit Klartextpasswort erfolgen, wäre auf

disable_plaintext_auth = no

zu ändern. Nach einem Dovecot-Restart werden nun Klartext-Passwörter akzeptiert


Key erstellen: in /etc/pki/tls/private

/usr/bin/openssl genrsa 1024 > dovecot.key
chmod 400 dovecot.key 

dann in der dovecot.conf

ssl_key_file = /etc/pki/tls/private/dovecot.key


zert für CA erstellen

 /usr/bin/openssl req $(UTF8) -new -key dovecot.key -out dovecot.csr

selbstsigniertes zert erstellen:

  /usr/bin/openssl req -new -key dovecot.key -x509 -days 3650 -out covecot.crt

squirrelmail

squirrelmail.noarch 0:1.4.8-5.el5_3.7 

dovecot hat die Configurationsdatei unter /etc/dovecot.conf hier wird das zur verfügung gestellte protokoll konfiguriert Weiters sollte die inbox angegeben werden

mail_location = maildir:~/Maildir:INBOX=/var/spool/mail/%u


wird konfiguriert über

/usr/share/squirrelmail/config/conf.pl

So wird ein ASCII-Menü aufgerufen, indem diese Anwendung konfiguriert werden kann Danach muss apache neu gestartet werden

mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u


sollten maildirs verwendet werden, müsste nach procmail (main.cf)

mailbox_command = /usr/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir

gesetzt werden. In dovecot auf

 mail_location = maildir:~/Maildir

---

vhost

<VirtualHost *:80>
 DocumentRoot /usr/share/squirrelmail
 ServerName l.anonet.at
</VirtualHost>


nach einem restart des apache ist squirrel auch als vhost erreichbar

Mailtroubles

dig mx anonet.at

so wird überprüft, ob der MX aufgelöst werden kann

;; ANSWER SECTION:
anonet.at.              3591    IN      MX      10 mx1.lix.aon.at.

Sollten mehrere Mailserver angegeben werden, wird die höhere Nummer dann beliefert, wenn die niedrigere nicht reagiert/das Mail nicht annimmt

Auch kann ein Mailserver per Telnet "getestet" werden:

telnet mailserv.er 25
220 Antwort des Mailservers
helo mailserv.er
250 Helo
mail from: mail@mailserv.er
250 ... Sender OK
rcpt to: ziel@mailserv.er
250 ... Recipient OK
data
354 Please start mail input
TEXT
Punkt in der ersten Spalte
.
250 Mail queued for delivery

Diverses zu Mail

Fetchmail

fetchmail

formail

schreibt Mails um


archivemail

kann alte mails löschen bzw archivieren


archivemail --delete -d 3 --dry-run mail/SPAM 


als User ausgeführt würde nun in der Mailbox "mail/SPAM" alle Mails löschen, die älter sind als 3 Tage

Die Option "--dry-run" allerdings verhindert den "wirklichen" Zugriff, und lässt einen Testlauf zu


OPTIONEN

  • -d Anzahl der Tage (standard wäre 180 Tage)
  • -D ein Datum. Die Aktion wird auf alle Mails, die älter als das angegebene Datum sind, angewendet. Das Datum kann wie folgt angegeben werden, wobei zu beachten wäre, dass das Jahr nicht zweistellig angegeben werden darf:
    • 2011-04-12
    • 12 Apr 2011
    • 12 April 2011
  • --delete als Option löscht die Mails, auf die die restlichen Bedingungen zutreffen
  • -n (--dry-run) führt einen "Testlauf" durch

Weiterführendes auf der manpage

Virenscanner

clamav

clamav

amavir

SQL

Es stehen zwei "Arten" zur Verfügung: mqSQL und PostgreSQL

relationale Datenbank Der Datensatz wird nur einmal gespeichert, die Tabellen stehen in einem Bezug zueinander. Man ist versucht, mittels Verweise kleinere Tabellen zu verknüpfen


In den Tabellen werden den Feldern Eigenschaften mitgegeben

yum install mysql-server
service mysqld start

Somit wäre mySQL installiert und gestartet

mysql -u root

Verbindung hergestellt

help show

listet die möglichen "show"-Befehle Ein SQL.Befehl endet IDR mit ;

show databases;

listet die vorhandenen Datenbanken auf

create database mydb;

mysql> create database mydb; Query OK, 1 row affected (0.00 sec)

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb               | 
| mysql              | 
| test               | 
+--------------------+
4 rows in set (0.00 sec)

Mit

grant all on mydb.* to student@localhost identified by "12345";

wird der Zugriff auf die DB dem User Student gewährt, und ein Passwort gesetzt

nun kann mit dem User Student eingestiegen werden:

[root@station19 another]# mysql -u student mydb -p
Enter password: 


create table person ( pid int primary key, nachname varchar(20) not null,vorname varchar(20),plz int);


mysql> show tables
    -> ;
+----------------+
| Tables_in_mydb |
+----------------+
| person         | 
+----------------+
1 row in set (0.00 sec)

mysql> describe person
    -> ;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| pid      | int(11)     | NO   | PRI | NULL    |       | 
| nachname | varchar(20) | NO   |     | NULL    |       | 
| vorname  | varchar(20) | YES  |     | NULL    |       | 
| plz      | int(11)     | YES  |     | NULL    |       | 
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

Die Tabelle wurde angelegt, mit "show tables" überprüft

create table orte (plz int primary key, name varchar(30) not null, land varchar(2) not null);


insert into person values (1, "Meier", "Sepp", 5020)
insert into person values (2, "Wimmer", "Hans", 5023, at)


mysql> select * from person
    -> ;
+-----+----------+---------+------+
| pid | nachname | vorname | plz  |
+-----+----------+---------+------+
|   1 | Meier    | Sepp    | 5020 | 
|   2 | Wimmer   | Hans    | 5023 | 
+-----+----------+---------+------+
insert into orte values (5020, "Salzburg", "AT");
insert into orte values (5023, "Salzburg-Gnigl", "AT");


Nun müssen die beiden Tabellen verknüpft werden:

alter table orte add constraint plz_orte foreign key (plz) references person.plz;
select * from person,orte where person.plz = orte.plz
    -> ;
+-----+----------+---------+------+------+----------------+------+
| pid | nachname | vorname | plz  | plz  | name           | land |
+-----+----------+---------+------+------+----------------+------+
|   1 | Meier    | Sepp    | 5020 | 5020 | Salzburg       | AT   | 
|   2 | Wimmer   | Hans    | 5023 | 5023 | Salzburg-Gnigl | AT   | 
+-----+----------+---------+------+------+----------------+------+
2 rows in set (0.00 sec)


mysql> select person.nachname,orte.name from person,orte where person.plz = orte.plz
    -> ;
+----------+----------------+
| nachname | name           |
+----------+----------------+
| Meier    | Salzburg       | 
| Wimmer   | Salzburg-Gnigl | 
+----------+----------------+
2 rows in set (0.00 sec)

Diverses

. ./my.sh

würde ein Script aus der aktuellen shell starten


getent

(clientseite!) Es konsulitiert /etc/nsswitch, welches /etc/nsswitch.conf befragt. Hier sind emögliche Informationsquellen angegeben. Dies kann nun ldap, nfs o.ä. sein. Dieses Tool liefert Informationen, welche User sich am System anmelden dürfen. Dies wird interessant, wenn eine zentralisierte Userverwaltung verwendet wird.


authconfig-tui 

läwsst die Art der Auth. konfigurieren

authconfig änderte:
  • /etc/nsswitch.conf
  • /etc/sysconfig/network
  • /etc/yp.conf
  • /etc/pam.d/system-auth
  • /etc/sysconfig/authconfig


getent passwd

listet nun alle User des NIS auf. Allerdings wird so auch das Passwort übertragen, was zu einem Securityproblem ausarten könnte

Wird hier nun ein User "doppelter" User gefunden, zieht der "erste" gefundene User, da Linux (Unix) sequentiell arbeitet

logrotate

/etc/logrotate.conf

Hier wird dafür gesorgt, dass Logfiles nicht unendlich groß werden. Per default passiert dies 1x pro Woche in

/etc/logrotate.d/

liegen weitere Configfiles, die, ausgeführt, bewirken, dass der betreffende Daemon "neu gestartet" wird

faillog

liefert Informationen, welche User nicht erfolgreich anmelden konnten


sysstat

liefert tools, u.a. iostat

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Navigation
Werkzeuge