script-user-remove 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env bash
  2. # Remove a user from the server
  3. # Copyright 2021-2025 Bryan C. Roessler
  4. # Licensed under the Apache License, Version 2.0
  5. p="${BASH_SOURCE[0]%/*}"; [[ -r $p/script-functions ]] && . "$p"/script-functions || exit 1
  6. is_root
  7. echo "This script supports one optional argument, a username"
  8. if [[ $# -eq 1 ]]; then
  9. user="$1"
  10. else
  11. prompt user
  12. fi
  13. if ! id -u "$user" &>/dev/null; then
  14. echo "User $user does not exist"
  15. exit 1
  16. fi
  17. ask_ok "Remove user $user?" || exit 1
  18. # Kill user processes
  19. killall -u "$user"
  20. # Optional backup
  21. if ask_ok "Backup /home/$user?" && [[ -d /home/$user ]]; then
  22. backup_dir="/mnt/array/home-retired/$user"
  23. if [[ ! -d $backup_dir ]]; then
  24. btrfs subvolume create "$backup_dir" || exit 1
  25. fi
  26. rsync -av "/home/$user/" "$backup_dir/" || exit 1
  27. fi
  28. # Remove from Samba and subuid/subgid
  29. smbpasswd -x "$user"
  30. sed -i "/^$user:/d" /etc/subuid
  31. sed -i "/^$user:/d" /etc/subgid
  32. # Remove user and home directory
  33. if ! userdel -fr "$user"; then
  34. ask_ok "Userdel failed, kill processes again and retry?" || exit 1
  35. killall -u "$user" -s SIGKILL
  36. userdel -fr "$user"
  37. fi