CH-J Toolsupravljanje strežnikov prek SSH
Meni

Spremljanje varčevanja in zamud

Prenesi datoteko

Jezikovni pregled tega prevoda še poteka. Ob nejasnostih primerjajte z angleškim izvirnikom.

Koreninski vzroki

Prejšnji urejevalnik je naložil delovno datoteko v matično imenik cilja, ki je pogosto ni mogoče napisati s strani SSH račun na podlagi /etc ali /var. SFTP preimenovanje ni podalo dovoljene poti sudo, izhodiščne preverjanje konfliktov, varnostno preverjanje metapodatov ali zanesljivo prepisovanje semantike. Njen upravljalec napak je izbrisal začasno kopijo, odstranjevanje materiala za izterjavo tudi ko je bilo dokončanje negotovo.

Status seje je pred tem razkril samo stanje povezave. Ni bilo nobenega ICMP ali avtentifikacije SSH merjenje odziva, ki meri kazalnik za terminal.

Shrani protokol

  1. A fiksna SSH pomočnik odpre redno, eno povezavo datoteko z uporabo deskriptor-relative operacije in O_NOFOLLOW za vsako komponento poti. Zaznava vsebino. SHA-256 hash, naprava/inode, UID, GID, popolni biti dovoljenj, nanosekundna sprememba/čas spremembe in vse berljive razširjene atribute. Jedro potrjuje hash in dekodira strogo UTF-8, ohranjanje BOM. Vsak dokument dobi neprozoren editId, ki je ogledan na njegov vstavek, terminalsko sejo in strežnik identitete.
  2. Neprivilegirani postopek priprave razrešuje avtentikirani račun Domov skozi pwd.getpwuid(os.getuid()), ustvarja $HOME/ch-j-sm/ z načinom 0700, in ustvari zasebno, izključno revijo za obnovo. Nevaren dom, simbolično delovno mesto ali delovno mesto v lasti drugega računa je zavrnjen.
  3. Jedro nalaga skrito, naključno 128-bit .tmp delovna datoteka skozi SFTP z izključna ustvarjalnost (wx), način 0600 in 60-sekundni časovni preklic kanala/obresti. Revija vsebuje cilj, prvotno izhodiščno vrednost in pričakovano delovno hash; ne vsebuje nobenih pooblastil.
  4. Ena SSH izvršitelj izvaja celoten dokončni postopek, neobvezno prek obstoječi izvršitelj sudo. Pomočnik se varno odpre in porine zasebno delovno kopijo in jo izprazni. Zaklene prvotno inodo, preveri svojo izhodiščno vrednost, ustvari ekskluzivno namembno datoteko poleg cilja, napiše vse vsebine, uporablja in preveri metapodatke, ponovno preveri izvirnik in izprazni zamenjavo.
  5. Ista mapa os.replace Atomsko zamenja cilj. Starša imenik je izpraznjen in končna pot, hash, inode in metapodatki se preverijo. Izvirna pot je na voljo do zamenjave. Delovna datoteka se nikoli ne premakne po datotečnih sistemih in nikoli ni odstranjena s končno zaključkom.
  6. Po preverjenem uspehu jedrnega programa ločeno čiščenje ponovno preveri finalno vsebina in varnostni metapodatki pred odstranitvijo delovne datoteke in dnevnika. Napaka pri čiščenju še vedno poroča o potrjenem prihranku z recoveryAvailable: true.

Napaka pri pošiljanju, neuspešnem sudo, konfliktu, napaki pri metapodatkih ali neuspeli zamenjavi hrani izvirnik in katerikoli uprizorjeni material. Nepopolna nalaganja so opredeljena kot taka in jih ni mogoče vrniti kot popolni urejeni dokument. Izgubljeno SSH Poročajo o komunikaciji, manjkajočem statusu izstopa, časovnih začasih in nepričakovanih rezultatih dokončanja kot neznana, nikoli tako rešeno. Jedro blokira drugo shrani na negotovem dokumentu; ni avtomatskega nadomeščanja.

Metapodatki, privilegije in varnostne meje

Pomočnik ohranja in potrjuje UID, GID in vse dovoljene bite POSIX, vključno z izvršnimi, setuid, setgid in lepljivimi biti. Razmnožuje se. Linux Razširjeni atributi bajt za bajte, vključno s POSIX ACL, zmogljivosti in oznakami SELinux. Lastništvo in vsebina datotek so določeni pred varnostnimi atributi, ker pisci/chown lahko jasno zmogljivosti ali posebni dovoljenje biti. Odstranjeni so dedirani namembni atributi, ki jih ni na izvirniku. Čas spremembe odraža nov zapis in ni prepisan iz prvotnega.

Operacijo prekine neprečitljiv ali nepredstavljiv atribut; metapodatki se ne izpustijo tiho. Podpisi IMA/EVM se izrecno zavrnejo, ker bi jih kopiranje vsebine/inode vezane celovitosti razveljavilo. Simulacije v ciljni ali domači poti, trdo povezani datoteke in nepravilne datoteke so zavrnjene. Nobenega domačega ali šibkega SFTP Uporablja se rezervni prepis.

Običajno zapisovalno prihranki tečejo kot račun SSH. Zaščiteni prihranki zahtevajo izrecno { sudo: true }; sudo geslo je neobvezno za sudo brez gesla. Gesla so potrjena in prenesena samo na kanalu stdin, nikoli v zaporu, dnevniku, delovni datoteki, logerju ali oddaljeni napaki. Koren SSH seje uporabljajo obstoječi neposredni koreninski izvršitelj. Neuspešno dovoljenje pusti izvirno in delovno kopijo nepoškodovano. Vsi prihranki, ki so bili izvedeni kot koreninec (direktni korenine SSH ali sudo), zavračajo tudi ciljne mape/naročnike, ki so v lasti ali zapisovalni s strani drugih računov, ali ime ACL dostopa, namesto da zaupajo privilegiranemu imenu poti, ki ga nadzoruje drug račun.

Fixni pomočnik teče z python3 -I -B: ignorira uporabniške pitonske poti, delovno imenik in pakete spletnih strani uporabnika, in ne piše bajtne kode. Potje in JSON Argumenti so citirani v jedru. Vstavki nikoli ne prejemajo samovoljnega SSH izvršni ali SFTP Ročaji. obstoječi peskovnik, CSP, očitna dovoljenja, preverjanje gostiteljskih ključev in preverjanje posodobitev ostajajo v uporabi.

Plugin API in preostalo vključevanje Monaco

Posebno razporejen UI Monaco/File Manager ni na voljo v tej odjavi. Njenega povezovanja z UI-jem, sudo hitrega, umazanega ravnanja in prevodov ni bilo mogoče izvajati ali testirati tukaj. Vira paketnega vstavka je vstavek Hash & Checksum. Nadomestni vir upravljalca datotek ni bil izumljen.

Sedanje metode so še vedno na voljo. Metode/možnosti dodatka so izpostavljene s prednalaganjem v peskovnici in preverjenim časom obratovanja:

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.

Metode izterjave sprejmejo neobvezno končno { sudo: true, sudoPassword } pri pregledu tarče je treba povečati. Obdržijo avtentikirano uporabniško delovno mesto tudi ob izvedbi prek sudo. Dnevniki preživljajo ponovno uporabo programa in SSH ponovno povezovanje; okrevanje nikoli samodejno ne ponovi dokončanja. Preden ga izrecno shranite, ponovno pregledajte izterjani blažilnik proti novemu odprtemu cilju.

files.read stražarji berejo, pregledajo in sproščajo ročaj. files.write Varnostniki varčujejo in čistijo. writeText še vedno zavrne pri napaki za obstoječe vstavke; saveText vrne strukturirano { ok, value/error } kuverta, ker Electron Izpusti lastnosti po meri na zavrnjenih objektih Napake. Triargument zapuščine writeText lahko uporabi izhodiščno vrednost enotnega odprtega dokumenta. Več živih dokumentov za isto pot zahteva editId; dvosmislene zapuščine klici ne uspejo varno, namesto da bi izbrali izhodišče drugega dokumenta. Vstavki morajo sprostiti neuporabljene ročaje.

Zunanji UI mora takoj prikazati varčevanje, ohraniti blažilnike umazane ob neuspehu, ponuditi sudo le po dovoljenju/autentikaciji napake, pokazati konflikte brez prepisa in ponuditi okrevanje po izgubi povezave ali neznan izid. Te države mora prevajati v češkem, nemškem in angleškem jeziku. Predlagana kopija stanja:

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

Opredelitev pogojnih vrednosti in življenjski ciklus

Ping je zamuda, ki jo poroča dejanski odsevek ICMP na strani stranke na strani odlive na rešeni IP, ki jo uporablja SSH. Jedro kliče platformo ping izvedljivo asynhronično z fiksnim argumentom, brez potrebe po zagonu lupine ali administratorja. Linux, macOS (vključno z ping6) in Windows argumenti so izbrani ločeno. Blokiran ICMP, manjkajoč izvršni program, začasni čas, neveljaven izhod ali samo zgornji vezan Windows odgovor, kot je <1ms proizvaja nedostopno vrednost, ne izmišljeno številko.

SSH RTT je monotonična performance.now() trajanje fiksnega true Izvršna zahteva glede obstoječe overjene overitve SSH stranka. Vključuje nastavitev kanalov, obdelavo strežnikov in dostavo odziva; ni čista mreža RTT ali SSH trajanje prijave. Prevedeni indikatorski nasvet pojasnjuje to razliko.

Spremljanje se začne takoj, ko se terminal poveže. Sočasno tečejo sočasno in asinhronizirajoč, s pet sekundnim časovnim zaporedjem zahtevka/procesa. Naslednji vzorec je naročen dvanajst sekund po zaključku prejšnjega vzorca, kar prepreči prekrivanje. Preklopi prekinitev ICMP, odstranjuje časnike, odpoveduje nepredvideno SSH delo in jamči vrednote. Preverjanje identitete zabeleži predhodno povezavo, da bi se objavila po ponovnem povezovanju. Neuspeh ICMP se nikoli ne spremeni SSH stanje povezave.

Latenčna potovanja znotraj obstoječega state dogodk / ssh:state IPC tovor:

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

Nedostopne številke so null. Kompaktni kazalnik za terminal uporablja milisekunde, lokalizirano nedostopno besedilo in češki/German/English etikete. Skriva se na prekinitvi. Ni bilo potrebno dodatnih zmogljivosti za izvedbo izdelavo ali zahtevek za IPC.

Omejitve za preverjanje in delovanje

Uporabnik je zahteval ohranitev sprememb v obstoječem delovnem drevesu, trenutno feature/hash-checksum-plugin; ni bilo izvedeno nobenega stikala podružnice ali nepovezanega čiščenja.