Files
admin/.wiki/concepts/vds-kzntsv-ssh-access.md
vitya fe41ee4422 backup(books-vds): daily 06:00 MSK pipeline to kreknin live 🟢
- scripts/books-vds-backup-daily-kreknin/ — run.sh + .env.example + README
- ES path.repo bootstrap (one-time stack edit, snapshot repo 'kreknin' registered)
- curl smtps://yandex:465 email (CRLF + Date headers, no msmtp dep on CentOS 7)
- StrictHostKeyChecking=yes + pre-populated known_hosts (CentOS 7 no accept-new)
- cron /etc/cron.d/books-vds-backup live, initial sync 4.87 GB in 13m28s, ntfy push sent
- wiki: entities/books-vds.md + sources/books-vds-backup-daily-kreknin-2026-05-25.md created
- wiki: concepts/books-ssh-access → vds-kzntsv-ssh-access (was lying about books on vds-kzntsv)
- .tasks/books-vds-backup-daily-kreknin.md closed 🟢 pending phone-side verify

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 09:37:16 +03:00

6.1 KiB
Raw Blame History

title: vds-kzntsv — SSH access audit + retained keys status: live tags: [vds, ssh, audit, infra, ops] related: ../entities/vds-kzntsv, ../sources/vds-kzntsv-bootstrap-2026-05-20

vds-kzntsv — SSH access (post-audit 2026-05-24)

Snapshot SSH-доступа к ../entities/vds-kzntsv (89.253.255.94 / vds.kzntsv.site) — наш infra-VDS (gitea, registry, ntfy, mssql, minio, owncloud, board-viewer).

Корректировка 2026-05-25: до этой даты документ ошибочно утверждал что на vds-kzntsv живёт shared books-инсталляция. Это неверно — books-стек на отдельном клиентском VDS 89.253.255.133 (см. ../entities/books-vds). vds-kzntsv хостит только нашу infra. Аудит ниже относится к vds-kzntsv SSH (наш infra-host), не к books VDS.

Создан 2026-05-24 в результате таски [books-ssh-audit-shared-vds] 🟢 — задача была названа в предположении что books на vds-kzntsv; reality по сути проверила infra SSH (что и должно было быть).

Retained keys

User Key (truncated) Owner Date added Reason Source machine
vitya ssh-ed25519 AAAA…ER/Z vitya@DESKTOP-NSEF0UK Виктор Кузнецов (core dev) 2026-05-20 (bootstrap) Core developer, sole administrator. Single key for both dev + ops. DESKTOP-NSEF0UK (home workstation)

Только 1 ключ. Никаких аналитических, бывших-сотрудников, неопознанных ключей не найдено в audit'е 2026-05-24.

Removed keys (audit cleanup)

Path Key Status Removed Note
/root/.ssh/authorized_keys ssh-ed25519 AAAA…ER/Z vitya@DESKTOP-NSEF0UK (duplicate vitya key) Cosmetic dead 2026-05-24 Был dead с момента bootstrap'аsshd -T показывает permitrootlogin no, root SSH disabled независимо от authorized_keys. Удалён для чистоты (backup в /root/.ssh/authorized_keys.bak-pre-ssh-audit-2026-05-24, но overwrite затёр содержимое — restoration trivial since key identical to vitya's main).

sshd hardening state

Effective config от sshd -T 2>&1 | grep -E "^(permitrootlogin|passwordauthentication|pubkeyauthentication|challengeresponseauthentication|kbdinteractiveauthentication)":

permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no

Note: raw grep /etc/ssh/sshd_config может показать PermitRootLogin yes / PasswordAuthentication yes — это default-config от пакета. Override'ы в /etc/ssh/sshd_config.d/*.conf (или drop-in от cloud-init) делают finальный config. Всегда проверять через sshd -T, не плоский config.

fail2ban state (2026-05-24)

  • systemctl is-active fail2banactive
  • Total failed attempts (since deploy): 2670
  • Total IPs ever banned: 37
  • Currently banned: 0 (бан выходит по TTL)
  • Configured jail: sshd (default debian jail)

Brute-force protection adequate; нет required action.

SSH login history (last 7 days)

sudo journalctl -u ssh -u sshd --since="7 days ago" | grep Accepted показал только vitya from 94.19.247.14 (мой home public IP). Никаких других source-IP — clean.

Books tenant-split — implications (исправлено 2026-05-25)

Spec tenant-split.md §«Двухуровневая изоляция пользователей → Infra-level» и аудит «не давать аналитикам Bookva SSH к VDS» — должны были применяться к books VDS, не к vds-kzntsv. Реальный books VDS = 89.253.255.133 (../entities/books-vds) — отдельный клиентский сервер. SSH-аудит на books VDS — отдельная follow-up задача.

vds-kzntsv (этот документ) — infra-VDS, не имеет отношения к books tenants. После Phase 4 books tenant-split:

  • books VDS (89.253.255.133) — текущий shared books → может остаться за Slovo (или Bookva, как пользователь решит).
  • vds-bookva-new — отдельный VDS у учредителя Bookva. См. .tasks/books-vds-bookva-bootstrap.md + books-dns-cutover-bookva.md.

vds-kzntsv остаётся infra-host независимо от tenant-split исхода.

How to add a new key (process)

  1. Получить от пользователя <key-type> <key-data> <comment> (full one-line pubkey).
  2. Verify identity: comment должен match human-readable identifier (alice@laptop, не just id_ed25519).
  3. Document before adding: append row to "Retained keys" table выше с rationale.
  4. Commit doc change (PR / direct push depending on grant).
  5. После doc-commit: ssh vitya@vds.kzntsv.site 'echo "<key-line>" >> ~/.ssh/authorized_keys'.
  6. Verify new user can login via new key.
  7. NEVER add key without doc update — иначе через 3 месяца забудем кто/зачем.

How to revoke a key

  1. Backup: sudo cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bak-$(date +%F).
  2. Edit ~/.ssh/authorized_keys — delete the line.
  3. Update doc — переместить row из "Retained" в новый "Revoked" section с datestamp + reason.
  4. Verify revoked key fails: ssh -i <revoked-key> vitya@vds.kzntsv.site returns publickey rejection.
  5. Commit doc change.

Cross-refs

  • vds-kzntsv — entity page (host details).
  • ../sources/vds-kzntsv-bootstrap-2026-05-20 — bootstrap chronology, contains initial sshd hardening setup.
  • victor/books .wiki/concepts/tenant-split.md §«Двухуровневая изоляция пользователей» — design context для этого аудита.
  • .tasks/books-ssh-audit-shared-vds.md — close-note + decisions.