mailcow-reset-admin.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env bash
  2. [[ -f mailcow.conf ]] && source mailcow.conf
  3. [[ -f ../mailcow.conf ]] && source ../mailcow.conf
  4. if [[ -z ${DBUSER} ]] || [[ -z ${DBPASS} ]] || [[ -z ${DBNAME} ]]; then
  5. echo "Cannot find mailcow.conf, make sure this script is run from within the mailcow folder."
  6. exit 1
  7. fi
  8. SKIP_CONFIRM=false
  9. if [[ "${1:-}" == "-y" || "${1:-}" == "--yes" ]]; then
  10. SKIP_CONFIRM=true
  11. shift # prevent $1 from bleeding into head -c${1:-16} below
  12. fi
  13. echo -n "Checking MySQL service... "
  14. if [[ -z $(docker ps -qf name=mysql-mailcow) ]]; then
  15. echo "failed"
  16. echo "MySQL (mysql-mailcow) is not up and running, exiting..."
  17. exit 1
  18. fi
  19. echo "OK"
  20. if [[ "$SKIP_CONFIRM" == "true" ]]; then
  21. response="yes"
  22. else
  23. read -r -p "Are you sure you want to reset the mailcow administrator account? [y/N] " response
  24. response=${response,,}
  25. fi
  26. if [[ "$response" =~ ^(yes|y)$ ]]; then
  27. echo -e "\nWorking, please wait..."
  28. random=$(</dev/urandom tr -dc _A-Z-a-z-0-9 2> /dev/null | head -c${1:-16})
  29. password=$(docker exec -it $(docker ps -qf name=dovecot-mailcow) doveadm pw -s SSHA256 -p ${random} | tr -d '\r')
  30. docker exec -it $(docker ps -qf name=mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM admin WHERE username='admin';"
  31. docker exec -it $(docker ps -qf name=mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM domain_admins WHERE username='admin';"
  32. docker exec -it $(docker ps -qf name=mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "INSERT INTO admin (username, password, superadmin, active) VALUES ('admin', '${password}', 1, 1);"
  33. docker exec -it $(docker ps -qf name=mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM tfa WHERE username='admin';"
  34. echo "
  35. Reset credentials:
  36. ---
  37. Username: admin
  38. Password: ${random}
  39. TFA: none
  40. "
  41. else
  42. echo "Operation canceled."
  43. fi