v-check-user-password 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/bash
  2. # info: check user password
  3. # options: USER PASSWORD [IP]
  4. #
  5. # The function verifies user password from file
  6. #----------------------------------------------------------#
  7. # Variable&Function #
  8. #----------------------------------------------------------#
  9. # Argument definition
  10. user=$1
  11. password=$2; HIDE=2
  12. ip=${3-127.0.0.1}
  13. # Includes
  14. source $VESTA/func/main.sh
  15. source $VESTA/conf/vesta.conf
  16. #----------------------------------------------------------#
  17. # Verifications #
  18. #----------------------------------------------------------#
  19. check_args '2' "$#" 'USER PASSWORD'
  20. validate_format 'user'
  21. # Checking user
  22. if [ ! -d "$VESTA/data/users/$user" ] && [ "$user" != 'root' ]; then
  23. echo "Error: password missmatch"
  24. echo "$DATE $TIME $user $ip failed to login" >> $VESTA/log/auth.log
  25. exit 9
  26. fi
  27. # Checking user password
  28. is_password_valid
  29. # Checking empty password
  30. if [[ -z "$password" ]]; then
  31. echo "Error: password missmatch"
  32. echo "$DATE $TIME $user $ip failed to login" >> $VESTA/log/auth.log
  33. exit 9
  34. fi
  35. #----------------------------------------------------------#
  36. # Action #
  37. #----------------------------------------------------------#
  38. # Parsing user's salt
  39. shadow=$(grep "^$user:" /etc/shadow)
  40. salt=$(echo "$shadow" |cut -f 3 -d \$)
  41. method=$(echo "$shadow" |cut -f 2 -d \$)
  42. if [ "$method" -eq '1' ]; then
  43. method='md5'
  44. else
  45. method='sha-512'
  46. fi
  47. if [ -z "$salt" ]; then
  48. echo "Error: password missmatch"
  49. echo "$DATE $TIME $user $ip failed to login" >> $VESTA/log/auth.log
  50. exit 9
  51. fi
  52. # Generating SHA-512
  53. hash=$($BIN/v-generate-password-hash $method $salt <<< $password)
  54. if [[ -z "$hash" ]]; then
  55. echo "Error: password missmatch"
  56. echo "$DATE $TIME $user $ip failed to login" >> $VESTA/log/auth.log
  57. exit 9
  58. fi
  59. # Checking hash
  60. result=$(grep "^$user:$hash:" /etc/shadow 2>/dev/null)
  61. if [[ -z "$result" ]]; then
  62. echo "Error: password missmatch"
  63. echo "$DATE $TIME $user $ip failed to login" >> $VESTA/log/auth.log
  64. exit 9
  65. fi
  66. #----------------------------------------------------------#
  67. # Vesta #
  68. #----------------------------------------------------------#
  69. # Logging
  70. echo "$DATE $TIME $user $ip successfully logged in" >> $VESTA/log/auth.log
  71. exit