CH-J Toolsspráva serverov nad SSH
Menu

Diaľkový editor - monitorovanie ukladania a latencie

Stiahnuť súbor

Jazyková revízia tohto prekladu prebieha. Pri nejasnostiach porovnajte anglický originál.

Koreňové príčiny

Predchádzajúci editor nahral svoj pracovný súbor do rodičovského adresára cieľa, ktorý často nemôže byť napísaný z účtu SSH v rámci /etc alebo /var. Premenovanie SFTP neobsahuje žiadnu povolenú cestu sudo, základný test konfliktu, overenie bezpečnostných metadát alebo spoľahlivé prepísanie sémantiky. Jeho chybový správca vymazal dočasnú kópiu, čím odstránil rekuperačný materiál aj v prípade, keď nebolo možné dokončiť.

Stav sedenia predtým odhalil len stav pripojenia. ICMP alebo overené meranie odozvy SSH nebolo napájajúce koncový ukazovateľ.

Uložiť protokol

  1. Pevný pomocník SSH otvorí pravidelný súbor s jedným odkazom pomocou deskriptora-relatívneho operácie a O_NOFOLLOW pre každú zložku trasy. Zachytáva obsah, SHA-256 hašh, zariadenie/inode, UID, GID, kompletné povoľovacie bity, nanosekundové modifikácia/zmena časov a všetky čitateľné rozšírené atribúty. Jadro overuje hash a dekóduje prísne UTF-8, zachovanie BOM. Každý dokument dostane nepriehľadné editId, scaped do svojho pluginu, terminálovej relácie a identity servera.
  2. Neprivilegovaná prípravná operácia vyrieši overené účty domov cez pwd.getpwuid(os.getuid()), vytvára $HOME/ch-j-sm/ s režimom 0700 a vytvára súkromný, exkluzívny recovery časopis. Nebezpečný domov, symlink pracovná plocha alebo pracovný priestor vlastnený iným účtom je odmietnutý.
  3. Jadro nahrá skrytý, náhodný 128-bit .tmp pracovný súbor cez SFTP exkluzívna tvorba (wx), režim 0600 a 60-sekundový kanál/čas nahrávania. Časopis obsahuje cieľovú, pôvodnú základnú a očakávanú pracovnú hash; neobsahuje žiadne údaje.
  4. One SSH exec vykonáva celú finalizáciu, voliteľne prostredníctvom existujúci exekútor sudo. Pomocník bezpečne otvorí a hašuje súkromnú pracovnú kópiu a spláchne ju. Zamkne pôvodnú inode, skontroluje jej východiskovú hodnotu, vytvorí exkluzívny cieľový súbor vedľa cieľa, zapíše všetok obsah, použije a overí metaúdaje, znovu skontroluje originál a spláchne výmenu.
  5. Rovnaký-directory os.replace atómovo nahrádza cieľ. Rodičia adresár je spláchnutý a finálna cesta, hash, inode a metadáta sú overené. Pôvodná trasa zostáva k dispozícii až do nahradenia. Pracovný súbor sa nikdy nepresúva cez súborové systémy a nie je odstránený finalizáciou.
  6. Potom, čo Core dostane overený úspech, samostatné vyčistenie znovu skontroluje finále obsah a bezpečnostné metaúdaje pred odstránením pracovného súboru a denníka. Zlyhanie čistenia stále hlási potvrdenú úsporu so systémom recoveryAvailable: true.

Zlyhalo nahrávanie, zlyhalo sudo, konflikt, chyba metadát alebo neúspešná náhrada udržuje originálny a akýkoľvek zinscenovaný materiál. Neúplné uploady sú identifikované ako také a nemožno ich získať späť ako kompletný upravený dokument. Stratená komunikácia SSH, chýbajúci stav odchodu, časové prestávky a neočakávané výsledky ukončenia sú hlásené ako unnown. Jadro blokuje ďalšie uložiť na neistý dokument; nie je automatická výmena retry.

Metaúdaje, oprávnenia a bezpečnostné hranice

Pomocník uchováva a overuje UID, GID a všetky POSIX povolené bity vrátane spustiteľných, setuid, setagidných a lepkavých bitov. Reprodukuje rozšírené atribúty Linux pre bajte, vrátane ACL POSIX, schopností a štítkov SELinux. Vlastníctvo a obsah súboru sú nastavené pred bezpečnostnými atribútmi, pretože zápisy/zápis môžu vymazať schopnosti alebo špeciálne dáta. Dedičné cieľové atribúty, ktoré chýbajú na origináli, sú odstránené. Čas zmeny odráža nový zápis a nie je skopírovaný z originálu.

Nečitateľný alebo nereprezentovateľný atribút ruší operáciu; metadáta nie sú potichu upustené. Podpisy IMA/EVM sa výslovne zamietajú, pretože kopírovanie obsahu/nezávislých podpisov integrity by ich zrušilo. Symlinky v cieľovej alebo domácej ceste, ťažko prepojené súbory a nepravidelné súbory sú odmietnuté. Nie je použitý žiadny in-place ani slabší SFTP prepísať backback.

Bežné zapisovateľné ukladá beh ako účet SSH. Chránené ukladanie vyžaduje explicitné { sudo: true }; sudo heslo je voliteľné pre bezheslo sudo. Heslá sú overené a odovzdávané len na kanáli stdin, nikdy vnútri príkazu, denník, pracovný súbor, logger alebo vzdialené chyba. Root SSH sedenia použiť existujúce priame root executor. Neúspešné povolenie ponecháva originál a pracovnú kópiu neporušenú. Všetky ukladá ako root (priamy koreň SSH alebo sudo) tiež odmieta cieľových adresárov / prekladateľov vlastnených alebo zapisovateľných inými účtami, alebo nesúci prístup ACL, skôr než dôverovať privilegované meno cesty kontrolované iným účtom.

Pevný pomocník beží so python3 -I -B: ignoruje používateľské Python cesty, pracovný adresár a balíky užívateľských stránok a nepíše žiadny bajtecode. Trasy a argumenty JSON sú shell-quoted v Core. Pluginy nikdy nedostávajú ľubovoľné rukoväte SSH alebo SFTP. Existujúce pieskovisko, CSP, manifest práva, overenie host-key a overovanie aktualizácie zostávajú v platnosti.

Plugin API a zostávajúce Monaco integrácie

Separátne distribuovaný Monaco/File Manager UI nie je prítomný v tejto pokladni. Jeho UI integrácia, sudo prompt, špinavé-buffer manipuláciu a preklady nemohli byť implementované alebo testované tu. Zväzok plugin zdroj je Hash & Checksum plugin. Nebol vynájdený žiadny náhradný zdroj správcu súborov.

Existujúce metódy sú naďalej dostupné. Metódy/možnosti doplnkovej látky sú vystavené pred načítaním a kontrolou povoleného času:

const opened = await chjPlugin.files.readText(sessionId, path);
// For a protected read, explicitly pass { sudo: true, sudoPassword }.

const result = await chjPlugin.files.saveText(sessionId, path, editor.getValue(), {
  editId: opened.editId,
  sudo: true,           // Include only after the user authorizes elevation.
  sudoPassword         // Omit for passwordless sudo; never persist this value.
});

if (result.ok && result.value.status === "saved") {
  // Mark this exact submitted editor version as saved. Later edits stay dirty.
} else {
  // Keep the Monaco model dirty. Translate result.error.code/status.
  // result.error.recoveryId/recoveryPath identify retained working material.
}

await chjPlugin.files.closeText(opened.editId);
const recovery = await chjPlugin.files.listRecovery(sessionId);
const copy = await chjPlugin.files.readRecovery(sessionId, recoveryId);
// Review copy.status and copy.text; open a fresh document before another save.
await chjPlugin.files.cleanupRecovery(sessionId, recoveryId);
// Cleanup rejects anything whose target is not currently confirmed.

Metódy zotavenia akceptujú voliteľný konečný argument { sudo: true, sudoPassword } pri kontrole cieľa vyžaduje zvýšenie. Zachovávajú overené užívateľské pracovné priestory aj keď sú spustené cez sudo. Časopisy prežijú reštart aplikácie a SSH sa znovu pripojí; obnova nikdy automaticky nezopakuje finalizáciu. Preskúmať obnovený nárazník proti čerstvo otvorenému cieľu pred explicitným uložením.

Stráže files.read čítajú, kontrolujú a rukoväte. Stráže files.write šetria a obnovujú čistenie. writeText stále odmieta pri zlyhaní existujúcich pluginov; saveText vracia štruktúrované obálky { ok, value/error }, pretože Electron kvapky vlastné vlastnosti na odmietnuté objekty chyby. Pôvodný tri-argument writeText môže použiť základ jedného otvoreného dokumentu. Viaceré živé dokumenty pre rovnakú cestu vyžadujú editId; nejednoznačné pôvodné hovory zlyhajú bezpečne namiesto výberu iného dokumentu ako základu. Moduly by mali uvoľniť nepoužité rukoväte.

Externé UI musí okamžite zobraziť ukladanie, udržiavať pufre špinavé pri zlyhaní, ponúkať sudo len po nedodržaní povolenia/preverenia, ukázať konflikty bez prepísania a ponúknuť obnovu po strate spojenia alebo neznámy výsledok. Tieto štáty musí preložiť v češtine, nemčine a angličtine. Navrhovaná štátna kópia:

State Czech German English
Saving Ukládání… Wird gespeichert… Saving…
Confirmed Uloženo Gespeichert Saved
Failure Uložení selhalo Speichern fehlgeschlagen Save failed
Sudo required Vyžadováno oprávnění sudo sudo-Autorisierung erforderlich Sudo authorization required
Conflict Původní soubor byl změněn Originaldatei wurde geändert Original file changed
Disconnected Spojení bylo přerušeno Verbindung unterbrochen Connection lost
Unknown Výsledek uložení není znám Speicherergebnis unbekannt Save result unknown
Recovery Obnova je dostupná Wiederherstellung verfügbar Recovery available

Definície nečinnosti a životný cyklus

Ping je latencia nahlásená skutočnou odpoveďou ICMP na vyriešený IP použitým SSH na strane klienta. Core sa odvoláva na platformu ping spustiteľné asynchrónne s pevným pole argument, bez požiadavky shell alebo správcu štartu. Linux, macOS (vrátane ping6) a Windows argumenty sa vyberajú osobitne. Zablokovaný ICMP, chýbajúci spustiteľný údaj, časový limit, neplatný výstup alebo odpoveď Windows iba na hornú hranicu, ako je napríklad <1ms, produkujú nedostupnú hodnotu, nie vynájdené číslo.

SSH RTT je monotónny performance.now() trvanie pevné true exec žiadosť nad existujúce overené SSH klienta. Zahŕňa nastavenie kanálov, spracovanie serverov a doručenie odpovedí; nie je to čistá sieť RTT alebo SSH prihlasovacie trvanie. Preložený indikátor nástroj vysvetľuje toto rozlíšenie.

Monitorovanie sa začne hneď, ako sa terminál pripojí. Sondy bežia súčasne a asynchrónne, s päťsekundovou žiadosťou/procesný časový limit. Ďalšia vzorka je naplánovaná na dvanásť sekúnd po dokončení predchádzajúcej vzorky, čím sa zabráni prekrývaniu. Odpojenie ruší ICMP, vymaže časovače, zruší kým SSH nebude fungovať a odstráni hodnoty. Zaznamenajte kontroly totožnosti, ktoré zabraňujú predchádzajúcemu publikovaniu odkazu po opätovnom pripojení. Zlyhanie ICMP nikdy nemení stav pripojenia SSH.

Latency cestuje v rámci existujúceho state udalosti / ssh:state IPC užitočné zaťaženie:

latency: { pingMs: 24.1, sshRttMs: 31.25, measuredAt: "…" }

Nedostupné čísla sú null. Kompaktný terminálový indikátor používa milisekundy, lokalizovaný nedostupný text a etikety Czech/German/English. Skrýva sa na odpojení. Nebola potrebná žiadna dodatočná schopnosť vykonať kresbu alebo žiadosť o IPC.

Validácia a prevádzkové limity

Užívateľ požiadal o zachovanie zmien v existujúcom pracovnom strome, v súčasnosti feature/hash-checksum-plugin; nebol vykonaný žiadny prepínač pobočky alebo nesúvisiace čistenie.

Súbory zmenené pre túto úlohu