Letzte Änderung: 09. Mai 2022

Linux Tips & Tricks


 Inhaltsverzeichnis : 
Der Linux Verzeichnisbaum
Runlevel
Linux Rechtesystem
Der Befehl Alias
Bash Scriptdateien
Programme beim hochfahren starten
Hard- und Softlinks
Mit Rootkit Scannern checken ob böse Menschen auf dem Rechner sind ...
SSH Dienst sicherer machen
Verschlüsselte "Secure Copy" SCP Verbindung zum Server
Mail auf der Kommandozeile
 


Der Linux Verzeichnisbaum

/ # Wurzel.
/bin # Systemprogramme für alle User.
/boot # Programme für den Systemstart, z.B. 'lilo'-oder'grub'-Dateien.
/dev # Gerätetreiber.
/etc # Konfigurationsdateien.
/home # Heimatverzeichnisse der Benutzer.
/lib # Shagrey System-Libraries.
/mnt # Mount-Verzeichnis.
/proc # Dateien des virtuellen Prozess-Dateisystems für Hardware-Informationen.
/opt # Für Optionale Erweiterungspakete oder Programme (jeweils in Unterverzeichnissen), z.B. KDE, Firefox etc.
/root # Home-Verzeichnis des Super-Users 'root'.
/sbin # Ausführbare Dateien die nur für den Super-User 'root' bestimmt sind, wie z.B. 'fdisk' oder 'fsck'.
/tmp # Temporäre Dateien.
/usr # Unix System Ressources (hat nichts mit 'User' zu tun). Anwendungen und Dateien, die nicht für Systemverwaltung benötigt werden, z.B. Manuals, HowTo-Beschreibungen, X Window, Midnight Commander und Java J2SE.
/var # Variable Daten. Z.B. Log-Dateien unter '/var/log'.

Runlevel

0 = Halt (Shutdown)
1 = Einzelbenutzer-Modus
2 = Nicht belegt (vom Benutzer zu definieren)
3 = Vollständiger Mehrbenutzer-Modus
4 = Nicht belegt (vom Benutzer zu definieren)
5 = Vollständiger Mehrbenutzer-Modus (mit einem X-basierten Login-Bildschirm)
6 = Neustart

Dies wird beim Linuxstart in der Datei

/etc/inittab in der Zeile:

id:5:initdefault:

Der Befehl /sbin/runlevel (nur für root zu erreichen :D) sagt einem dann in welchem Level das System z.Zt. läuft.

Linux Rechtesystem

Zugriffsrechte einer Datei:

user-read Leserecht für Dateieigentümer
user-write Schreibrecht für Dateieigentümer
user-execute Ausführrecht für Dateieigentümer
group-read Leserecht für Gruppe des Dateieigentümers
group-write Schreibrecht für Gruppe des Dateieigentümers
group-execute Ausführrecht für Gruppe des Dateieigentümers
other-read Leserecht für alle anderen Benutzer
other-write Schreibrecht für alle anderen Benutzer
other-execute Ausführrecht für alle anderen Benutzer

r-- r-- r-- Lesen
rw- rw- rw- Schreiben
r-x r-x r-x Ausführen
rwx rwx rwx Lesen, Schreiben und Ausführen

4 4 4 Lesen
6 6 6 Schreiben
5 5 5 Ausführen
7 7 7 Lesen, Schreiben und Ausführen

Mit + und - könnt ihr die Flags hinzufügen oder entfernen. Das sieht dann so aus:

u = Eigentümer (User)
g = Gruppe (Group)
o = alle Anderen (Other)

chmod u+x meinedatei (Der Eigentümer bekommt Ausführrechte)
chmod g-w meinedatei (Der Gruppe werden die Schreibrechte entzogen)
chmod -x meinedatei (Eigentümer, Gruppe & Rest verlieren die Ausführrechte)

Zugriffsrechte für Verzeichnisse:

Das r-Recht an einem Verzeichnis zu besitzen heißt, man kann den Inhalt des Verzeichnisses lesen, mit anderen Worten, man kann den Befehl ls für dieses Verzeichnis einsetzen.

Besitzen Sie das w-Recht an einem Verzeichnis, können Sie einen Verzeichniseintrag löschen, das Verzeichnis wird verändert gespeichert, der Dateiname und die Inode-Nummer existieren nicht mehr. Nehmen wir nun einen extremen Fall an. Eine Datei, an der Sie keinerlei Rechte besitzen, befinde sich in einem Verzeichnis, in dem Sie das w-Recht haben. Diese Datei können Sie, auch ohne Rechte an ihr selbst, löschen, denn Sie können das Verzeichnis manipulieren! Gleiches gilt für das Umbenennen (ändert den Eintrag in einem Verzeichnis), Verschieben (löscht den Eintrag in einem Verzeichnis) oder Erstellen (erzeugt einen neuen Eintrag in einem Verzeichnis) einer Datei.

Das x-Recht an einem Verzeichnis bedeutet nun, daß Sie mit cd in das Verzeichnis wechseln dürfen.

Besonderheiten :

1. das "setuid" BIT

Es hat den Bitwert 4000 (einfach dazu addieren) und wird durch ein "s" statt dem "x" des Users dargestellt und hat nur für ausführbare Dateien eine Bedeutung:

-rws r-x r-- 1 uwe lehrer 12 Mar 26 20:01 test

Dieses setuid-bit bewirkt folgendes: Wenn ein berechtigter Nutzer (hier im Bsp. die Gruppe "lehrer" diese Datei ausführt, dann wird sie nicht mit seinen eigenen Rechten, sondern mit den Rechten des Eigentümers der Datei ausgeführt. Aber Vorsicht, es kann bei unbedachter Anwendung zu gravierenden Sicherheitslücken im System führen.

2. das "setgid" BIT

Es hat den Bitwert 2000 (einfach dazu addieren) und wird durch ein "s" oder "S" statt dem "x" der Gruppe dargestellt und hat nur für Verzeichnisse eine Bedeutung:

drwx rwS r-- 1 uwe lehrer 12 Mar 26 20:01 test2

Dieses setgid-bit bewirkt folgendes: Wenn ein berechtigter Nutzer Dateien in dieses Verzeichnis speichert, dann werden sie nicht unter seiner eigenen Gruppenzugehörigkeit, sondern unter der Gruppenbezeichnung des Verzeichnisses (hier "lehrer") gespeichert. Das macht für gemeinsam zu bearbeitende Projekte manchmal Sinn.

3. das "sticky" BIT

Es hat den Bitwert 1000 (einfach dazu addieren) und wird durch ein "t" oder "T" statt dem "x" für "alle" dargestellt und hat heute nur noch nur für Verzeichnisse eine Bedeutung:

drwx rwx rwt 1 root root 12 Mar 26 20:01 tmp

Dieses sticky-bit bewirkt folgendes: Wenn ein berechtigter Nutzer Dateien in dieses Verzeichnis speichert, kann nur er selbst diese wieder löschen, obwohl andere auch Schreibrechte besitzen können. Das macht zum Beispiel für temporäre Dateien aller User in einem gemeinsamen Verzeichnis Sinn.

Der Befehl Alias


Um Befehle abzukürzen bzw. sich selbst welche anzupassen kann man prima den Befehl alias verwenden.
Um z.B. die MS-Dos Befehle zu emulieren könnte man sowas machen :

alias dir="ls" alias copy="cp" alias rename="mv" alias md="mkdir" alias rd="rmdir" alias del="rm -i"

Um alle aktiven Aliase anzuzeigen, schreibt man nur den Befehl # alias in die Bash.

Um das ganze permanent zu machen trägt man diese Befehle in die ~/.bashrc ein.
Systemweit siehe unten Bash Scriptdateien.

Bash Scriptdateien


Bei jedem Start einer bash wird folgende Reihenfolge beim lesen der Shell-Konfigurationsdateien (bash spezifisch) verwendet:

interactive login shell: You log into a remote computer via, for example ssh. Alternatively, you drop to a tty on your local machine (Ctrl+Alt+F1) and log in there. interactive non-login shell: Open a new terminal. non-interactive non-login shell: Run a script. All scripts run in their own subshell and this shell is not interactive. It only opens to execute the script and closes immediately once the script is finished. non-interactive login shell: This is extremely rare, and you're unlikey to encounter it. One way of launching one is echo command | ssh server. When ssh is launched without a command (so ssh instead of ssh command which will run command on the remote shell) it starts a login shell. If the stdin of the ssh is not a tty, it starts a non-interactive shell. This is why echo command | ssh server will launch a non-interactive login shell. You can also start one with bash -l -c command.

FILES /bin/bash The bash executable /etc/profile The systemwide initialization file, executed for login shells ~/.bash_profile The personal initialization file, executed for login shells ~/.bashrc The individual per-interactive-shell startup file ~/.bash_logout The individual login shell cleanup file, executed when a login shell exits ~/.inputrc Individual readline initialization file

Wichtig :
Aus einer Windows Manager gestarteten Konsole kommt man in eine nonlogin Shell !
Das kann man umgehen in dem man die KDE/Gnome Konsole so einstellt, das sie beim starten den Befehl 'bash --login' ausführt.

Im Runlevel 2,3 bei der Systemanmeldung, mit su - oder bash --login kommt man in eine login Shell !

Es gibt shellspezifische globale Konfigurationsdateien für eine login Shell (nicht standardisiert):

Red Hat/Fedora: /etc/profile
Debian: /etc/profile
Arch: /etc/profile
FreeBSD: /usr/local/etc/profile

Programme bei Systemstart starten


Das machen wir in der Datei /etc/rc.local

Viele Distributionen liefern diese Datei direkt mit, bei anderen kann man sich selbst eine rc.local bauen.
Einfach mal googlen, für jede Distri die keine rc.local hat, kann man sich eine solche einfach nachbauen.

Hard- und Softlinks


Mit einem Link ist ein und dieselbe Datei/Verzeichnis über mehrere (verschiedene) Namen aus eventuell sogar verschiedenen Verzeichnissen heraus ansprechbar.

Hardlink :

Es wird einfach ein zusätzlicher Verzeichniseintrag auf eine Datei erstellt.

* Die Rechte sind für diese Links immer identisch.
* Nur auf Dateien können Hardlinks angelegt werden.
* Hardlinks müssen sich immer innerhalb eines Dateisystems (Festplattenpartition) befinden
* Erst dann, wenn der letzte Hardlink auf eine Datei gelöscht wird, wird die Datei selbst gelöscht.
* Der Befehl lautet:
ln [quelle] [ziel]

Softlink :

Ein Softlink ist selbst eine Datei, die auf eine andere Datei oder ein anderes Verzeichnis zeigt:

* Die rechte des Originals und des Softlinks können verschieden sein
* Sie können auf Dateien und Verzeichnisse angewandt werden
* Sie können auch über Dateisystemgrenzen hinweg erstellt werden
* Ist die Originaldatei gelöscht, zeigt der Softlink ins "leere".

* Der Befehl lautet:

ln -s [quelle] [ziel]

Mit Rootkit Scannern checken ob böse Menschen auf dem Rechner sind ...

www.chkrootkit.org und http://rkhunter.sourceforge.net

Nach einem Systemupdate können Warnings bei rkhunter vorkommen. Die Datenbank auf die neuen Filehashes updaten macht man mit dem Befehl :

rkhunter --propupd

Für den Rootkit Hunter und Chkrootkit haben viele Distris fertige Pakete. Für Fedora oder Centos also einfach ein "dnf install rkhunter" bzw. "dnf install chkrootkit" eingeben.

Oben noch die Links, falls man die Rootkit Scanner selbst kompillieren will ...

SSH Dienst sicherer machen (alle Änderungen in der /etc/ssh/sshd_config durchführen)

Rootlogin abschalten :

PermitRootLogin no

(TCP)-Port wechseln :

Port 723

Das unsichere Kommunikationsprotokoll 1 abschalten :

Protocol 2

SSH-Zugriff auf die ssh-Gruppenmitglieder reduzieren :

Nur Mitglieder der Gruppe "ssh" dürfen sich über SSH einloggen:

AllowGroups ssh oder noch spezieller nur für einen User : AllowUsers username

Zusätzlich kann man den SSH Dienst zusätzlich noch mit dem Tool Denyhosts absichern.

Verschlüsselte "Secure Copy" SCP Verbindung zum Server:

Windows : Mit der Software winscp (gesicherte SCP Verbindung unter Windows)

Linux X (KDE/Gnome): fish://username@80.265.542.34

Linux Shell: Zum Übertragen von einem anderen Server auf den lokalen Rechner:

# scp Benutzername@Servername:Quellpfad Zielpfad

Zum Übertragen vom lokalen Rechner auf einen anderen Server:

# scp Quellpfad Benutzername@Servername:Zielpfad

Optionen :

* -r rekursives Kopieren mehrer Dateien inklusive der Unterverzeichnisse
* -p Änderungs- und Zugriffszeiten der Dateien sowie die Berechtigungen (rwxrwxrwx) werden beim Kopieren beibehalten
* -q deaktiviert die Ausgabe von Statistiken
* -Q aktiviert die Ausgabe von Statistiken
* -l limit begrenzt die benutzte Bandbreite, wird in Kbit/s angegeben
* -o ssh_option hier können ssh Optionen angegeben werden, die nicht explizit für scp definiert wurden. Für mehr Infos siehe ssh_config.

Beispiel: Kopieren von daten.dat vom Zielrechner auf den lokalen Rechner:

# scp username@rrz.uni-koeln.de:/home/username/daten.dat daten.dat

Beispiel: Kopieren von daten.dat vom lokalen Rechner auf den Zielrechner:

# scp daten.dat username@rrz.uni-koeln.de:/home/username/daten.dat

Mail auf der Kommandozeile

Eine Mail mit Anhang aus der Konsole mit einem Oneliner verschicken:

# mail -s "Testing from" -r "sender " root@domain.de < <(echo "Test message")

oder mit dem Mailprogramm Mutt

# echo Das ist ein Test | mutt -s "Test-Subject" -a anhang.pdf mail@domain.de