Нема описа

create_user.py 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import logging
  2. import sys
  3. import json
  4. import random
  5. import string
  6. import os
  7. # Set framework path
  8. sys.path.append(os.path.dirname(sys.argv[0]) + "/../framework")
  9. USER_FILE_PATH = "/var/ossec/api/configuration/admin.json"
  10. SPECIAL_CHARS = "@$!%*?&-_"
  11. try:
  12. from wazuh.rbac.orm import check_database_integrity
  13. from wazuh.security import (
  14. create_user,
  15. get_users,
  16. get_roles,
  17. set_user_role,
  18. update_user,
  19. )
  20. except ModuleNotFoundError as e:
  21. logging.error("No module 'wazuh' found.")
  22. sys.exit(1)
  23. def read_user_file(path=USER_FILE_PATH):
  24. with open(path) as user_file:
  25. data = json.load(user_file)
  26. return data["username"], data["password"]
  27. def db_users():
  28. users_result = get_users()
  29. return {user["username"]: user["id"] for user in users_result.affected_items}
  30. def db_roles():
  31. roles_result = get_roles()
  32. return {role["name"]: role["id"] for role in roles_result.affected_items}
  33. def disable_user(uid):
  34. random_pass = "".join(
  35. random.choices(
  36. string.ascii_uppercase
  37. + string.ascii_lowercase
  38. + string.digits
  39. + SPECIAL_CHARS,
  40. k=8,
  41. )
  42. )
  43. # assure there must be at least one character from each group
  44. random_pass = random_pass + ''.join([random.choice(chars) for chars in [string.ascii_lowercase, string.digits, string.ascii_uppercase, SPECIAL_CHARS]])
  45. random_pass = ''.join(random.sample(random_pass,len(random_pass)))
  46. update_user(
  47. user_id=[
  48. str(uid),
  49. ],
  50. password=random_pass,
  51. )
  52. if __name__ == "__main__":
  53. if not os.path.exists(USER_FILE_PATH):
  54. # abort if no user file detected
  55. sys.exit(0)
  56. username, password = read_user_file()
  57. # create RBAC database
  58. check_database_integrity()
  59. initial_users = db_users()
  60. if username not in initial_users:
  61. # create a new user
  62. create_user(username=username, password=password)
  63. users = db_users()
  64. uid = users[username]
  65. roles = db_roles()
  66. rid = roles["administrator"]
  67. set_user_role(
  68. user_id=[
  69. str(uid),
  70. ],
  71. role_ids=[
  72. str(rid),
  73. ],
  74. )
  75. else:
  76. # modify an existing user ("wazuh" or "wazuh-wui")
  77. uid = initial_users[username]
  78. update_user(
  79. user_id=[
  80. str(uid),
  81. ],
  82. password=password,
  83. )
  84. # disable unused default users
  85. for def_user in ['wazuh', 'wazuh-wui']:
  86. if def_user != username:
  87. disable_user(initial_users[def_user])