50 lines
1.2 KiB
Bash
Executable File
50 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
# === CONFIG ===
|
|
POOL="tank"
|
|
HOMES_DATASET="${POOL}/ROOT/homes"
|
|
MOUNTROOT="/home"
|
|
|
|
# === ARGUMENT ===
|
|
USERNAME="$1"
|
|
if [ -z "$USERNAME" ]; then
|
|
echo "Użycie: $0 <username>"
|
|
exit 1
|
|
fi
|
|
|
|
# === CONFIRM ===
|
|
echo "Na pewno chcesz usunąć użytkownika $USERNAME? [y/N]"
|
|
read -r CONFIRM
|
|
[ "$CONFIRM" != "y" ] && echo "Anulowano." && exit 1
|
|
|
|
echo "[i] Zabijam wszystkie procesy użytkownika $USERNAME..."
|
|
pkill -KILL -u "$USERNAME" 2>/dev/null || true
|
|
|
|
sleep 1 # Dajmy kernelowi chwilę na posprzątanie
|
|
|
|
# === REMOVE FROM CGROUPS ===
|
|
echo "[i] Odłączam procesy z cgroup (jeśli coś zostało)..."
|
|
|
|
rmdir "/sys/fs/cgroup/users/${USERNAME}"
|
|
|
|
# === UNMOUNT HOME DIR ===
|
|
ZFS_DATASET="${HOMES_DATASET}/${USERNAME}"
|
|
|
|
if mountpoint -q "${MOUNTROOT}/${USERNAME}"; then
|
|
echo "[i] Odmontowuję katalog ${MOUNTROOT}/${USERNAME}..."
|
|
umount "${MOUNTROOT}/${USERNAME}" || umount -l "${MOUNTROOT}/${USERNAME}" || true
|
|
fi
|
|
|
|
# === DESTROY ZFS DATASET ===
|
|
echo "[i] Usuwam dataset ZFS: $ZFS_DATASET"
|
|
zfs destroy "$ZFS_DATASET"
|
|
|
|
# === REMOVE USER FROM SYSTEM ===
|
|
echo "[i] Usuwam użytkownika systemowego..."
|
|
deluser --remove-home "$USERNAME" 2>/dev/null || true
|
|
rm -rf "${MOUNTROOT:?}/${USERNAME}"
|
|
|
|
echo "[+] Użytkownik $USERNAME został w pełni usunięty."
|