revoke_client.sh 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/bin/bash
  2. # Функция для логирования
  3. log() {
  4. logger -t "openvpn-revoke" -p user.info "$1"
  5. echo "$1" # Также выводим в консоль для обратной связи
  6. }
  7. # Проверка прав
  8. check_permissions() {
  9. if [[ $EUID -ne 0 ]]; then
  10. log "Error: This script must be run as root" >&2
  11. exit 1
  12. fi
  13. }
  14. if [ $# -ne 3 ]; then
  15. log "Usage: $0 <service_name> <rsa_dir> <username>"
  16. exit 1
  17. fi
  18. check_permissions
  19. SRV_NAME="${1}"
  20. RSA_DIR="${2}"
  21. USERNAME="${3}"
  22. log "Starting certificate revocation for $USERNAME by user $ORIGINAL_USER"
  23. # Проверяем существование директории RSA
  24. if [ ! -d "$RSA_DIR" ]; then
  25. log "Error: RSA directory not found: $RSA_DIR"
  26. exit 1
  27. fi
  28. # Переходим в директорию RSA
  29. cd "$RSA_DIR" || exit 1
  30. # Проверяем наличие easyrsa
  31. if [ ! -f "./easyrsa" ]; then
  32. log "Error: easyrsa not found in $RSA_DIR"
  33. exit 1
  34. fi
  35. # Проверяем существование сертификата
  36. if [ ! -f "./pki/issued/${USERNAME}.crt" ]; then
  37. log "Error: Certificate for user $USERNAME not found"
  38. exit 1
  39. fi
  40. # Проверяем, не отозван ли уже сертификат
  41. if grep -q "/CN=${USERNAME}" ./pki/index.txt | grep -q "R"; then
  42. log "Error: Certificate for $USERNAME is already revoked"
  43. exit 1
  44. fi
  45. # Отзываем сертификат
  46. log "Revoking certificate for user: $USERNAME"
  47. ./easyrsa --batch revoke "$USERNAME"
  48. # Проверяем успешность отзыва
  49. if [ $? -eq 0 ]; then
  50. log "Successfully revoked certificate for $USERNAME"
  51. # Генерируем CRL (Certificate Revocation List)
  52. log "Generating CRL..."
  53. ./easyrsa --batch gen-crl
  54. if [ $? -eq 0 ]; then
  55. log "CRL generated successfully"
  56. chown nobody:nogroup -R "$RSA_DIR/pki/issued/"
  57. chown nobody:nogroup -R "$RSA_DIR/pki/crl.pem"
  58. chmod 640 "${RSA_DIR}"/pki/issued/*.crt
  59. # Рестартуем сервис
  60. log "Restarting service: $SRV_NAME"
  61. systemctl restart "${SRV_NAME}"
  62. if [ $? -eq 0 ]; then
  63. log "Service $SRV_NAME restarted successfully"
  64. log "Certificate revocation completed for $USERNAME"
  65. exit 0
  66. else
  67. log "Error: Failed to restart service $SRV_NAME"
  68. exit 1
  69. fi
  70. else
  71. log "Error: Failed to generate CRL"
  72. exit 1
  73. fi
  74. else
  75. log "Error: Failed to revoke certificate for $USERNAME"
  76. exit 1
  77. fi