Repository navigation
Expand file tree
/
Copy pathtool.json
More file actions
294 lines (294 loc) · 9.44 KB
/
Copy pathtool.json
File metadata and controls
294 lines (294 loc) · 9.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
{
"schemaVersion": 1,
"name": "tui-secure",
"binary": "tui-secure",
"tagline": "The machine's security posture, with the command behind every verdict",
"description": "A terminal UI for the security posture of one Linux machine. Eight probes — Secure Boot, the MAC layer, the firewall, sshd, pending updates, accounts, kernel hardening and listening ports — each answered `ok`, `warn`, `bad` or `unknown`, with a score across the lot.\n\nEvery verdict shows its work. Open a probe and you get the exact command that was run, the line it judged, the full raw output underneath, and a fix that names either the sibling tool that owns the change (`tui-firewall`, `tui-update`) or the command to run yourself.\n\nIt reads first and asks second. Nothing escalates beyond `sudo -n`, which never prompts, so a probe that needs root it cannot get degrades to `unknown` with the reason instead of hanging on a password. The fixes it offers are the one-liners it can preview in full: turning on ufw, firewalld or nftables, setting one kernel key or one sshd keyword through a drop-in, enabling the update timer, stopping the service behind an open port. A change that would leave nothing able to log in over ssh is refused.\n\nRun `tui-secure --demo` to drive a sample machine: every key works, every command is built and previewed for real, and nothing touches your system.",
"category": "security",
"homepage": "https://github.com/tui-tools/tui-secure",
"repo": "https://github.com/tui-tools/tui-secure",
"license": "MIT",
"platforms": [
"linux/amd64",
"linux/arm64"
],
"icon": "assets/icon.svg",
"logo": "assets/logo.png",
"screenshots": [
{
"path": "docs/screenshots/tui-secure-main.png",
"caption": "The posture: one row per probe, its verdict, and the score across all of them"
},
{
"path": "docs/screenshots/tui-secure-ssh.png",
"caption": "The sshd probe in full: the settings it judged, the command it read them with, and the raw output"
},
{
"path": "docs/screenshots/tui-secure-updates.png",
"caption": "Pending updates, whether a reboot is needed, and the state of the unattended update timer"
},
{
"path": "docs/screenshots/tui-secure-fix.png",
"caption": "A fix, previewed: setting one kernel hardening key and the drop-in that makes it persist"
},
{
"path": "docs/screenshots/tui-secure-filter.png",
"caption": "Filtering the probes by name, verdict or summary"
},
{
"path": "docs/screenshots/tui-secure-help.png",
"caption": "The help screen, generated from the same key table as the hint bar"
}
],
"keys": [
{
"key": "enter",
"action": "Open the probe: evidence, raw output and the fix"
},
{
"key": "a",
"action": "Apply an offered fix, previewed and confirmed first"
},
{
"key": "r",
"action": "Re-run every probe"
},
{
"key": "R",
"action": "Re-run the selected probe"
},
{
"key": "/",
"action": "Filter the probes by name, verdict or summary"
},
{
"key": "?",
"action": "Help"
},
{
"key": "q",
"action": "Quit"
}
],
"backends": [
{
"name": "systemd",
"binary": "systemctl",
"versionCommand": [
"systemctl",
"--version"
],
"versionRegex": "systemd ([0-9]+)",
"minimum": "245",
"searchPaths": [
"/usr/bin/systemctl",
"/bin/systemctl"
],
"features": [
{
"name": "journal-grep",
"since": "246"
}
],
"notes": [
{
"range": "<246",
"impact": "`journalctl --grep` does not exist, so the denial and failed-login counts are read by filtering the journal here instead of in journalctl, which is slower on a large journal"
}
],
"tested": [
"255",
"257",
"259",
"261"
]
},
{
"name": "openssh",
"binary": "sshd",
"versionCommand": [
"ssh",
"-V"
],
"versionRegex": "OpenSSH_([0-9]+\\.[0-9]+)",
"minimum": "8.2",
"searchPaths": [
"/usr/bin/ssh",
"/bin/ssh"
],
"features": [
{
"name": "sshd-test-config",
"since": "8.2"
}
],
"notes": [
{
"range": "<8.2",
"impact": "`sshd -T` predates several of the keywords this probe reads, so the settings come from parsing sshd_config and its drop-ins instead, which does not resolve Match blocks"
}
],
"tested": [
"9.6",
"9.9",
"10.2",
"10.5"
]
},
{
"name": "ufw",
"binary": "ufw",
"versionCommand": [
"ufw",
"--version"
],
"versionRegex": "ufw ([0-9][0-9.]*)",
"minimum": "0.36",
"searchPaths": [
"/usr/sbin/ufw",
"/sbin/ufw"
],
"notes": [
{
"range": "<0.36",
"impact": "`ufw status verbose` prints no default policy line, so the incoming and outgoing policies are reported as unknown and only the active state is judged"
}
],
"tested": [
"0.36.2"
]
},
{
"name": "firewalld",
"binary": "firewall-cmd",
"versionCommand": [
"firewall-cmd",
"--version"
],
"minimum": "0.9",
"searchPaths": [
"/usr/bin/firewall-cmd",
"/bin/firewall-cmd"
],
"tested": [
"2.3.2",
"2.4.4"
]
},
{
"name": "sbctl",
"binary": "sbctl",
"versionCommand": [
"sbctl",
"version"
],
"versionRegex": "([0-9]+\\.[0-9]+(\\.[0-9]+)?)",
"searchPaths": [
"/usr/bin/sbctl",
"/bin/sbctl"
],
"notes": [
{
"range": ">=0.1",
"impact": "sbctl is optional: without it the Secure Boot probe reports what `bootctl status` knows and says nothing about enrolled keys or signed files"
}
],
"tested": []
}
],
"install": {
"repo_url": "https://pkgs.tui.tools",
"pacman": {
"available": true,
"package": "tui-secure",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo pacman -S tui-secure",
"url": "https://pkgs.tui.tools/arch",
"note": "Upgrades then arrive with the rest of your system updates."
},
"aur": {
"available": false,
"package": "tui-secure-bin",
"repo": "aur",
"command": "paru -S tui-secure-bin",
"url": "https://aur.archlinux.org/packages/tui-secure-bin",
"note": "The -bin package installs the released static binary."
},
"apt": {
"available": true,
"package": "tui-secure",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo apt install tui-secure",
"url": "https://pkgs.tui.tools/deb",
"note": "Upgrades then arrive with the rest of your system updates."
},
"dnf": {
"available": true,
"package": "tui-secure",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo dnf install tui-secure",
"url": "https://pkgs.tui.tools/rpm",
"note": "Upgrades then arrive with the rest of your system updates."
},
"zypper": {
"available": false,
"package": "tui-secure",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo zypper install tui-secure",
"url": "https://pkgs.tui.tools/rpm",
"note": "The rpm repository is shared with dnf; zypper support is not tested yet."
},
"binary": {
"available": true,
"pattern": "tui-secure_{version}_linux_{arch}.tar.gz",
"command": "curl -fsSL https://github.com/tui-tools/tui-secure/releases/download/v{version}/tui-secure_{version}_linux_{arch}.tar.gz | tar -xz tui-secure\nsudo install -m0755 tui-secure /usr/local/bin/tui-secure",
"url": "https://github.com/tui-tools/tui-secure/releases",
"note": "One static binary. Verify it against checksums.txt from the same release."
},
"source": {
"available": true,
"command": "git clone https://github.com/tui-tools/tui-secure\ncd tui-secure && make build\nsudo install -m0755 bin/tui-secure /usr/local/bin/tui-secure",
"url": "https://github.com/tui-tools/tui-secure",
"note": "Needs Go 1.27 or newer."
}
},
"security": {
"needs_sudo": "Most probes read unprivileged. Escalation is `sudo -n`, which never prompts: it covers the reads only root can do (`ufw status`, `sshd -T`, /etc/shadow, `sudo -l`, the nftables ruleset) and the offered fixes. A probe that cannot escalate reports unknown with the reason.",
"preview_before_run": true,
"no_daemon": true,
"no_network": false,
"no_network_note": "The update probe runs the distribution's own update check (`checkupdates`, `apt-get -s upgrade`, `dnf check-update`), which contacts the configured package repositories. tui-secure itself opens no connection.",
"static_binary": true,
"signed_releases": true,
"config_paths": [
"/etc/tui-secure/config.toml",
"~/.config/tui-secure/config.toml"
]
},
"maintainers": [
{
"name": "Edimar Cardoso",
"github": "edimarlnx"
}
],
"since": "2026-08-30",
"keywords": [
"security",
"hardening",
"posture",
"secure-boot",
"selinux",
"apparmor",
"firewall",
"sshd",
"updates",
"sysctl",
"tui",
"bubbletea",
"ssh-hardening"
]
}