slogan3

Maak een Bash- of PowerShell-script voor gebruikersactiviteit logging en analyse

description

Door dit script te implementeren, kan ik beter inzicht krijgen in gebruikersgedrag, beveiligingsmaatregelen verbeteren en gebruikers toegang optimaliseren op basis van daadwerkelijk gebruikspatronen.

prompt

try_prompt

Help me een Bash- of PowerShell-script te ontwikkelen dat gebruikersactiviteit op mijn server logt en analyseert op toegangspatronen. Geef alsjeblieft de soorten activiteiten op die gelogd moeten worden: {{activiteit_typen} ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat gebruikersactiviteit logt, analyseert op toegangspatronen en een rapport genereert over de afgelopen week. Het script bevat ook opties voor aangepaste logging voor gebruikers met de rol 'admin'. Omdat je mogelijk op een Linux-server werkt, is Bash geschikt. Als je PowerShell op Windows prefereert, kan ik dat ook aanpassen. --- **Bash-script voor gebruikersactiviteit logging en analyse** ```bash #!/bin/bash # Configuratie LOGDIR="/var/log/gebruiker_activiteiten" LOGFILE="$LOGDIR/gebruikers_log_$(date +%Y%m%d).log" RAPPORT_DIR="/tmp/rapport" mkdir -p "$LOGDIR" mkdir -p "$RAPPORT_DIR" # Aanpasbare loggingopties LOG_ADMIN=true # Zet op false om admin-activiteiten niet te loggen LOG_USERS=true # Zet op false om niet-Admins te loggen # Functie om activiteiten te loggen log_activiteit() { local gebruiker=$1 local actie=$2 local rol=$3 # bijvoorbeeld 'admin' of 'gebruiker' local timestamp=$(date '+%Y-%m-%d %H:%M:%S') # Alleen loggen als de rol overeenkomt met de instellingen if { [ "$rol" = "admin" ] && [ "$LOG_ADMIN" = true ]; } || { [ "$rol" != "admin" ] && [ "$LOG_USERS" = true ]; }; then echo "$timestamp | $gebruiker | $actie | $rol" >> "$LOGFILE" fi } # Simulatie van logging (voor echte toepassing, vervang dit door echte logging van login-activiteiten) # Bijvoorbeeld, door PAM- of SSH logs te parsen # Voorbeeld: handmatig logs toevoegen log_activiteit "johndoe" "login" "gebruiker" log_activiteit "admin1" "login" "admin" log_activiteit "janedoe" "logout" "gebruiker" # Analyse van activiteit voor de afgelopen week # Gebruik `date` om datums te bepalen START_DATE=$(date -d "7 days ago" +%Y-%m-%d) END_DATE=$(date +%Y-%m-%d) # Filter de logs op de afgelopen week awk -v start="$START_DATE" -v end="$END_DATE" ' $1 >= start && $1 <= end {print} ' "$LOGFILE" > "$RAPPORT_DIR/activiteiten_week.txt" # Trends en afwijkingen # Bijvoorbeeld, aantal logins per dag echo "Aantal logins per dag:" > "$RAPPORT_DIR/rapport.txt" awk -F" | " ' $3 == "login" {count[$1]++} END { for (day in count) { print day ": " count[day] } } ' "$RAPPORT_DIR/activiteiten_week.txt" >> "$RAPPORT_DIR/rapport.txt" # Detecteer afwijkingen: bijvoorbeeld plotselinge toename # (Deze is eenvoudig; voor complexere analyses kan je Python gebruiken) # Bijvoorbeeld, dagen met meer dan 2 keer het gemiddelde awk ' {count[$1]++} END { total=0; n=0 for (day in count) { total+=count[day] n++ } avg=total/n print "Gemiddelde logins per dag: " avg for (day in count) { if (count[day] > 2*avg) { print "Afwijking op " day ": " count[day] " logins" } } } ' "$RAPPORT_DIR/activiteiten_week.txt" >> "$RAPPORT_DIR/rapport.txt" # Samenvatting echo "Rapport over gebruikersactiviteit van de afgelopen week:" >> "$RAPPORT_DIR/rapport.txt" cat "$RAPPORT_DIR/rapport.txt" # Optioneel: verstuur rapport via email of sla op op server # Bijvoorbeeld: # mail -s "Gebruikersactiviteit Rapport" admin@voorbeeld.com < "$RAPPORT_DIR/rapport.txt" ``` --- **Wat doet dit script?** - Logt activiteiten (bijvoorbeeld login/logout) inclusief tijd, gebruiker, actie en rol. - Berekent trends zoals aantal logins per dag. - Detecteert mogelijke afwijkingen (bijvoorbeeld dagen met abnormaal veel logins). - Heeft opties om logging voor admin-rollen wel of niet te activeren. **Aanpassingen en uitbreidingen:** - Verbind met echte logs (bijv. `/var/log/auth.log` op Linux) door logbestanden te parsen. - Voeg meer activiteiten toe (bijv. bestandsaccess, commando-uitvoeringen). - Verbeter afwijkingsdetectie met meer geavanceerde statistieken of machine learning. Als je een PowerShell-script nodig hebt voor Windows, laat het me weten!
provider: deepseek
model: deepseek-chat
Hier is een uitgebreid Bash-script dat gebruikersactiviteit logt en analyseert: ```bash #!/bin/bash # Configuratie LOG_DIR="/var/log/user_activity" REPORT_DIR="/var/reports/user_activity" ADMIN_USERS=("root" "admin" "sudoers") # Functie om directory structuur aan te maken setup_directories() { sudo mkdir -p "$LOG_DIR" "$REPORT_DIR" sudo chmod 755 "$LOG_DIR" "$REPORT_DIR" } # Functie om login activiteiten te loggen log_login_activity() { local user=$1 local timestamp=$(date '+%Y-%m-%d %H:%M:%S') local source_ip=$(who | grep "$user" | awk '{print $5}' | sed 's/[()]//g') local log_entry="$timestamp - LOGIN - User: $user - IP: $source_ip" # Controleer of gebruiker admin is voor uitgebreidere logging if [[ " ${ADMIN_USERS[@]} " =~ " ${user} " ]]; then log_entry="$log_entry - ROLE: ADMIN - COMMAND: $(ps -u $user -o cmd --no-headers | head -1)" fi echo "$log_entry" | sudo tee -a "$LOG_DIR/login_activity.log" } # Functie om real-time monitoring op te zetten setup_monitoring() { # Monitor login activiteiten via utmp/wtmp while true; do who | while read line; do user=$(echo "$line" | awk '{print $1}') if [[ ! -f "$LOG_DIR/last_login_$user" ]] || \ [[ "$(stat -c %Y "$LOG_DIR/last_login_$user" 2>/dev/null)" -lt $(date -d '1 minute ago' +%s) ]]; then log_login_activity "$user" touch "$LOG_DIR/last_login_$user" fi done sleep 60 done & } # Functie om rapport te genereren voor afgelopen week generate_weekly_report() { local report_file="$REPORT_DIR/weekly_report_$(date +%Y%m%d).txt" local start_date=$(date -d '7 days ago' '+%Y-%m-%d') local end_date=$(date '+%Y-%m-%d') echo "=== WEKELIJKS GEBRUIKERSACTIVITEITEN RAPPORT ===" | sudo tee "$report_file" echo "Periode: $start_date tot $end_date" | sudo tee -a "$report_file" echo "" | sudo tee -a "$report_file" # Basis statistieken echo "--- ALGEMENE STATISTIEKEN ---" | sudo tee -a "$report_file" local total_logins=$(sudo grep -c "LOGIN" "$LOG_DIR/login_activity.log" 2>/dev/null || echo "0") echo "Totaal aantal logins: $total_logins" | sudo tee -a "$report_file" # Unieke gebruikers local unique_users=$(sudo grep "LOGIN" "$LOG_DIR/login_activity.log" 2>/dev/null | \ awk -F'User: ' '{print $2}' | awk '{print $1}' | sort -u | wc -l) echo "Unieke gebruikers: $unique_users" | sudo tee -a "$report_file" # Login trends per dag echo "" | sudo tee -a "$report_file" echo "--- LOGIN TRENDS PER DAG ---" | sudo tee -a "$report_file" sudo grep "LOGIN" "$LOG_DIR/login_activity.log" 2>/dev/null | \ awk '{print $1}' | sort | uniq -c | while read count date; do echo "$date: $count logins" | sudo tee -a "$report_file" done # Admin specifieke statistieken echo "" | sudo tee -a "$report_file" echo "--- ADMIN ACTIVITEITEN ---" | sudo tee -a "$report_file" for admin in "${ADMIN_USERS[@]}"; do local admin_logins=$(sudo grep -c "User: $admin" "$LOG_DIR/login_activity.log" 2>/dev/null || echo "0") echo "Admin $admin: $admin_logins logins" | sudo tee -a "$report_file" done # Detectie afwijkend gedrag echo "" | sudo tee -a "$report_file" echo "--- AFWIJKINGEN DETECTIE ---" | sudo tee -a "$report_file" detect_anomalies | sudo tee -a "$report_file" echo "Rapport gegenereerd: $report_file" } # Functie voor anomalie detectie detect_anomalies() { # Detecteer ongebruikelijke login tijden (bijv. buiten kantooruren) echo "Ongebruikelijke login tijden:" sudo grep "LOGIN" "$LOG_DIR/login_activity.log" 2>/dev/null | \ while read line; do hour=$(echo "$line" | awk '{print $2}' | cut -d: -f1) if [[ $hour -lt 6 ]] || [[ $hour -gt 22 ]]; then echo " Nachtelijke login: $line" fi done # Detecteer meerdere failed logins echo "" echo "Failed login pogingen:" sudo lastb | head -20 2>/dev/null || echo " Geen failed login data beschikbaar" } # Functie om logging niveau aan te passen adjust_logging_level() { local role=$1 local level=$2 case $level in "minimal") if [[ "$role" == "admin" ]]; then ADMIN_USERS=("root") # Alleen root voor minimale logging fi ;; "standard") # Standaard configuratie behouden ;; "verbose") if [[ "$role" == "admin" ]]; then # Voeg extra admin gebruikers toe voor uitgebreide logging ADMIN_USERS+=("wheel" "operator") fi ;; esac echo "Logging niveau aangepast voor $role naar $level" } # Hoofdscript case "${1:-}" in "setup") setup_directories setup_monitoring echo "Monitoring systeem opgezet" ;; "report") generate_weekly_report ;; "adjust-logging") adjust_logging_level "$2" "$3" ;; *) echo "Usage: $0 {setup|report|adjust-logging}" echo " setup - Initialiseer monitoring systeem" echo " report - Genereer wekelijks rapport" echo " adjust-logging <role> <level> - Pas logging niveau aan" echo " roles: admin" echo " levels: minimal, standard, verbose" ;; esac ``` **Gelogde activiteiten:** - Gebruikerslogins (inclusief timestamp en IP-adres) - Admin-specifieke activiteiten (extra command logging) - Failed login pogingen (via lastb) **Aanpasbare logging opties:** - `minimal`: Alleen basis login informatie - `standard`: Standaard logging met IP en timestamp - `verbose`: Uitgebreide logging inclusief uitgevoerde commando's **Gebruik:** 1. Script uitvoerbaar maken: `chmod +x user_monitoring.sh` 2. Systeem opzetten: `sudo ./user_monitoring.sh setup` 3. Rapport genereren: `sudo ./user_monitoring.sh report` 4. Logging aanpassen: `sudo ./user_monitoring.sh adjust-logging admin verbose` **Rapport features:** - Login trends per dag - Unieke gebruikers statistieken - Admin-specifieke activiteiten - Anomalie detectie (nachtelijke logins, failed attempts) Het script maakt gebruik van bestaande system logs en voegt extra monitoring toe voor gedetailleerde gebruikersactiviteit tracking.