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

