CH-J Toolsservera pārvaldība virs SSH
Izvēlne

Attālināta redaktora saglabāšana un latentuma uzraudzība

Lejupielādēt failu

Šī tulkojuma valodas pārskatīšana vēl turpinās. Neskaidrību gadījumā salīdziniet ar oriģinālu angļu valodā.

Pamatcēloņi

Iepriekšējais redaktors augšupielādēja savu darba failu mērķa vecāku direktorijā, ko bieži vien nevar ierakstīt SSH kontā ar /etc vai /var. SFTP pārvārds piegādāta nav atļauta sudo ceļš, bāzes konfliktu pārbaude, drošības metadatu verifikācija vai uzticams pārrakstīt semantika. Tās kļūdu apstrādātājs izdzēsa pagaidu kopiju, noņemot atgūšanas materiālu pat tad, kad pabeigšana bija neskaidra.

Sesijas statuss iepriekš atklāts tikai savienojuma stāvoklī. Nebija ICMP vai autentificēta SSH atbildes reakcijas mērījuma, kas panesa termināla indikatoru.

Saglabāt protokolu

  1. Fiksēts SSH palīgs atver regulāru, vienas saites failu, izmantojot deskriptora relatīvo operācijas un O_NOFOLLOW katram ceļa komponentam. Tajā ir ietverts saturs, SHA-256 hash, ierīce/inode, UID, GID, pilns atļauju biti, nanosekundes izmaiņu/izmaiņu laiks un visas lasāmās paplašinātās atribūtus. Core pārbauda hash un decodes strikts UTF-8, saglabājot BOM. Katrs dokuments saņem necaurspīdīgu editId, tvērienu tā spraudnis, termināla sesija un servera identitāte.
  2. Neprivileģēta sagatavošanas operācija atrisina autentiskā konta darbību mājās caur pwd.getpwuid(os.getuid()), rada $HOME/ch-j-sm/ ar režīmu 0700 un izveido privātu, ekskluzīva atjaunošanas žurnālu. Nekaitīga māja, symlink darba telpa vai darba telpa pieder citam kontam tiek noraidīta.
  3. Pamata augšupielādē slēpto, izlases 128- bits .tmp darba fails caur SFTP kur: ekskluzīva izveide (wx), režīms 0600 un sešdesmit sekunžu kanāla/ielādes noildze. Žurnālā ir iekļauts mērķis, sākotnējais sākumstāvoklis un sagaidāmais darba hash; tas nesatur pilnvaras.
  4. Viens SSH exec veic visu finalizāciju, pēc izvēles esošais sudo izpildītājs. Palīgs droši atver un nomāc privāto darba kopiju, kā arī izskalo to. Tas bloķē sākotnējo inode, pārbauda tās bāzes līnijas, izveido ekskluzīvu mērķa failu blakus mērķim, raksta visu saturu, piemēro un pārbauda metadatus, pārbauda oriģinālo vēlreiz, un izskalo aizstājēju.
  5. Viena un tā pati direktorāts os.replace Atmosfēriski aizstāj mērķi. Vecāks Mape ir izskalots un galīgais ceļš, hash, inode un metadati ir pārbaudīta. Sākotnējais ceļš paliek pieejams līdz aizstāšanai. Darba fails nekad netiek pārvietots pa failu sistēmām un nav izņemts ar finalizācijas palīdzību.
  6. Pēc tam, kad Core saņem pārbaudītus panākumus, atsevišķs tīrīšana vēlreiz pārbauda galīgo saturu un drošības metadatus pirms darba datnes un žurnāla noņemšanas. Tīrīšanas kļūda joprojām ziņo par apstiprinātu saglabāšanu ar recoveryAvailable: true.

Neizdevās augšupielādēt, neizdevās sudo, konflikts, metadatu kļūda vai neveiksmīga aizstāšana saglabā oriģinālo un jebkuru palaišanas materiālu. Nepilnīgas augšupielādes tiek identificētas kā tādas, un tās nevar atgūt kā pilnīgu rediģēto dokumentu. Pazaudēts SSH komunikācijas, trūkstošais izejas statuss, noildze un negaidīti pabeigšanas rezultāti tiek ziņots kā nezināms, nekad kā saglabāts. Kodols bloķē vēl vienu, izņemot uz neskaidra dokumenta; nav automātiska aizstājēja atkārtošanās.

Metadati, privilēģijas un drošības robežas

Palīdzētājs saglabā un pārbauda UID, GID un visi POSIX atļauju biti, tostarp izpildāms, setuid, setgid un lipīgi biti. Tas reproducē Linux paplašinātās baitu atribūtus, tostarp POSIX ACL, iespējas un SELinux etiķetes. Īpašumtiesības un failu saturs tiek noteikts pirms drošības atribūti, jo raksti / zvanīt var noskaidrot iespējas vai īpašu atļauju bitiem. Izņem mantojuma mērķa atribūtus, kuru oriģinālā nav. Modifikācijas laiks atspoguļo jauno rakstīt un netiek nokopēts no oriģināla.

Nelasāms vai nemainīgs atribūts izslēdz darbību; metadati netiek klusi nomesti. IMA/EVM paraksti ir nepārprotami noraidīti, jo satura/jodu savienojošo integritātes parakstu kopēšana tos nederētu. Symlinks mērķa vai mājas ceļā, grūti saistīts failus un neregulāri faili tiek noraidīti. Netiek lietots neviens vietējs vai vājāks SFTP pārrakstīt atkļūdojumu.

Parastās ierakstītie saglabā kā SSH kontu. Aizsargājami ietaupījumi prasa skaidru { sudo: true }; sudo parole ir fakultatīva paroles bez parolēm. Paroles tiek apstiprinātas un nodotas tikai kanālam stdin, nekad iekšā komandu, žurnāli, darba failu, pierakstīšanās vai attālināta kļūda. Sakne SSH sesijas izmanto esošo tiešo saknes izpildītāju. Neizdevās atļaut oriģinālu un darba kopiju atstāt neskartu. Visi saglabā izpildīto kā root (tiešā root) SSH vai sudo) noraida arī mērķa direktoriju/nozares pārstāvjus, kas pieder citiem kontiem vai ir to reģistrā, vai kuriem ir piekļuve ACL, nevis uzticas priviliģētam ceļam, ko kontrolē cits konts.

Fiksētais palīgs darbojas ar python3 -I -B: tas ignorē lietotāju Python celiņi, darba direktoriju un lietotāja vietnes pakotnēm, un raksta bez baitekoda. Ceļi un JSON argumenti Core ir kotēti šellakā. Spraudņi nekad nesaņem patvaļīgus SSH exec vai SFTP rokturi. Esošā smilšu kaste CSP, manifesta atļaujas, datora atslēgas verifikācija un atjaunināšana joprojām tiek izmantota.

Plugin API un atlikusī Monaco integrācija

Atsevišķi izplatītais Monaco/Failu pārvaldnieks UI nav šajā iziešanā. Tā UI integrācija, sudo ātri, netīro bufera apstrādes un tulkojumi nevarēja īstenot vai pārbaudīt šeit. Komplektēts spraudnis avots ir Hash & Checksum spraudnis. Failu pārvaldnieka aizstājēja avots netika izgudrots.

Esošās metodes joprojām ir pieejamas. Piedevu metodes/varianti tiek pakļauti iepriekš ielādētai smilšu kastei un ar atļauju pārbaudītajam darba laikam:

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.

Atveseļošanās metodes pieņemt fakultatīvu galīgo { sudo: true, sudoPassword } argumentu, pārbaudot mērķi prasa pacelšanos. Tie saglabā autentificētu lietotāja darbtelpu pat tad, kad tiek izpildīts sudo. Žurnāli izdzīvot lietotņu restart un SSH Atvienoties; atgūšana nekad automātiski neatkārto pabeigšanas. Pirms nepārprotamas buferšķīduma saglabāšanas, to atkārtoti pārskatīs pret tikko atvērtu mērķi.

files.read Sargi nolasa, pārbauda un apstrādā. files.write Sargi ietaupa un atjauno attīrīšanu. writeText joprojām noraida, ja esošie spraudņi nedarbojas; saveText atgriež strukturētu { ok, value/error } aploksni, jo Electron pilieni ir pielāgotas īpašības noraidītajos kļūdu objektos. Mantojums trīs arguments writeText var izmantot viena atvērtā dokumenta bāzes līniju. Vairāki dzīvu dokumentu tam pašam ceļam prasa editId; neskaidri mantotie zvani neizdodas droši, nevis izvēlas cita dokumenta bāzes līniju. Spraudņiem jāizlaiž neizlietotie rokturi.

Ārējais UI jābūt displejs ietaupījums uzreiz, saglabāt buferus netīri par neveiksmēm, piedāvāt sudo tikai pēc atļaujas / autentifikācijas neveiksmes, parādīt konfliktus bez pārrakstīšanas, un piedāvāt atgūšanu pēc savienojuma zaudējuma vai nezināmu iznākumu. Tai ir jātulko šīs valstis čehu, vācu un angļu valodā. Ierosinātā valsts 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

Latentās definīcijas un dzīves cikls

Ping ir latentums, par kuru ziņo faktiskais klienta puse ICMP atbalsis uz atrisināto IP, ko izmanto SSH. Pamata atsaucas uz platformas ping izpildāmību asinchroniski ar fiksētu argumentu masīvu, bez korpusa vai administratora palaišanas prasību. Linux, macOS (ieskaitot ping6) un Windows argumenti tiek izvēlēti atsevišķi. Bloķēta ICMP, trūkstoša izpildāmība, noildze, nederīga izeja vai tikai augšējā robeža ar Windows atbilde, piemēram <1ms rada nepieejamu vērtību, nevis izgudrotu numuru.

SSH RTT ir monotonisks performance.now() ilgums fiksētu true exec pieprasījumu par esošo autentificēto SSH klientu. Tas ietver kanālu iestatīšanu, serveru apstrādi un atbildes piegādi; tas nav tīrs tīkls RTT vai SSH pieteikšanās ilgums. Pārtulkots indikatora paskaidrumu izskaidro šo atšķirību.

Monitorings sākas, tiklīdz savienojas termināls. Probes darbojas vienlaicīgi un asinchroniski, ar piecu sekunžu pieprasījumu / procesa noildze. Nākamo paraugu ieplāno divpadsmit sekundes pēc iepriekšējā parauga pabeigšanas, novēršot pārklāšanos. Atvienojiet abortus ICMP, attīra taimeris, atceļ vēl nepabeigto SSH darbu un noskaidro vērtības. Ieraksta identitātes pārbaudes neļauj iepriekšēju savienojumu publicēt pēc atkalpievienošanās. ICMP kļūme nekad nemaina SSH savienojuma stāvokli.

Latents ceļo iekšpusē esošo state notikums / ssh:state IPC lietderīgā slodze:

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

Nepieejami numuri ir null. Kompaktā termināla indikators izmanto milisekundes, lokalizētu nepieejamu tekstu un čehu/German/English etiķetes. Tas slēpjas uz atvienošanās. Nebija vajadzīgas papildu renderēšanas iespējas vai IPC pieprasījums.

Validācija un darbības ierobežojumi

Lietotājs lūdza saglabāt izmaiņas esošajā darbkoku, pašlaik feature/hash-checksum-plugin; filiāles slēdzis vai nesaistīta tīrīšana netika veikta.

Faili mainīti šim uzdevumam