raijin-server 0.2.33__py3-none-any.whl → 0.2.35__py3-none-any.whl
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.
Potentially problematic release.
This version of raijin-server might be problematic. Click here for more details.
- raijin_server/__init__.py +1 -1
- raijin_server/modules/minio.py +37 -4
- raijin_server/modules/ssh_hardening.py +51 -13
- {raijin_server-0.2.33.dist-info → raijin_server-0.2.35.dist-info}/METADATA +15 -3
- {raijin_server-0.2.33.dist-info → raijin_server-0.2.35.dist-info}/RECORD +9 -9
- {raijin_server-0.2.33.dist-info → raijin_server-0.2.35.dist-info}/WHEEL +0 -0
- {raijin_server-0.2.33.dist-info → raijin_server-0.2.35.dist-info}/entry_points.txt +0 -0
- {raijin_server-0.2.33.dist-info → raijin_server-0.2.35.dist-info}/licenses/LICENSE +0 -0
- {raijin_server-0.2.33.dist-info → raijin_server-0.2.35.dist-info}/top_level.txt +0 -0
raijin_server/__init__.py
CHANGED
raijin_server/modules/minio.py
CHANGED
|
@@ -124,6 +124,35 @@ def run(ctx: ExecutionContext) -> None:
|
|
|
124
124
|
"Modo de operacao (standalone/distributed)",
|
|
125
125
|
default="standalone",
|
|
126
126
|
)
|
|
127
|
+
is_distributed = mode.lower().startswith("d")
|
|
128
|
+
|
|
129
|
+
replicas = 1
|
|
130
|
+
resources_req_cpu = "250m"
|
|
131
|
+
resources_req_mem = "512Mi"
|
|
132
|
+
resources_lim_cpu = "500m"
|
|
133
|
+
resources_lim_mem = "1Gi"
|
|
134
|
+
|
|
135
|
+
if is_distributed:
|
|
136
|
+
replicas = typer.prompt(
|
|
137
|
+
"Qtd de pods MinIO (replicas)",
|
|
138
|
+
default="4",
|
|
139
|
+
)
|
|
140
|
+
resources_req_cpu = typer.prompt(
|
|
141
|
+
"CPU request por pod (distributed)",
|
|
142
|
+
default="500m",
|
|
143
|
+
)
|
|
144
|
+
resources_req_mem = typer.prompt(
|
|
145
|
+
"Memoria request por pod (distributed)",
|
|
146
|
+
default="1Gi",
|
|
147
|
+
)
|
|
148
|
+
resources_lim_cpu = typer.prompt(
|
|
149
|
+
"CPU limit por pod (distributed)",
|
|
150
|
+
default="1",
|
|
151
|
+
)
|
|
152
|
+
resources_lim_mem = typer.prompt(
|
|
153
|
+
"Memoria limit por pod (distributed)",
|
|
154
|
+
default="2Gi",
|
|
155
|
+
)
|
|
127
156
|
|
|
128
157
|
root_user = typer.prompt("Root user (admin)", default="minio-admin")
|
|
129
158
|
root_password = typer.prompt(
|
|
@@ -147,10 +176,11 @@ def run(ctx: ExecutionContext) -> None:
|
|
|
147
176
|
# Persistence
|
|
148
177
|
"persistence.enabled=true",
|
|
149
178
|
f"persistence.size={persistence_size}",
|
|
150
|
-
# Resources
|
|
151
|
-
"resources.requests.memory=
|
|
152
|
-
"resources.requests.cpu=
|
|
153
|
-
"resources.limits.memory=
|
|
179
|
+
# Resources
|
|
180
|
+
f"resources.requests.memory={resources_req_mem}",
|
|
181
|
+
f"resources.requests.cpu={resources_req_cpu}",
|
|
182
|
+
f"resources.limits.memory={resources_lim_mem}",
|
|
183
|
+
f"resources.limits.cpu={resources_lim_cpu}",
|
|
154
184
|
# Tolerations para control-plane
|
|
155
185
|
"tolerations[0].key=node-role.kubernetes.io/control-plane",
|
|
156
186
|
"tolerations[0].operator=Exists",
|
|
@@ -161,6 +191,9 @@ def run(ctx: ExecutionContext) -> None:
|
|
|
161
191
|
# NodeSelector
|
|
162
192
|
f"nodeSelector.kubernetes\\.io/hostname={node_name}",
|
|
163
193
|
]
|
|
194
|
+
|
|
195
|
+
if is_distributed:
|
|
196
|
+
values.append(f"replicas={replicas}")
|
|
164
197
|
|
|
165
198
|
# Console
|
|
166
199
|
if enable_console:
|
|
@@ -13,7 +13,19 @@ 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
|
-
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _current_non_root_user() -> str | None:
|
|
19
|
+
sudo_user = os.environ.get("SUDO_USER")
|
|
20
|
+
if sudo_user and sudo_user != "root":
|
|
21
|
+
return sudo_user
|
|
22
|
+
try:
|
|
23
|
+
import getpass
|
|
24
|
+
|
|
25
|
+
who = getpass.getuser()
|
|
26
|
+
return who if who != "root" else None
|
|
27
|
+
except Exception:
|
|
28
|
+
return None
|
|
17
29
|
|
|
18
30
|
|
|
19
31
|
def _user_exists(username: str) -> bool:
|
|
@@ -50,9 +62,26 @@ def _write_authorized_keys(username: str, content: str, ctx: ExecutionContext) -
|
|
|
50
62
|
run_cmd(["chown", "-R", f"{username}:{username}", str(ssh_dir)], ctx)
|
|
51
63
|
|
|
52
64
|
|
|
65
|
+
def _default_pubkey_path() -> Path:
|
|
66
|
+
user = _current_non_root_user()
|
|
67
|
+
if user:
|
|
68
|
+
candidate = Path(f"/home/{user}/.ssh/authorized_keys")
|
|
69
|
+
if candidate.exists():
|
|
70
|
+
return candidate
|
|
71
|
+
return Path.home() / ".ssh/authorized_keys"
|
|
72
|
+
|
|
73
|
+
|
|
53
74
|
def _load_public_key(path_input: str) -> str:
|
|
54
|
-
|
|
55
|
-
|
|
75
|
+
path = Path(path_input).expanduser()
|
|
76
|
+
if path.exists():
|
|
77
|
+
content = path.read_text().strip()
|
|
78
|
+
if content:
|
|
79
|
+
return content
|
|
80
|
+
typer.echo("Arquivo nao encontrado. Cole a chave publica completa (ssh-ed25519...).")
|
|
81
|
+
key = typer.prompt("Chave publica", default="")
|
|
82
|
+
if not key:
|
|
83
|
+
raise typer.BadParameter("Nenhuma chave publica fornecida.")
|
|
84
|
+
return key.strip()
|
|
56
85
|
|
|
57
86
|
|
|
58
87
|
def run(ctx: ExecutionContext) -> None:
|
|
@@ -62,25 +91,34 @@ def run(ctx: ExecutionContext) -> None:
|
|
|
62
91
|
typer.echo("Hardening de SSH em andamento...")
|
|
63
92
|
apt_install(["openssh-server", "fail2ban"], ctx)
|
|
64
93
|
|
|
65
|
-
username = typer.prompt("Usuario administrativo para SSH", default="
|
|
94
|
+
username = typer.prompt("Usuario administrativo para SSH", default="thor")
|
|
66
95
|
ssh_port = typer.prompt("Porta SSH", default="22")
|
|
67
96
|
sudo_access = typer.confirm("Adicionar usuario ao grupo sudo?", default=True)
|
|
68
|
-
|
|
69
|
-
|
|
97
|
+
current_user = _current_non_root_user()
|
|
98
|
+
default_extra = current_user if current_user and current_user != username else ""
|
|
99
|
+
extra_users_raw = typer.prompt(
|
|
100
|
+
"Usuarios adicionais (serao criados se nao existirem, separados por espaco)",
|
|
101
|
+
default=default_extra,
|
|
70
102
|
).strip()
|
|
71
103
|
pubkey_path = typer.prompt(
|
|
72
104
|
"Arquivo com chave publica ou authorized_keys existente",
|
|
73
|
-
default=str(
|
|
105
|
+
default=str(_default_pubkey_path()),
|
|
74
106
|
)
|
|
75
107
|
|
|
76
108
|
public_key = _load_public_key(pubkey_path)
|
|
77
|
-
allow_users = " ".join(part for part in [username, extra_users] if part).strip()
|
|
78
|
-
|
|
79
|
-
_ensure_user(username, ctx)
|
|
80
|
-
if sudo_access:
|
|
81
|
-
run_cmd(["usermod", "-aG", "sudo", username], ctx)
|
|
82
109
|
|
|
83
|
-
|
|
110
|
+
extra_users = [u for u in extra_users_raw.split() if u]
|
|
111
|
+
target_users: list[str] = []
|
|
112
|
+
for u in [username, *extra_users]:
|
|
113
|
+
if u not in target_users:
|
|
114
|
+
target_users.append(u)
|
|
115
|
+
allow_users = " ".join(target_users)
|
|
116
|
+
|
|
117
|
+
for user in target_users:
|
|
118
|
+
_ensure_user(user, ctx)
|
|
119
|
+
if user == username and sudo_access:
|
|
120
|
+
run_cmd(["usermod", "-aG", "sudo", user], ctx)
|
|
121
|
+
_write_authorized_keys(user, public_key, ctx)
|
|
84
122
|
|
|
85
123
|
config = f"""
|
|
86
124
|
# Arquivo gerenciado pelo raijin-server
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: raijin-server
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.35
|
|
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
|
|
@@ -79,18 +79,30 @@ python3 -m venv ~/.venvs/midgard
|
|
|
79
79
|
source ~/.venvs/midgard/bin/activate
|
|
80
80
|
pip install -U pip setuptools
|
|
81
81
|
|
|
82
|
-
# 2) Instalar a partir do
|
|
83
|
-
pip install -U raijin-server
|
|
82
|
+
# 2) Instalar a partir do PyPI (ou source)
|
|
83
|
+
pip install -U raijin-server==x.x.x
|
|
84
84
|
|
|
85
85
|
# 3) Uso com sudo preservando o venv
|
|
86
86
|
sudo -E ~/.venvs/midgard/bin/raijin-server --version
|
|
87
87
|
sudo -E ~/.venvs/midgard/bin/raijin-server validate
|
|
88
88
|
sudo -E ~/.venvs/midgard/bin/raijin-server full-install
|
|
89
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server menu
|
|
89
90
|
|
|
90
91
|
# 4) Quando terminar
|
|
91
92
|
deactivate
|
|
92
93
|
```
|
|
93
94
|
|
|
95
|
+
> **Após instalar:**
|
|
96
|
+
>
|
|
97
|
+
> Execute:
|
|
98
|
+
>
|
|
99
|
+
> ```bash
|
|
100
|
+
> pip install -U raijin-server==x.x.x
|
|
101
|
+
> sudo -E ~/.venvs/midgard/bin/raijin-server menu
|
|
102
|
+
> ```
|
|
103
|
+
>
|
|
104
|
+
> Isso garante que o menu principal do Raijin Server estará disponível no Ubuntu Server.
|
|
105
|
+
|
|
94
106
|
> Dica: se precisar reinstalar, remova o venv (`rm -rf ~/.venvs/midgard`), recrie e repita o passo 2. O `-E` no sudo mantém o venv ativo para o Python.
|
|
95
107
|
|
|
96
108
|
# 5. Rodar usando root preservando o venv
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
raijin_server/__init__.py,sha256=
|
|
1
|
+
raijin_server/__init__.py,sha256=Wa2eQSGUaft7BUQFSKQeBX5yVKrKfRVa7mfEzttqLg0,95
|
|
2
2
|
raijin_server/cli.py,sha256=2m7q1znMLbBdnUwN6oOUrCZXEqC2e7SfbjYkymbP4lQ,37884
|
|
3
3
|
raijin_server/config.py,sha256=QNiEVvrbW56XgvNn5-h3bkJm46Xc8mjNqPbvixXD8N0,4829
|
|
4
4
|
raijin_server/healthchecks.py,sha256=lzXdFw6S0hOYbUKbqksh4phb04lXgXdTspP1Dsz4dx8,15401
|
|
@@ -22,14 +22,14 @@ raijin_server/modules/kong.py,sha256=eDSagvEP9_BCs9pZ-pCVs1BDdlYOoJfY5PnUSiTvvgc
|
|
|
22
22
|
raijin_server/modules/kubernetes.py,sha256=9E6zV0zGQWZW92NVpxwYctpi-4JDmi6YzF3tKRI4HlU,13343
|
|
23
23
|
raijin_server/modules/loki.py,sha256=aNiUpnOFppZMXoQwYhn7IoPMzwUz4aHi6pbiqj1PRjc,5022
|
|
24
24
|
raijin_server/modules/metallb.py,sha256=uUuklc_RsQ-W2qDVRMQAxQm9HKGEqso444b1IwBpM6w,8554
|
|
25
|
-
raijin_server/modules/minio.py,sha256=
|
|
25
|
+
raijin_server/modules/minio.py,sha256=rHiyNs1wK2gxAMDUhxhN5zeh8nuyADlmueHiYhEyjL0,7213
|
|
26
26
|
raijin_server/modules/network.py,sha256=QRlYdcryCCPAWG3QQ_W7ld9gJgETI7H8gwntOU7UqFE,4818
|
|
27
27
|
raijin_server/modules/observability_dashboards.py,sha256=fVz0WEOQrUTF5rJ__Nu_onyBuwL_exFmysWMmg8AE9w,7319
|
|
28
28
|
raijin_server/modules/observability_ingress.py,sha256=Fh1rlFWueBNHnOkHuoHYyhILmpO-iQXINybSUYbYsHQ,5738
|
|
29
29
|
raijin_server/modules/prometheus.py,sha256=wT9jdcC-8vVysVKgMR5isGbxxpvGFPRf7fhMAGd9kJU,10761
|
|
30
30
|
raijin_server/modules/sanitize.py,sha256=_RnWn1DUuNrzx3NnKEbMvf5iicgjiN_ubwT59e0rYWY,6040
|
|
31
31
|
raijin_server/modules/secrets.py,sha256=d4j12feQL8m_4-hYN5FfboQHvBc75TFeGno3OzrXokE,9266
|
|
32
|
-
raijin_server/modules/ssh_hardening.py,sha256=
|
|
32
|
+
raijin_server/modules/ssh_hardening.py,sha256=Zd0dlylUBr01SkrI1CS05-0DB9xIto5rWH1bUVs80ow,5422
|
|
33
33
|
raijin_server/modules/traefik.py,sha256=crEYIqAidAhh_H93qIvCbTtJ7BjO-3ef77alLc_--Gg,3535
|
|
34
34
|
raijin_server/modules/velero.py,sha256=yDtqd6yUu0L5wzLCjYXqvvxB_RyaAoZtntb6HoHVAOo,5642
|
|
35
35
|
raijin_server/modules/vpn.py,sha256=hF-0vA17VKTxhQLDBSEeqI5aPQpiaaj4IpUf9l6lr64,8297
|
|
@@ -38,9 +38,9 @@ raijin_server/scripts/checklist.sh,sha256=j6E0Kmk1EfjLvKK1VpCqzXJAXI_7Bm67LK4ndy
|
|
|
38
38
|
raijin_server/scripts/install.sh,sha256=Y1ickbQ4siQ0NIPs6UgrqUr8WWy7U0LHmaTQbEgavoI,3949
|
|
39
39
|
raijin_server/scripts/log_size_metric.sh,sha256=Iv4SsX8AuCYRou-klYn32mX41xB6j0xJGLBO6riw4rU,1208
|
|
40
40
|
raijin_server/scripts/pre-deploy-check.sh,sha256=XqMo7IMIpwUHF17YEmU0-cVmTDMoCGMBFnmS39FidI4,4912
|
|
41
|
-
raijin_server-0.2.
|
|
42
|
-
raijin_server-0.2.
|
|
43
|
-
raijin_server-0.2.
|
|
44
|
-
raijin_server-0.2.
|
|
45
|
-
raijin_server-0.2.
|
|
46
|
-
raijin_server-0.2.
|
|
41
|
+
raijin_server-0.2.35.dist-info/licenses/LICENSE,sha256=kJsMCjOiRZE0AQNtxWqBa32z9kMAaF4EUxyHj3hKaJo,1105
|
|
42
|
+
raijin_server-0.2.35.dist-info/METADATA,sha256=D3rgG1t86vS6joqEpt82Xrm8cx_xnhDYE6lmi34eCbw,22770
|
|
43
|
+
raijin_server-0.2.35.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
44
|
+
raijin_server-0.2.35.dist-info/entry_points.txt,sha256=3ZvxDX4pvcjkIRsXAJ69wIfVmKa78LKo-C3QhqN2KVM,56
|
|
45
|
+
raijin_server-0.2.35.dist-info/top_level.txt,sha256=Yz1xneCRtsZOzbPIcTAcrSxd-1p80pohMXYAZ74dpok,14
|
|
46
|
+
raijin_server-0.2.35.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|