====== Skeleton-Dateien für Benutzererstellung ====== ===== Lernziel ===== Sie lernen das `/etc/skel` Verzeichnis und Skeleton-Dateien kennen und können diese zur Automatisierung der Benutzer-Umgebung bei der Account-Erstellung nutzen. ===== Voraussetzungen ===== * [[workshop:useradd|Benutzer hinzufügen]] * [[workshop:benutzer_gruppenverwaltung|Benutzer- und Gruppenverwaltung]] * [[workshop:berechtigungen|Linux Berechtigungssystem]] * [[workshop:shell_scripting|Shell-Scripting Grundlagen]] ===== Theorie ===== ==== Was sind Skeleton-Dateien? ==== **Skeleton-Dateien** (Skelett-Dateien) sind Vorlagen, die automatisch in das Home-Verzeichnis neuer Benutzer kopiert werden: * Befinden sich standardmäßig in **/etc/skel/** * Werden von `useradd -m` automatisch kopiert * Definieren Standard-Umgebung für neue Benutzer * Können für verschiedene Benutzertypen angepasst werden ==== Das /etc/skel Verzeichnis ==== * **Standard-Speicherort** für Skeleton-Dateien * **Versteckte Dateien** (beginnend mit .) werden ebenfalls kopiert * **Berechtigungen** werden mit kopiert * **Kann angepasst** werden mit `useradd -k` Option ==== Typische Skeleton-Inhalte ==== * **Shell-Konfiguration:** .bashrc, .bash_profile, .zshrc * **Desktop-Einstellungen:** .config/, .local/ * **Anwendungs-Templates:** Dokument-Vorlagen, Standard-Bookmarks * **Entwicklungs-Umgebung:** Git-Konfiguration, Editor-Settings ===== Kommandos ===== ==== Standard /etc/skel erkunden ==== # Inhalt von /etc/skel anzeigen ls -la /etc/skel/ tree /etc/skel/ 2>/dev/null || find /etc/skel -type f # Skeleton-Dateien im Detail find /etc/skel -type f -exec ls -la {} \; # Versteckte Dateien und Verzeichnisse find /etc/skel -name ".*" -type f # Größe des Skeleton-Verzeichnisses du -sh /etc/skel/ du -ah /etc/skel/ ==== Standard-Skeleton-Dateien anpassen ==== # Backup des aktuellen /etc/skel erstellen sudo cp -r /etc/skel /etc/skel.backup.$(date +%Y%m%d) # Erweiterte .bashrc erstellen sudo tee /etc/skel/.bashrc << 'EOF' # ~/.bashrc: executed by bash(1) for non-login shells. # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac # History-Einstellungen HISTCONTROL=ignoreboth HISTSIZE=10000 HISTFILESIZE=20000 shopt -s histappend # Window-Size nach Resize prüfen shopt -s checkwinsize # Lesbares less für Binärdateien [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" # Colored prompt if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi # Aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' alias ..='cd ..' alias ...='cd ../..' alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' # Git-Aliase alias gs='git status' alias ga='git add' alias gc='git commit' alias gp='git push' alias gl='git log --oneline' # System-Aliase alias df='df -h' alias du='du -h' alias free='free -h' alias ps='ps aux' # Completion aktivieren if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # Lokale Anpassungen if [ -f ~/.bashrc.local ]; then . ~/.bashrc.local fi EOF # Erweiterte .bash_profile sudo tee /etc/skel/.bash_profile << 'EOF' # ~/.bash_profile: executed by bash(1) for login shells. # Include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi # User specific environment and startup programs PATH="$HOME/bin:$HOME/.local/bin:$PATH" export PATH # Standard-Editor setzen export EDITOR=nano export VISUAL=nano # Locale-Einstellungen export LANG=de_DE.UTF-8 export LC_ALL=de_DE.UTF-8 EOF ==== Spezielle Skeleton-Verzeichnisse erstellen ==== # Entwickler-Skeleton erstellen sudo mkdir -p /etc/skel.developer # Standard-Dateien kopieren sudo cp -r /etc/skel/. /etc/skel.developer/ # Git-Konfiguration für Entwickler sudo tee /etc/skel.developer/.gitconfig << 'EOF' [user] # Wird beim ersten Git-Commit angepasst name = CHANGEME email = CHANGEME@company.com [core] editor = nano autocrlf = input [init] defaultBranch = main [push] default = simple [pull] rebase = false [alias] st = status co = checkout br = branch up = pull ci = commit lg = log --oneline --graph --decorate EOF # SSH-Verzeichnis vorbereiten sudo mkdir -p /etc/skel.developer/.ssh sudo chmod 700 /etc/skel.developer/.ssh # Entwickler-spezifische .bashrc-Erweiterung sudo tee /etc/skel.developer/.bashrc.local << 'EOF' # Entwickler-spezifische Aliases und Funktionen # Development-Aliases alias python='python3' alias pip='pip3' alias serve='python3 -m http.server' alias json='python3 -m json.tool' # Docker-Aliases (falls installiert) alias d='docker' alias dc='docker-compose' alias dps='docker ps' alias di='docker images' # Nützliche Funktionen mkcd() { mkdir -p "$1" && cd "$1" } # Projekt-Setup Funktion project_setup() { if [ -z "$1" ]; then echo "Usage: project_setup " return 1 fi mkdir -p "$1"/{src,tests,docs,config} cd "$1" git init echo "# $1" > README.md echo ".env" > .gitignore echo "Projekt $1 erstellt und initialisiert" } # PATH für lokale Entwicklungstools export PATH="$HOME/.local/bin:$HOME/bin:$PATH" # Node.js export PATH="$HOME/.npm-global/bin:$PATH" # Python export PATH="$HOME/.local/bin:$PATH" EOF # Admin-Skeleton erstellen sudo mkdir -p /etc/skel.admin sudo cp -r /etc/skel/. /etc/skel.admin/ # Admin-spezifische .bashrc-Erweiterung sudo tee /etc/skel.admin/.bashrc.local << 'EOF' # Admin-spezifische Aliases und Funktionen # System-Administration Aliases alias services='systemctl list-units --type=service' alias logs='journalctl -f' alias ports='netstat -tuln' alias processes='ps aux --sort=-%cpu | head' alias diskspace='df -h | grep -E "^/dev"' alias meminfo='free -h && echo && cat /proc/meminfo | head' # Log-Analyse alias auth_log='sudo tail -f /var/log/auth.log' alias sys_log='sudo tail -f /var/log/syslog' alias apache_error='sudo tail -f /var/log/apache2/error.log 2>/dev/null || echo "Apache nicht installiert"' alias nginx_error='sudo tail -f /var/log/nginx/error.log 2>/dev/null || echo "Nginx nicht installiert"' # Netzwerk-Tools alias myip='curl -s ipinfo.io/ip' alias listening='ss -tuln' alias connections='ss -tuap' # Backup-Funktionen backup_home() { if [ -z "$1" ]; then echo "Usage: backup_home " return 1 fi backup_dir="/backup/home/$(date +%Y%m%d)" sudo mkdir -p "$backup_dir" sudo tar -czf "$backup_dir/${1}_$(date +%H%M%S).tar.gz" "/home/$1" echo "Backup erstellt: $backup_dir/${1}_$(date +%H%M%S).tar.gz" } # System-Monitoring system_overview() { echo "=== System Overview $(date) ===" echo echo "=== CPU ===" lscpu | head -10 echo echo "=== Memory ===" free -h echo echo "=== Disk ===" df -h | head -10 echo echo "=== Load ===" uptime echo echo "=== Top Processes ===" ps aux --sort=-%cpu | head -6 } # Prompt-Anpassung für Admin export PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' EOF ===== Schritt-für-Schritt Anleitung ===== ==== 1. Aktuelles Skeleton analysieren ==== # Umfassende Analyse des Standard-Skeleton echo "=== Standard Skeleton-Analyse ===" # Verzeichnisstruktur echo "Verzeichnisinhalt:" ls -la /etc/skel/ # Dateigrößen echo "" echo "Dateigrößen:" find /etc/skel -type f -exec ls -lh {} \; # Versteckte Dateien echo "" echo "Versteckte Dateien:" find /etc/skel -name ".*" -type f # Gesamtgröße echo "" echo "Gesamtgröße des Skeleton:" du -sh /etc/skel/ # Test: Neuen Benutzer erstellen und Skeleton testen echo "" echo "=== Test-Benutzer-Erstellung ===" test_user="skeleton_test_$(date +%s)" sudo useradd -m "$test_user" echo "Home-Verzeichnis des Test-Benutzers:" sudo ls -la "/home/$test_user/" # Test-Benutzer wieder löschen sudo userdel -r "$test_user" ==== 2. Angepasstes Skeleton erstellen ==== # Backup und neues Skeleton erstellen backup_date=$(date +%Y%m%d_%H%M%S) sudo cp -r /etc/skel "/etc/skel.backup.$backup_date" echo "Backup erstellt: /etc/skel.backup.$backup_date" # Erweiterte Verzeichnisstruktur sudo mkdir -p /etc/skel/{Documents,Downloads,Scripts,Projects} sudo mkdir -p /etc/skel/.config sudo mkdir -p /etc/skel/.local/bin # Willkommens-Datei sudo tee /etc/skel/README.txt << 'EOF' Willkommen in Ihrem neuen Benutzer-Account! Diese Dateien wurden automatisch erstellt: - .bashrc: Shell-Konfiguration - .bash_profile: Login-Shell-Konfiguration - Documents/: Für Ihre Dokumente - Downloads/: Für Downloads - Scripts/: Für eigene Scripts - Projects/: Für Entwicklungsprojekte Hilfreiche Befehle: - ls -la: Alle Dateien anzeigen (auch versteckte) - history: Befehlshistorie anzeigen - man befehl: Hilfe zu einem Befehl Für weitere Hilfe wenden Sie sich an den System-Administrator. EOF # Beispiel-Script sudo tee /etc/skel/Scripts/example.sh << 'EOF' #!/bin/bash # Beispiel-Script für neue Benutzer echo "Hallo $(whoami)!" echo "Heute ist $(date)" echo "Du befindest dich in: $(pwd)" echo "Deine Benutzer-ID ist: $(id -u)" echo "Du gehörst zu folgenden Gruppen: $(groups)" EOF sudo chmod +x /etc/skel/Scripts/example.sh # Git-Ignore-Template sudo tee /etc/skel/.gitignore_global << 'EOF' # Compiled source *.com *.class *.dll *.exe *.o *.so # Packages *.7z *.dmg *.gz *.iso *.jar *.rar *.tar *.zip # Logs and databases *.log *.sql *.sqlite # OS generated files .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db # Editor backups *~ *.swp *.swo # Python __pycache__/ *.py[cod] *$py.class *.egg-info/ dist/ build/ # Node.js node_modules/ npm-debug.log* # IDE .vscode/ .idea/ *.sublime-project *.sublime-workspace EOF echo "Angepasstes Skeleton erstellt" ==== 3. Rollenbasierte Skeleton-Templates ==== # Template-System für verschiedene Benutzertypen echo "=== Erstelle rollenbasierte Skeleton-Templates ===" # Basis-Template (Standard) sudo mkdir -p /etc/skel.templates/standard sudo cp -r /etc/skel/. /etc/skel.templates/standard/ # Entwickler-Template sudo mkdir -p /etc/skel.templates/developer sudo cp -r /etc/skel.templates/standard/. /etc/skel.templates/developer/ # Entwickler-spezifische Erweiterungen sudo mkdir -p /etc/skel.templates/developer/{Projects,Repositories,.vscode,.config/git} sudo tee /etc/skel.templates/developer/.vscode/settings.json << 'EOF' { "editor.tabSize": 4, "editor.insertSpaces": true, "editor.detectIndentation": true, "files.autoSave": "afterDelay", "files.autoSaveDelay": 1000, "terminal.integrated.shell.linux": "/bin/bash" } EOF # Admin-Template sudo mkdir -p /etc/skel.templates/admin sudo cp -r /etc/skel.templates/standard/. /etc/skel.templates/admin/ sudo mkdir -p /etc/skel.templates/admin/{Backups,Monitoring,Scripts/admin} # Admin-Scripts sudo tee /etc/skel.templates/admin/Scripts/admin/system_check.sh << 'EOF' #!/bin/bash # System-Check Script für Administratoren echo "=== System Check $(date) ===" echo "" echo "System Uptime:" uptime echo "" echo "Disk Usage:" df -h | head -10 echo "" echo "Memory Usage:" free -h echo "" echo "Load Average:" cat /proc/loadavg echo "" echo "Active Services:" systemctl list-units --state=active --type=service | head -10 echo "" echo "Failed Services:" systemctl list-units --state=failed EOF sudo chmod +x /etc/skel.templates/admin/Scripts/admin/system_check.sh # Template-Auswahlscript sudo tee /usr/local/bin/create_user_with_template << 'EOF' #!/bin/bash # Script zur Benutzer-Erstellung mit Template-Auswahl if [ "$EUID" -ne 0 ]; then echo "Dieses Script muss als root ausgeführt werden" exit 1 fi if [ $# -lt 2 ]; then echo "Usage: $0