Fix accidental public-site lockout; document credential audit
A stray /var/www/html/.htaccess (dated 2025-02-18, predating everything else in TODO.md) was silently requiring HTTP Basic Auth for jayfield.org and www.jayfield.org's shared DocumentRoot, 401ing every real visitor to the intentionally-public static site. Removed (backed up, not deleted). Also adds a README table auditing which public hostnames do/don't require credentials, prompted by checking this.
This commit is contained in:
@@ -236,6 +236,20 @@ endpoint instead of a bespoke Apache-WebDAV + SFTP-upload pipeline:
|
|||||||
uses them anymore — reversible with `passwd -u` if SFTP is ever needed
|
uses them anymore — reversible with `passwd -u` if SFTP is ever needed
|
||||||
again.
|
again.
|
||||||
|
|
||||||
|
## Public access / authentication overview
|
||||||
|
|
||||||
|
Audited 2026-07-20 — which public hostnames require credentials:
|
||||||
|
|
||||||
|
| Host | Requires credentials? | Notes |
|
||||||
|
|---|---|---|
|
||||||
|
| `jayfield.org` / `www.jayfield.org` | No (intentionally public static site) | Was accidentally 401'ing every visitor via a stray `.htaccess` — fixed, see `TODO.md` |
|
||||||
|
| `dyndns.jayfield.org` | Yes — HTTP Basic Auth | Vhost-level `<Directory>` block, intentional |
|
||||||
|
| `mail.jayfield.org` | N/A — root is `403` (no content served there) | |
|
||||||
|
| `mail.jayfield.org/rspamd` | Yes — rspamd's own login page | |
|
||||||
|
| `cloud.jayfield.org` (Nextcloud) | Yes — redirects to `/login` | |
|
||||||
|
| `portainer.jayfield.org` | Yes — admin account already initialized (`/api/users/admin/check` → `204`, no open setup wizard) | |
|
||||||
|
| `web.jayfield.org` | No | Currently just the stock nginx welcome page (no real content deployed yet), so nothing sensitive is exposed — but worth revisiting before real content goes there if it's meant to stay public |
|
||||||
|
|
||||||
## Open items / known quirks
|
## Open items / known quirks
|
||||||
|
|
||||||
- **Intranet migration from `vlda-01` (files, Gitea, Jellyfin, Dogecoin
|
- **Intranet migration from `vlda-01` (files, Gitea, Jellyfin, Dogecoin
|
||||||
|
|||||||
@@ -3,6 +3,27 @@
|
|||||||
Outstanding hardening items (see `README.md` for the full service overview).
|
Outstanding hardening items (see `README.md` for the full service overview).
|
||||||
Nothing here is urgent; all are low-risk, no-downtime changes.
|
Nothing here is urgent; all are low-risk, no-downtime changes.
|
||||||
|
|
||||||
|
- [x] **Public static site (`jayfield.org`/`www.jayfield.org`) was 401'ing every visitor** — done 2026-07-20
|
||||||
|
Found while auditing which services are reachable without credentials:
|
||||||
|
a stray `/var/www/html/.htaccess` (`AuthType Basic`, same
|
||||||
|
`AuthName "Restricted Content"`/`AuthUserFile /etc/apache2/.htpasswd`
|
||||||
|
as the intentional `dyndns.jayfield.org` protection) was silently
|
||||||
|
requiring login for the DocumentRoot both `jayfield.org` and
|
||||||
|
`www.jayfield.org` share — `/var/www` has `AllowOverride all`, so it
|
||||||
|
took effect with no vhost-level directive needed. File was dated
|
||||||
|
2025-02-18 (`index.html`/`apache.html` themselves are from 2022) —
|
||||||
|
predates every other change in this doc by well over a year, almost
|
||||||
|
certainly a forgotten leftover rather than intentional, and
|
||||||
|
contradicts `README.md`'s own description of both as a public static
|
||||||
|
site.
|
||||||
|
Fixed: moved to `/root/removed-configs-backup/htaccess-var-www-html.<timestamp>`
|
||||||
|
(recoverable, not deleted — same convention as this file's other
|
||||||
|
removed-config backups). No Apache reload needed (`.htaccess` is
|
||||||
|
read per-request). Verified both `jayfield.org` and
|
||||||
|
`www.jayfield.org` now return `200` with real page content;
|
||||||
|
`dyndns.jayfield.org`'s own (intentional, vhost-level) Basic Auth is
|
||||||
|
untouched and still returns `401` without credentials.
|
||||||
|
|
||||||
- [x] **Lock down the dyndns TSIG key file permissions** — done 2026-07-19
|
- [x] **Lock down the dyndns TSIG key file permissions** — done 2026-07-19
|
||||||
`/etc/bind/dyndns.jayfield.org.key` was `644` (world-readable), holding
|
`/etc/bind/dyndns.jayfield.org.key` was `644` (world-readable), holding
|
||||||
the shared secret that authenticates dynamic DNS updates for
|
the shared secret that authenticates dynamic DNS updates for
|
||||||
|
|||||||
Reference in New Issue
Block a user