CH-J ToolsPalvelimen hallinta yli SSH
Valikko

Etäeditorin tallennus ja latenssin seuranta

Lataa tiedosto

Tämän käännöksen kielentarkistus on kesken. Vertaa epäselviä kohtia englanninkieliseen alkuperäiseen tekstiin.

Syyt

Edellinen editori latasi työtiedostonsa kohteen emohakemistoon, jota SSH-tili ei useinkaan voi kirjoittaa /etc:n tai /varin alle. SFTP uudelleennimeä annettu ei valtuutettua sudo-polkua, perustason konfliktitarkastusta, tietoturvametatietojen todentamista tai luotettavaa ylikirjoitusta semantiikasta. Sen virheenkäsittelijä poisti väliaikaisen kopion ja poisti perintämateriaalin silloinkin, kun valmistuminen oli epävarmaa.

Istunnon tila paljasti aiemmin vain yhteyden tilan. Pääteindikaattoria syöttävää ICMP-mittausta tai todennetun SSH:n vastemittausta ei ole vahvistettu.

Tallenna protokolla

  1. Kiinteä SSH-auttaja avaa säännöllisen, yhden linkin tiedoston käyttäen kuvaajan suhteellista versiota toiminnot ja O_NOFOLLOW jokaiselle polkukomponentille. Se vangitsee sisällön, SHA-256-hashin, laitteen/inodin, UID:n, GID:n ja täydelliset lupabitit, nanosekundin muuntamisen/muutosajat sekä kaikki luettavissa olevat laajennetut ominaisuudet. Core tarkistaa hasiksen ja purkaa koodit tiukasti UTF-8:ltä, säilyttäen BOM:n. Jokainen asiakirja saa läpinäkymättömän editId:n, joka on suunnattu sen liitännän, pääteistunnon ja palvelimen henkilöllisyyden mukaan.
  2. Luottamuksettoman tilin selvittäminen Koti pwd.getpwuid(os.getuid()):n kautta, luo $HOME/ch-j-sm/-moodilla 0700 ja luo yksityisen, yksinomaisen perintälehden. Toisen tilin omistama turvaton koti, symlink-työtila tai työtila hylätään.
  3. Core lataa piilotetun, satunnaisen 128-Bitti .tmp työtiedosto läpi SFTP ilun Yksinomainen luonti (wx), tila 0600 ja kuudenkymmenen sekunnin kanava/laajennusaikalisä. Lehdessä on tavoite, alkuperäinen perustaso ja odotettu työhash; siinä ei ole valtakirjoja.
  4. Yksi SSH Exec suorittaa koko maalinteon, vapaaehtoinen kautta olemassa oleva sudon toteuttaja. Auttaja avaa turvallisesti yksityisen työkopion ja huuhtelee sen. Se lukitsee alkuperäisen inodin, tarkistaa sen perustason, luo kohteen viereen eksklusiivisen kohdetiedoston, kirjoittaa kaiken sisällön, soveltaa ja todentaa metatiedot, tarkistaa alkuperäisen uudelleen ja huuhtoo tilalle.
  5. Sama kansio os.replace korvaa kohteen atomisesti. Vanhempi Hakemisto huuhtoutuu ja lopullinen polku, hash, inodi ja metatiedot todennetaan. Alkuperäinen polku on saatavilla, kunnes se vaihdetaan. Työtiedostoa ei koskaan siirretä tiedostojärjestelmien välillä, eikä sitä koskaan poisteta viimeistelemällä.
  6. Kun Core on saanut varmistuneen menestyksen, erillinen puhdistus tarkistaa finaalin sisällön ja tietoturvan metatiedot ennen työtiedoston ja lehden poistamista. Siivousvirhe raportoi yhä varmistuneesta tallenteesta recoveryAvailable: true:llä.

Epäonnistunut lataus, epäonnistunut sudo, ristiriita, metadatavirhe tai epäonnistunut vaihto pitää alkuperäisen ja kaikki lavastetut aineistot. Epätäydelliset lähetykset tunnistetaan sellaisenaan, eikä niitä voida palauttaa täydellisinä muokattuina asiakirjoina. Menetetty SSH-viestintä, puuttuva poistumistila, aikakatkaisut ja odottamattomat viimeistelytulokset ilmoitetaan untuntemattomana:nä, joka ei koskaan ole tallennettuna. Ydin estää toisen tallenteen epävarmassa asiakirjassa; automaattista korvaamista ei ole.

Metatiedot, oikeudet ja turvallisuusrajat

Auttaja säilyttää ja tarkistaa UID:n, GID:n ja kaikki POSIX-lupabitit, mukaan lukien suorituskelpoiset, asetuoidut, setgid- ja tahmeat kappaleet. Se toistaa Linux-laajennetut attribuutit tavulle, mukaan lukien POSIX ACLs, ominaisuudet ja SELinux-tarrat. Omistus ja tiedostojen sisältö asetetaan ennen turvallisuusominaisuuksia, koska kirjoittelut/laput voivat selvittää ominaisuuksia tai erikoisoikeuksia. Perityt kohteen ominaisuudet, jotka puuttuvat alkuperäisestä, poistetaan. Muutosaika heijastaa uutta kirjoitusta eikä sitä kopioida alkuperäisestä.

Unrepreadable tai unrepresentable attribuutti keskeyttää toiminnan; metadataa ei pudoteta hiljaa. IMA/EVM-allekirjoitukset torjutaan selkeästi, koska sisällön kopioiminen/sitominen eheyteen mitätöisi ne. Symlinkit kohde- tai kotipolulla, kovasidotut tiedostot ja epäsäännölliset tiedostot hylätään. Ei käytössä ole mitään paikan päällä olevaa tai heikompaa SFTP- varaosaa.

Tavanomainen kirjoitettava tallentaa SSH-tilin. Suojattu tallennus vaatii selkeän { sudo: true }-salasanan; salasanattomaan sudoon voi käyttää myös sudo-salasanoja. Salasanat validoidaan ja välitetään vain kanavalla stdin, ei koskaan komennon, päiväkirjan, työtiedoston, kirjaajan tai etävirheen sisällä. Root SSH - istunnot käyttävät olemassa olevaa suoraa juurisuorittajaa. Epäonnistunut valtuutus jättää alkuperäisen ja työkopion koskemattomaksi. Kaikki juurina (suora juuri SSH tai sudo) suoritetut tallennukset hylkäävät myös muiden tilien omistamat tai kirjoitettavat kohdehakemistot/-esittäjät tai käyttävät ACL:ää sen sijaan, että luottaisivat toisen tilin hallitsemaan etuoikeutettuun polunimeen.

Kiinteä auttaja toimii python3 -I -B:llä: se ei huomioi käyttäjä Python-polkuja, työhakemistoa ja käyttäjäsivustopaketteja eikä kirjoita tavukoodia. Polkuja ja JSON Coressa on kuorittu argumentteja. Liitännäiset eivät koskaan saa mielivaltaista SSH execiä tai SFTP-kahvoja. Käytössä on edelleen olemassa oleva hiekkalaatikko CSP, manifestioikeudet, isäntäavainvarmennus ja päivitysvarmennus.

Plugin API ja jäljellä oleva Monaco-integraatio

Erikseen jaettu Monacon/Tiedostopäällikkö UI on poissa tästä kassasta. Sen UI-integraatiota, sudo nopeata, likaista buffer-käsittelyä ja käännöksiä ei voitu toteuttaa tai testata täällä. Liitännäinen on Hash & Checksum -liitännäinen. Mitään korviketiedostojen hallintalähdettä ei keksitty.

Nykyisiä menetelmiä on edelleen saatavilla. Lisäaineiden menetelmille/vaihtoehdoille altistuu hiekkalaatikoitu esikuormitus ja luvan tarkastama ajoaika:

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.

Recovery methods hyväksyy valinnaisen lopullisen { sudo: true, sudoPassword }- argumentin, kun kohteen tarkastaminen vaatii nousua. Ne säilyttävät todennetun käyttäjän työtilan myös silloin, kun se suoritetaan sudolla. Lehdet selviytyvät sovelluksesta uudelleen ja SSH kytketään uudelleen; toipuminen ei koskaan automaattisesti toista viimeistelyä. Tarkista talteen otettua puskuria vasta avattua kohdetta vasten, ennen kuin se nimenomaisesti säästetään.

files.read-vartijat lukevat, tarkastavat ja käsittelevät julkaisua. files.write-suojat säästävät ja korjaavat. writeText torjuu yhä olemassa olevien liitännäisten epäonnistumisen; saveText palauttaa strukturoidun { ok, value/error }-korun, koska Electron pudottaa omia ominaisuuksia hylätyille Error-objekteille. Perinnöllinen kolmeosainen writeText voi käyttää yhden avoimen asiakirjan perustasoa. Useita saman polun eläviä asiakirjoja vaatii editId:n, moniselitteiset puhelut epäonnistuvat turvallisesti sen sijaan, että ne valitsisivat toisen asiakirjan perustason. Liitännäisten tulisi vapauttaa käyttämätön kahva.

Ulkoisen käyttöliittymän on näytettävä tallennus välittömästi, pidettävä puskurit likaisina epäonnistumisen varalta, tarjottava sudoa vasta lupa-/varmennusvirheiden jälkeen, osoitettava ristiriitoja ilman ylikirjoitusta ja tarjottava palautusta yhteyden menetyksen tai tuntemattoman lopputuloksen jälkeen. Sen on käännettävä nämä osavaltiot tšekiksi, saksaksi ja englanniksi. Ehdotettu tilakopio:

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

Latenssimääritelmät ja elinkaari

Ping on latenssi, josta raportoi todellinen asiakaspuolen ICMP-vastaaja selvitetylle tutkimusajanjaksolle SSH. Core vetoaa alustan ping-suorittimeen epäyhtenäisesti kiinteällä parametrisarjalla, ilman kuori- tai hallintakäynnistysvaatimusta. Linux, macOS (mukaan lukien ping6) ja Windows- argumentit valitaan erikseen. Estetty ICMP, puuttuva suoritustiedosto, aikakatkaisu, epäkelpo ulostulo tai vain ylärajalla oleva Windows-vastaus, kuten <1ms, tuottaa epätodennäköisen arvon, ei keksittyä lukua.

SSH RTT on yksitoikkoinen performance.now()-ohjelma, jonka kesto on kiinteä true -ohjelma, joka koskee olemassa olevaa varmennettua SSH:n asiakasta. Se sisältää kanavan asettelun, palvelimen prosessoinnin ja vastaustoimitukset; se ei ole puhdas verkon RTT tai SSH kirjautumisaika. Käännetty indikaattorin työkaluvihje selittää tämän eron.

Seuranta käynnistyy heti, kun pääte yhdistyy. Probeja kulkee samanaikaisesti ja epäyhtäjaksoisesti viiden sekunnin aikalisällä. Seuraava näyte on määrä ottaa 12 sekuntia edellisen näytteen valmistumisen jälkeen, mikä estää päällekkäisyydet. Katkaise keskeytykset ICMP:ltä, poista ajastimet, peruuttaa SSH-työn ja poistaa arvot. Tallennetun henkilöllisyyden tarkastukset estävät etukäteisyhteyden julkaisemisen yhteyden uudelleen liittämisen jälkeen. ICMP:n epäonnistuminen ei koskaan muuta SSH-yhteystilaa.

Latenssi kulkee nykyisen state-tapahtuman / ssh:state IPC:n hyötykuorman sisällä:

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

Saatavilla olevat numerot ovat null. Kompaktipäätemittarissa käytetään millisekuntia, lokalisoitua, saatavilla olevaa tekstiä ja Tšekin /German/English-tarroja. Se piiloutuu irtikytkentään. Lisärenderin suorituskykyä tai IPC-pyyntöä ei tarvittu.

Validointi- ja toimintarajat

Käyttäjä pyysi säilyttämään olemassa olevan työpuun, tällä hetkellä feature/hash-checksum-plugin:n, muutokset; mitään haarakytkimestä tai irrallista puhdistusta ei tehty.

Tehtävään vaihdetut tiedostot