CH-J Toolsserverio valdymas per SSH
Meniu

Nutolęs redaktoriaus įrašymas ir latentinis stebėjimas

Atsiųsti failą

Šio vertimo kalbinė peržiūra dar vyksta. Jei tekstas neaiškus, palyginkite su anglišku originalu.

Pagrindinės priežastys

Ankstesnis redaktorius įkėlė savo darbinį failą į tikslo pradinį katalogą, kuris dažnai negali būti įrašytas iš SSH paskyra /etc arba /var. SFTP pervardija pateikta ne autorizuotas sudo kelias, bazinis konflikto patikrinimas, saugumo metaduomenų patikrinimas ar patikimas perrašymas semantika. Jo klaidų tvarkytojas ištrynė laikiną kopiją, pašalinti atkūrimo medžiagą net tada, kai užbaigimas buvo neaiškus.

Seanso būsena, anksčiau atskleista tik prijungimo būsenoje. Nebuvo ICMP ar autentiško SSH atsako matavimo, kuriuo būtų galima įvertinti terminalą.

Įrašymo protokolas

  1. Fiksuotas SSH pagalbininkas atidaro reguliarų, vieno ryšio failą naudojant deskriptorių- santykinį operacijos ir O_NOFOLLOW kiekvienam kelio komponentui. Jame yra nurodytas turinys, SHA-256 hash, įrenginys/inode, UID, GID, pilni leidimo bitai, nanosekundžių keitimo/pakeitimo laikas ir visi perskaitomi išplėstiniai požymiai. Core patikrinti hash ir decodes griežtai UTF-8, išsaugant BOM. Kiekvienas dokumentas gauna nepermatomą editId, aprėpiantį jo įskiepį, terminalo seansą ir serverio tapatybę.
  2. Neprivilegijuota paruošimo operacija išsprendžia sąskaitos autentiškumą namuose per pwd.getpwuid(os.getuid()), sukuria $HOME/ch-j-sm/ su režimu 0700 ir sukuria privatų, išskirtinį atkūrimo žurnalą. Nesaugus namas, simlinkis darbo erdvė, ar darbo erdvė priklauso kitam paskyrai yra atmetami.
  3. Šerdis įkelia paslėptą, atsitiktinę 128- bitų .tmp darbo failas per SFTP kai: išskirtinis kūrimas (wx), režimas 0600 ir šešiasdešimt sekundžių kanalo/išsiuntimo pertrauka. Žurnale yra tikslas, pradinė išeitis ir numatoma darbo hash; jame nėra jokių duomenų.
  4. Vienas SSH exec atlieka visą užbaigtumą, pasirinktinai per esamos sudo vykdomosios operacijos. Padėjėjas saugiai atidaro, paleidžia privačią darbinę kopiją ir nuplauna ją. Jis užrakina originalų inode, tikrina savo pradinį lygį, sukuria išskirtinį paskirties failą šalia tikslo, rašo visą turinį, taiko ir tikrina metaduomenis, tikrina originalą vėl, ir nuplauna pakaitalą.
  5. Ta pati katalogo os.replace atominiu būdu pakeičia tikslą. Tėvas Aplankas yra nuplautas ir patikrinamas galutinis kelias, hash, inode ir metaduomenys. Pradinis kelias išlieka iki pakeitimo. Darbinis failas niekada neperkeltas per failų sistemas ir nėra pašalintas užbaigiant darbą.
  6. Po to, kai Core gauna patikrintą sėkmę, atskiras valymas pakartotinai patikrina galutinį turinį ir saugumo metaduomenis prieš pašalinant darbo failą ir žurnalą. Valymo klaida vis dar praneša apie patvirtintą įrašymą su recoveryAvailable: true.

Nepavyko įkelti, nepavyko sudo, konfliktas, metaduomenų klaida arba nepavyko pakeisti originalios ir bet kokios pakopinės medžiagos. Neišsamūs įkelimai yra identifikuojami kaip tokie ir negali būti susigrąžinti kaip išsamus redaguotas dokumentas. Prarasta SSH bendravimas, trūksta išėjimo būsena, laiko tarpai ir netikėti užbaigimo rezultatai yra pranešama kaip nežinomas, niekada neišgelbėjo. Core blokuoja kitą įrašyti nežinomą dokumentą; nėra automatinio pakeitimo bandyti.

Metaduomenys, privilegijos ir saugos ribos

Padėjėjas išsaugo ir tikrina UID, GID ir visi POSIX leidimų bitai, įskaitant vykdomąjį, setuid, setgid ir lipnus bits. Jis atkuria Linux išplėstas savybes baitui, įskaitant POSIX ACL, galimybes ir SELINux etiketes. Nuosavybė ir failo turinys yra nustatyti prieš saugumo atributus, nes rašo / rašyti gali aiškiai galimybes ar specialių leidimo bitai. Paveldėtos paskirties savybės, kurių nėra originale, pašalinamos. Pakeitimo laikas atspindi naują rašymą ir nėra nukopijuotas iš originalo.

Neįskaitomas arba nepakeičiamas požymis panaikina operaciją; metaduomenys nėra tyliai numesti. IMA/EVM parašai aiškiai atmetami, nes kopijavimo turinio ir (arba) jo sąsajų vientisumo parašų naudojimas jiems netektų galios. Symlinks taikinyje arba namų kelyje, sunkiai susieti failai ir nereguliarūs failai atmetami. Nėra vietoje arba silpnesnė SFTP Perrašyti atsarginę kopiją.

Įprastai įrašomas išsaugo kaip veikia SSH paskyra. Saugomi įrašai reikalauja aiškaus { sudo: true }; sudo slaptažodis yra neprivalomas beslapčio Sudo. Slaptažodžiai yra patvirtinti ir perduoti tik kanalo stdin, niekada viduje komandą, žurnalas, darbo failas, žurnalo ar nuotolinės klaidos. Šaknis SSH seansai naudoja esamą tiesioginį root egzekutorių. Nepavyko leisti originalo ir darbinės kopijos palikti nepaliestos. Visi išsaugo kaip root (tiesioginis šaknies SSH arba sudo) taip pat atmeta tikslinės aplankai / išradėjai, nuosavybės teise turintys ar įrašomi kitų sąskaitų, arba turinčios ACL prieigą, užuot pasitikėję privilegijuotu keliu, valdomu kitos paskyros.

Fiksuotas pagalbininkas veikia su python3 -I -B: jis ignoruoja vartotojo Python kelius, darbinį katalogą ir vartotojo svetainės paketus bei rašo be baiteko. Core kotiruojami keliai ir JSON argumentai. Įskiepiai niekada negauna savavališkų SSH exec ar SFTP rankenų. Esama smėlio dėžė, CSP, manifesto leidimai, mazgo rakto tikrinimas ir atnaujinimas tebenaudojamas.

Plugin API ir likusi Monaco integracija

Atskirai paskirstytas Monaco/Failų valdyklės UI nėra šiame čekyje. Jo UI integracija, sudo greitai, purvinas buferinis tvarkymo ir vertimai negali būti įgyvendintas ar išbandyti čia. Komplektuotas įskiepiai šaltinis yra Hash & Checksum įskiepiai. Neparašytas joks pakaitinis failų tvarkyklės šaltinis.

Esamus metodus galima taikyti ir toliau. Priedo metodus ir (arba) variantus veikia iš anksto įkrautas smėlio dėžės vanduo ir patikrinta važiavimo trukmė, kuriai suteiktas leidimas:

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.

Tikrinant taikinį, priimti neprivalomą galutinį { sudo: true, sudoPassword } argumentą reikia pakilimo. Jie išsaugo autentifikuotą vartotojo darbinę erdvę net kai ji vykdoma per sudo. Žurnalai išgyventi programą iš naujo ir SSH Atjunkite; atgavimas niekada automatiškai neatnaujina užbaigimo. Prieš aiškiai ją išsaugodami, iš naujo paruoškite regeneruotą buferį.

files.read sargybiniai nuskaito, tikrina ir tvarko paleidimą. files.write apsaugos priemonės išsaugomos ir atkūrimas valymas. writeText vis dar atmeta nesėkmę esantiems įskiepiams; saveText sugrąžina struktūrizuotą { ok, value/error } voką, nes Electron lašai naudoja pasirinktines savybes paneigtuose klaidų objektuose. Paveldėtas trijų argumentų writeText gali naudoti vieno atviro dokumento bazinę vertę. Keliems gyviems dokumentams tam pačiam keliui reikia editId; dviprasmiški senieji skambučiai nėra saugūs užuot pasirinkę kito dokumento pradinį dydį. Įskiepiai turėtų išleisti nepanaudotas rankenas.

Išorinis UI turi rodyti iš karto išsaugoti buferius nešvaru ant gedimo, pasiūlyti sudo tik po leidimo / tapatinimo nesėkmės, parodyti konfliktus be perrašymo, ir pasiūlyti atkūrimo po prisijungimo praradimo ar nežinomą rezultatą. Ji turi versti šias valstybes čekų, vokiečių ir anglų kalbomis. Siūloma valstybinė kopija:

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

Laisvumo apibrėžtys ir gyvavimo ciklas

Ping yra faktinio kliento ICMP aido atsakymo į išspręstą IP, kurį naudoja SSH. Pagrindinis nurodo platformos Ping vykdomoji asinchroniškai su fiksuoto argumentų masyvas, be korpuso ar administratoriaus paleidimo reikalavimas. Linux, macOS (įskaitant ping6) ir Windows argumentai parenkami atskirai. Užblokuotas ICMP, trūkstamas vykdomasis failas, laiko tarpas, netinkama išvestis arba tik viršutinė riba Windows atsakymas, pvz., <1ms, sukuria neprieinamą vertę, o ne išrastą numerį.

SSH RTT yra monotoninė performance.now() trukmė fiksuotas true exec užklausa dėl esamo autentiškumo SSH kliento. Tai apima kanalų sąranką, serverių apdorojimą ir atsako pristatymą; tai nėra grynas tinklas RTT arba SSH prisijungimo trukmė. Išverstas indikatorius tooltip paaiškina šį skirtumą.

Stebėsena pradedama, kai tik prisijungia terminalas. Probes paleisti vienu metu ir asinchroniškai, su penkių sekundžių užklausa / proceso laukimo. Kitas mėginys yra numatytas praėjus dvylikai sekundžių po ankstesnio bandinio užbaigimo, siekiant išvengti persidengimo. Atjungti abortus ICMP, išvalyti laikmačius, atšaukti laukiant SSH darbą ir išsiaiškinti reikšmes. Įrašų tapatumo tikrinimas neleidžia iš anksto prisijungti po pakartotinio prisijungimo. ICMP klaida niekada nepasikeitė SSH prijungimo būsena.

Platumas keliauja esamo state renginio / ssh:state IPC naudingosios apkrovos viduje:

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

Neprieinami skaičiai yra null. Kompaktiškas terminalo indikatorius naudoja milisekundes, lokalizuotą neprieinamą tekstą ir čechų/German/English etiketes. Jis slepiasi atsijungęs. Nereikėjo papildomų piešėjo vykdymo pajėgumų arba IPC prašymo.

Patvirtinimas ir eksploatacinės ribos

Naudotojas paprašė išlaikyti esamo darbinio medžio pakeitimus, šiuo metu feature/hash-checksum-plugin; filialų jungiklis ar nesusijęs valymas nebuvo atliktas.

Failai pakeisti šiam tikslui