CH-J Server Managerإدارة الخوادم عبر SSH
القائمة
المصدر المنشور

CH-J Server Manager

تصفّح الأدلة والملفات الخاصة بإصدار محدد من التطبيق.

تنزيل الشيفرة المصدرية بصيغة ZIP
CH-J / Server Manager 377 ملفات
core-20261019T111616Z-160a00bfcddc تاريخ الإضافة: · تاريخ البناء:
users-plugin.md تاريخ الإضافة: لم يُسجَّل التاريخ ٦٫٠ KB · 72 أسطر
الشيفرة تنزيل الملف
1# chj.users – správa účtů, sudo a SSH
3Plugin spravuje linuxové účty přes existující SSH relaci Core. Neexistuje obecné API pro root příkazy:
4Core spouští pouze pevný skript `src/main/users/remoteUsers.sh` s validovanými argumenty.
6## Oprávnění a sudo
7- `PrivilegedExecutor` (`src/main/sessions/privilegedExec.js`) je sdílená služba Core: rozliší root, sudo bez hesla,
8 sudo s heslem a účet bez sudo. Neprivilegované čtení běží bez sudo.
9- Heslo pro sudo se zapíše do stdin až po výzvě sudo (`-p` marker), nikdy do argumentů, logů ani úložiště.
10 Data a tajné údaje (heslo účtu, obsah authorized_keys) se posílají jako stdin rámce až po markeru READY.
11- Chybové kódy: `SUDO_PASSWORD_REQUIRED`, `SUDO_PASSWORD_INCORRECT`, `SUDO_NOT_PERMITTED`, `SUDO_TTY_REQUIRED`,
12 `SUDO_UNAVAILABLE`. Ověřený stav „bez sudo" se v relaci pamatuje a heslo se znovu nevyžaduje.
13- `requiretty` CH-J neobchází (PTY režim není implementován).
15## SSH politika
16- Jediný spravovaný soubor `/etc/ssh/sshd_config.d/01-chj-users.conf`; podporováno jen tam, kde `sshd_config`
17 načítá `sshd_config.d` před prvním `Match`. Hlavní konfigurace se nemění. Ručně upravený soubor CH-J nepřepíše.
18- Direktivy: `DenyUsers user`, `user@0.0.0.0/0`, `user@::/0`, `Match User` s `PasswordAuthentication`,
19 `KbdInteractiveAuthentication`, `PubkeyAuthentication`.
20- Postup: záloha (`/var/lib/chj-server-manager/users`), zápis, `sshd -t`, `sshd -T -C` pro cílový účet (IPv4/IPv6)
21 a účet relace, ověření účinku, reload (ne restart), u vlastního účtu testovací nové přihlášení, potvrzení.
22 EOF/odpojení nebo nepotvrzení do 120 s vrátí předchozí stav (watchdog na serveru).
24## Účet root
25- Root zůstává chráněný: nelze ho smazat ani měnit UID/GID, skupiny, shell či domovský adresář.
26- SSH klíče roota (`/root/.ssh/authorized_keys`) a SSH politiku lze spravovat z root relace nebo přes sudo.
27- `PermitRootLogin` se zapisuje do `Match User root` ve spravovaném souboru: `inherit` (výchozí, nic nezapisuje),
28 `no`, `prohibit-password` (doporučeno), `forced-commands-only`, `yes`. Ověření přes `sshd -T` akceptuje alias
29 `without-password`. U ostatních účtů se volba odmítne.
30- Povolení přihlášení roota heslem vyžaduje v UI zvláštní potvrzení (opsání jména) a v API `confirmRootPassword: true`,
31 jinak `USERS_ROOT_PASSWORD_CONFIRMATION_REQUIRED`.
33## Alpine a další systémy bez util-linux
34- `run_as` použije `runuser`, util-linux `setpriv` (jen s `--reuid`), jinak `su` s jedním ocitovaným příkazem
35 (BusyBox `su` předává argumenty jinak). Stav hesel čte z `/etc/shadow`, když `getent` nemá databázi shadow.
36- OpenRC se rozpozná před pidfile; po reloadu se čeká až 10 s na živý proces z pidfile (OpenSSH může po HUP běžet pod
37 novým PID).
38- Zamčený root (`!` v shadow) se na systémech bez PAM nepřihlásí ani klíčem – to je nastavení systému, ne CH-J.
39- Proxmox VE: `/root/.ssh/authorized_keys` je symlink do `/etc/pve`; CH-J ho z bezpečnostních důvodů nemění.
41## Testy
42- `npm test` – jednotkové testy (`test/usersPlugin.test.js`).
43- `CHJ_USERS_INTEGRATION=1 CHJ_USERS_IMAGE=chj-users-it-debian node --test test/usersIntegration.test.js` – destruktivní
44 testy v jednorázovém kontejneru (image z `test/fixtures/usersIntegration`, Debian i Rocky). Nikdy proti reálnému serveru.
45- `npx electron scripts/smokeUsersUi.js [adresář-snímků]` – UI smoke proti stejnému kontejneru
46 (ve VS Code spouštět bez proměnné `ELECTRON_RUN_AS_NODE`).
48## Windows (Windows 11, Windows Server)
49- Platforma se určuje ze systémových údajů: `uname -s`, jinak Windows registr / `Win32_OperatingSystem` přes
50 PowerShell (`src/main/sessions/platformDetect.js`). Výzva shellu ani název hostitele se nepoužívají.
51- Funguje s výchozím SSH shellem `cmd.exe`, Windows PowerShell 5.1 i PowerShell 7: Core posílá jen krátký
52 `powershell.exe -EncodedCommand` bootstrap, skript `src/main/users/windows/remoteUsers.ps1` a argumenty (JSON)
53 jdou přes stdin. Hesla se nikdy neobjeví v příkazové řádce.
54- Účty se spravují modulem `Microsoft.PowerShell.LocalAccounts` a identifikují podle SID; skupina Administrators
55 podle `S-1-5-32-544` (lokalizované názvy se nepoužívají). Windows nepoužívá sudo: administrativní operace vyžadují
56 SSH relaci se zvýšeným tokenem, CH-J neobchází UAC. Standardní účet dostane režim čtení.
57- Chráněné: vestavěné účty (RID < 1000), účet aktivní relace, poslední povolený člen Administrators.
58 Doménové a cloudové identity jsou jen pro čtení.
59- SSH: Windows nemá `sshd_config.d`; CH-J vkládá do `%ProgramData%\ssh\sshd_config` dvě označené sekce
60 (globální `DenyUsers` před první existující `Match`, vlastní `Match User` na konec). IPv4/IPv6 se omezuje vzory
61 `user@*.*.*.*` a `user@*:*`, protože Windows OpenSSH převádí `/` v `DenyUsers` na `\` (CIDR nelze použít).
62 `KbdInteractiveAuthentication` se nezapisuje.
63- `sshd -T -C` pro cizí účet funguje jen pod SYSTEM (jinak se zasekne), proto vyhodnocení běží v jednorázové
64 naplánované úloze SYSTEM z adresáře `%ProgramData%\CH-J\chj-users` (ACL jen SYSTEM a Administrators).
65- Aplikace změny: kandidát ← `sshd -t -f` + `sshd -T -f -C` ← naplánovaná úloha SYSTEM zazálohuje soubor i ACL,
66 zapíše změnu, restartuje `sshd` a čeká 120 s na potvrzení z **nového** SSH přihlášení; jinak sama obnoví zálohu
67 a restartuje `sshd` (funguje i po pádu CH-J). Bez údajů pro testovací přihlášení se změna neprovede.
68- Klíče: běžný účet `profil\.ssh\authorized_keys`, administrátoři sdílený `administrators_authorized_keys`
69 (upozornění, že klíč platí pro všechny správce). Úprava zachovává ostatní řádky i ACL (`ReplaceFile`).
70- Testy: `test/usersWindows.test.js` (jednotkové), `test/usersWindowsIntegration.test.js` (jen izolovaný testovací
71 stroj, proměnné `CHJ_USERS_WINDOWS_*`, `CHJ_USERS_WINDOWS_SLOW=1` pro rollback scénáře) a
72 `scripts/smokeUsersUiWindows.js` (UI).
SHA-25661348bf4c2dd523908657b00dc87058b3d4bf7ded30aac0b097280deec21c184

CH-J Proprietary Software License 1.14 · تُتاح الشيفرة المصدرية بموجب CH-J Proprietary Software License 1.14. وإتاحتها لا تغيّر شروط الترخيص ولا تمنح حقوقًا إضافية.

SHA-256 للأرشيفa9605c0870a223b6a8542bb0705edd51d8b04f3069582653417a8397fabcc09a
الملفات