Darbs palaižas pieteikšanās laikā, žurnāls rāda klienta startu, bet tunelis nekad nepaceļas. Vai arī paceļas un pēc dažām sekundēm pazūd. Abos gadījumos rekvizītu saraksts, visticamāk, bija kārtībā. launchd, pieņemot darbu, deva divus solījumus: tas pārraudzīs procesu un šis process turpinās darboties. VPN vajag abus, un pareizs XML fails nenodrošina nevienu.

Derīgs rekvizītu saraksts vēl nav strādājošs serviss

plutil -lint pārbauda struktūru. Tas nevar pateikt, vai binārais fails eksistē, vai argumentus atbalsta šī klienta versija, vai darbs startē kontekstā, kurā pieejami akreditācijas dati. Tie ir semantiski jautājumi, un tie izskaidro lielāko daļu kļūmju, kas izskatās kā launchd problēmas.

plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn

Lasiet otrās komandas izvadi, nevis pieņemiet, ka darbs ir ielādēts. Tā ziņo pēdējo iziešanas statusu un to, vai serviss darbojas, kas pirms profila aiztikšanas atšķir „nekad nav startējis“ no „startēja un nomira“.

Aģenti manto lietotāja sesiju, dēmoni — nē

Apple launchd dokumentācija atdala katra lietotāja aģentus no sistēmas dēmoniem. Aģents darbojas pieteikušā lietotāja kontekstā, ar šī lietotāja atslēgu saišķi un vidi. Dēmons darbojas bez šīs sesijas, un darba pārvietošana uz sistēmas direktoriju neatjauno lietotāja interaktīvos akreditācijas datus.

Tieši šī atšķirība nosaka dizainu. Ja savienojumam nepieciešams, lai cilvēks pieteiktos vai apstiprinātu MFA uzvedni, atbalstītā shēma ir lietotāja sesijas darbs, kas palaižas pēc pieteikšanās. Ja tam jādarbojas bez neviena pieteikušā lietotāja, klientam vajag apstiprinātu bezuzraudzības identitāti ar savu atjaunošanas un atsaukšanas procesu. Nepareizas rindas izvēle rada darbu, kas startē tīri un neizdodas pirmajā autentifikācijas solī.

Neslēpiet šo atšķirību ar paroli argumentu masīvā vai atslēdzot sertifikātu pārbaudes. Abi pārvērš autentifikācijas prasību pastāvīgā noslēpumā lasāmā failā, un otrais nozīmē, ka tunelis autentificē visu, kas atbild.

Uzraudzība strādā tikai tad, ja process paliek priekšplānā

Klients, kas pats pārtop par dēmonu, nekavējoties atdod vadību launchd, un uzraugs tad vēro procesu, kas jau beidzies. Tunelis var būt pacelts, bet launchd uzskata, ka darbs neizdevās, un tā restartēšanas politika izdarīs to, ko jūs negribējāt.

Izmantojiet klienta dokumentēto priekšplāna vai servisa režīmu. Ja produktam ir sava atbalstīta startēšanas funkcija, tā jau zina, kā noturēties priekšplānā un kā nodot tīkla steksam; pielāgots darbs ir atsevišķs dizains, nevis tā uzlabojums.

Piešķiriet darbam unikālu etiķeti, paredzēto izpildfailu un apdomātu argumentu masīvu. Masīvs nav shell komandrinda, tāpēc caurules un pāradresācijas tur nestrādā, un pēdiņu uzvedība ir citāda. Komanda, kas izdodas administratora terminālī, labākajā gadījumā ir sākotnēja pārbaude.

Akreditācijas datiem jāstrādā bez uzvednes

Bezuzraudzības darbība akreditācijas datu problēmu pārvieto, nevis novērš. Kādam jāpieder identitātei, jāizlemj, cik ilgi tā dzīvo, un jādokumentē, kā tā tiek nomainīta. Sertifikāts bez derīguma termiņa uzraudzības kļūst par pārtraukumu ar datumu kalendārā.

Turiet noslēpumus ārpus argumentiem un ārpus darba standarta izvades. Ja klients atbalsta akreditācijas datu lasīšanu no aizsargātas krātuves, izmantojiet šo ceļu un pārbaudiet, vai darba izpildes konteksts var sasniegt krātuvi. Dēmons, kas darbojas kā root, parasti nevar nolasīt pieteikšanās atslēgu saišķa vienumu, un tas ir tāda detaļa, kas parādās tikai sistēmas kontekstā.

Definējiet, ko nozīmē gatavs, un pārbaudiet tur

Veiksmīgs starts pierāda, ka process sākās. Tas nepierāda, ka tīkls ir pacelts, ka vārteja pieņēma identitāti vai ka privātā lietotne ir sasniedzama. Ja kaut kas cits ir atkarīgs no tuneļa, tam vajag gatavības signālu, kas atspoguļo savienojumu, nevis darba starta laiku.

Atkārtojumiem jābūt ierobežotiem, un tiem jāatšķir trūkstošs tīkls no noraidītiem akreditācijas datiem. Restartēšana pie katras kļūdas nevar salabot beigušos sertifikātu un rada žurnālu, pilnu ar identiskiem mēģinājumiem, kas paslēpj īsto.

Pieņemiet darbu tādā kontekstā, kādā tas tiešām darbosies: bez tīkla startēšanas laikā, parastā pieteikšanās, pamošanās no miega un kontrolēta apstāšanās. Pēc tam pierakstiet darba etiķeti, klienta versiju un profila revīziju kopā, lai nākamais cilvēks manto attiecināmu servisu, nevis failu, kas kādreiz strādāja.

Saistītie raksti