Skip to main content

Tekst-terminaler på Linux - 14.1 Getty (brukt i / etc / inittab)

Localizar personas con Trape y crear un laboratorio de ciberseguridad usando Kali Linux y Docker. (April 2025)

Localizar personas con Trape y crear un laboratorio de ciberseguridad usando Kali Linux y Docker. (April 2025)
Anonim

14.1 Getty (brukt i / etc / inittab)

Introduksjon til Getty

For å få en påloggingsprosess kjørt på en seriell port (og terminalen koblet til den) når datamaskinen starter (eller bytter kjøre nivåer), må en getty-kommando settes inn i filen / etc / inittab. Kjører getty fra kommandolinjen kan forårsake problemer (se Hvis getty kjører fra kommandolinjen: Programmer blir stoppet for å se hvorfor). Getty får en TTY (en terminal) går. Hver terminal trenger sin egen getty kommando. Det er også minst en getty-kommando for konsollen i hver / etc / inittab-fil. Finn dette og legg getty-kommandoene til de ekte terminalene ved siden av den. Denne filen kan inneholde sample getty linjer for tekstterminaler som kommenteres slik at alt du trenger å gjøre er å uncomment dem (fjern ledende #) og endre noen argumenter.

Argumentene som er tillatt, avhenger av hvilken getty du bruker:To gettys best for direkte tilkoblede terminaler er:

  • agetty (noen ganger bare kalt getty): Veldig lett å sette opp. Ingen konfigurasjonsfiler. Se agetty
  • getty (del av getty_ps)

To gettys best for innringede modemer (unngå for direkte tilkoblede terminaler) er:

  • mgetty: det beste for modemer; fungerer for terminaler også, men dårligere
  • uugetty: bare for modemer; en del av getty_ps-pakken

Enkle gettys å bruke hvis du ikke bruker en ekte tekst-terminal. De fleste Linux-brukere bruker en av disse på skjermen:

  • mingetty
  • fbgetty
  • fgetty
  • rungetty

Din Linux-distribusjon kan komme med enten ps_getty eller agetty for tekst-terminaler. Noen distribusjoner leverer heller ikke. Dessverre kaller de ofte bare "getty", så du må kanskje bestemme hvilken du har siden argumentene du legger etter det i / etc / inittab er forskjellige. Debian bruker agetty (i util-Linux-pakken). RedHat og Fedora brukte ps_getty som er på: ps_getty

Som en siste utvei for å prøve å avgjøre hvilken getty du har, kan du sjekke ut kjørbar kode (vanligvis i / sbin). ps_getty har / etc / gettydefs innebygd i denne koden. For å søke etter det, gå til / sbin og skriv:strenger getty | grep getty Hvis getty er faktisk agetty vil ovennevnte resultere i ingenting. Men hvis du har agetty skrive:getty -hbør vise alternativene -hiLmw.

Hvis du ikke har getty vil du sjekke andre distribusjoner og romvesen Program for å konvertere mellom RPM og Debian-pakker. Kildekoden kan lastes ned fra Getty Software.

Hvis du ikke bruker modemstyringslinjer (for eksempel hvis du bare bruker minimumsantalet 3 ledere: send, motta og felles signal), bør du la getty vite dette ved hjelp av et "lokalt" flagg. Formatet av dette avhenger av hvilken getty du bruker.

Getty utganger etter pålogging (og kan respawn)

Når du logger inn, vil du legge merke til (ved å bruke "top", "ps -ax" eller "ptree") at getty-prosessen ikke lenger kjører. Hva skjedde med den? Hvorfor starter Getty på nytt hvis skallet ditt blir drept? Her er hvorfor.

Etter at du har skrevet inn brukernavnet ditt, tar Getty det og kaller loggprogrammet som forteller det ditt brukernavn. Getty-prosessen er erstattet av påloggingsprosessen. Innloggingsprosessen ber om passordet ditt, sjekker det og starter hva prosessen er spesifisert i passordfilen din. Denne prosessen er ofte bash-skallet. I så fall starter bash og erstatter innloggingsprosessen. Merk at en prosess erstatter en annen og at bash shell prosessen opprinnelig startet som getty prosessen. Konsekvensene av dette vil bli forklart nedenfor.

Nå i filen / etc / inittab, skal Getty respawn (restart) hvis den blir drept. Det står så på linjen som kaller getty. Men hvis bash shell (eller påloggingsprosessen) blir drept, responderer Getty (starter på nytt). Hvorfor? Vel, både innloggingsprosessen og bash er erstatninger for getty og arv

* Tekst-terminal Hvordan-til-indeks

signalforbindelsene etableres av sine forgjengere. Faktisk hvis du observerer detaljene, vil du legge merke til at utskiftingsprosessen vil ha samme prosess-ID som den opprinnelige prosessen. Dermed er bash slags getty i forkledning med samme prosess ID nummer. Hvis bash blir drept, er det akkurat som getty ble drept (selv om getty ikke kjører lenger). Dette resulterer i getty respawning.

Når en logger ut, blir alle prosessene på den serielle porten drept, inkludert bash-skallet. Dette kan også skje (hvis aktivert) hvis et hangup-signal sendes til seriell port med en dråpe DCD-spenning av modemet. Enten loggingen eller slippingen i DCD vil resultere i gettyresponsering. Man kan tvinge Getty til å respawn ved å manuelt drepe bash (eller logg inn) enten ved å trykke på k-tasten, etc. mens i "topp" eller med "drep" -kommandoen. Du må sannsynligvis drepe det med signal 9 (som ikke kan ignoreres).

Hvis getty løper fra kommandolinjen: Programmer blir stoppet

Du bør normalt kjøre getty fra innsiden / Etc / inittab og ikke fra kommandolinjen ellers kan noen programmer som kjører på terminalen bli uventet suspendert (stoppet). Her er hvorfor (hopp til neste avsnitt hvis hvorfor ikke er viktig for deg). Hvis du starter getty for å si ttyS1 fra kommandolinjen til en annen terminal, si tty1, så vil den ha tty1 som sin "kontrollerende terminal", selv om den faktiske terminalen den kjører på, er ttyS1. Dermed har den feil kontrollterminal. Men hvis det er startet inne i inittab-filen, vil det få ttyS1 som den kontrollerende terminalen (riktig).

Selv om kontrollterminalen er feil, virker innlogging på ttyS1 bra (siden du ga ttyS1 som et argument til getty). Standardinngang og -utgang er satt til ttyS1, selv om kontrollterminalen forblir tty11. Andre programmer som kjøres på ttyS1, kan arve denne standardinngangen / -utgangen (som er koblet til ttyS1) og alt er OK. Men noen programmer kan gjøre feilen ved å prøve å lese fra deres kontrollerende terminal (tty1) som er feil. Nå kan tty1 tro at disse programmene kjøres i bakgrunnen av tty1, så et forsøk på å lese fra tty1 (det burde vært ttyS1) resulterer i å stoppe prosessen som forsøkte å lese. (En bakgrunnsprosess får ikke lese fra sin kontrollerende terminal.). Du ser kanskje en melding som: "1 + Stoppet"på skjermen. På dette punktet står du fast siden du ikke kan samhandle med en prosess som prøver å kommunisere med deg via feil terminal. Selvfølgelig å unnslippe dette kan du gå til en annen terminal og drepe prosessen osv. .

agetty (kan bli kalt getty)

Et eksempel linje i / etc / inittab:

S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102

S1 er fra ttyS1. 23 betyr at getty kjøres ved å gå inn i løp nivå 2 eller 3. respawn betyr at hvis getty (eller en prosess som erstattet den som bash) blir drept vil getty automatisk starte opp (respawn) igjen. / sbin / getty er getty kommandoen. -L betyr Local (ignorer modemstyresignaler). -h (ikke vist i eksemplet) gjør det mulig å kontrollere maskinens strømstyring (samme som stty crtscts). 19200 er baudraten. ttyS1 betyr / dev / ttyS1 (COM2 i MS-DOS). vt102 er typen terminal og denne getty vil sette miljøvariabelen TERM til denne verdien. Det er ingen konfigurasjonsfiler. Skriv inn "init q" på kommandolinjen etter redigering av getty og du bør se en innloggingsprompt.

Agetty er automatisk deteksjon av paritetsproblemer

De agetty programmet vil forsøke å automatisk oppdage paritetssettet inne i terminalen (inkludert ingen paritet). Den støtter ikke 8-bits databyte plus 1-biters paritet. Se 8-bits databyte (pluss paritet). Hvis du bruker stty å sette paritet, agetty vil automatisk deaktivere den siden det i utgangspunktet vil at paritetsbiten skal komme gjennom som om det var en databit. Dette skyldes at den trenger å få den siste biten (muligens en paritetsbit) mens du skriver inn innloggingsnavnet slik at det kan automatisk oppdage paritet. Dermed hvis du bruker paritet, må du bare aktivere den i tekstterminalen og la agetty automatisk oppdag det og sett det på datamaskinen. Hvis terminalen din støtter mottatt paritet, vil påloggingsprompten bli søppel til du skriver noe slik at getty kan oppdage

paritet. Den ødelagte spørsmålet vil avholde besøkende, etc. fra å prøve å logge inn. Det kan være akkurat det du vil ha.

Det er noen ganger et problem med automatisk deteksjon av paritet. Dette skjer fordi du først skriver inn innloggingsnavnet ditt, agetty starter Logg Inn program for å avslutte å logge deg inn. Dessverre er det Logg Inn Programmet kan ikke oppdage paritet, så hvis getty programmet klarte ikke å bestemme pariteten da Logg Inn vil heller ikke kunne bestemme det. Hvis det første påloggingsforsøket feiler, Logg Inn vil la deg prøve igjen, etc. (alt med paritet satt feil). Til slutt, etter en rekke mislykkede forsøk på å logge på (eller etter en timeout) agetty vil starte opp igjen og starte påloggingssekvensene igjen. Når getty kjører igjen, kan det være mulig å oppdage pariteten på det andre forsøket, så alt kan da fungere OK.

Med feil paritet, Logg Inn programmet kan ikke lese riktig hva du skriver, og du kan ikke logge inn. Hvis terminalen støtter mottatt paritet, vil du fortsette å se en skjørt skjerm. Hvis getty ikke oppdager paritet, blir en / etc / issue-fil vanligvis dumpet til skjermen like før før spørringen, slik at flere forstyrrede ord kan vises på skjermen.

Hvorfor kan ikke paritet oppdage paritet ved første bokstav skrevet? Her er et eksempel: Anta at det oppdager en 8-bit byte med sin paritetsbit 0 (høy rekkefølge bit) og med et oddetall på 1-bits. Hvilken paritet er det? Vel, det ulige antallet 1 biter innebærer at det er merkelig paritet. Men det kan også bare være en 8-biters karakter uten paritet. Det er ingen måte så langt å avgjøre hvilken. Men så langt har vi eliminert muligheten for jevn paritet. Påvisning av paritet fortsetter således ved en eliminasjonsprosess.

Hvis den neste byte typen er lik den første og også bare eliminerer muligheten for jevn paritet, er det fortsatt umulig å bestemme paritet. Denne situasjonen kan fortsette på ubestemt tid, og i sjeldne tilfeller vil innlogging mislykkes til du endrer innloggingsnavnet ditt. Hvis agetty finner en paritetsbit på 1, antas det at dette er en paritetsbit og ikke en høyordningsbit av en 8-biters tegn. Det antas derfor at du ikke bruker meta-tegn (høyt sett) i brukernavnet ditt (det vil si at navnet ditt er i ASCII).

Man kan komme inn på en "login loop" på ulike måter. Anta at du bare skriver inn et enkelt bokstav eller to for innloggingsnavnet ditt, og trykk deretter på retur. Hvis disse bokstavene ikke er tilstrekkelige for paritetsdeteksjon, har innloggingsrunder før paritet blitt detektert. Noen ganger skjer dette problemet hvis du ikke har terminalen på og / eller tilkoblet når Agetty først starter.

Hvis du sitter fast i denne "innloggingssløyfen", er det en måte å treffe returnøkkelen flere ganger til du får Getty-påloggingsprompten. En annen måte er å bare vente et minutt eller så for en timeout. Deretter vil getty login prompt bli satt på skjermen av getty programmet, og du kan prøve igjen å logge inn.

8-bits databyte (pluss paritet)

Dessverre kan agetty ikke oppdage denne pariteten.Fra slutten av 1999 har det ikke noe alternativ for å deaktivere automatisk deteksjon av paritet og vil dermed oppdage feil paritet. Resultatet er at innloggingsprosessen vil bli ødelagt og paritet vil bli satt feil. Dermed virker det ikke mulig å prøve å bruke 8-bits databyte med paritet.

getty (del av getty_ps)

(Det meste av dette er fra den gamle Serial-HOWTO av Greg Hankins)For denne getty må man både legge inn oppføringer i en konfigurasjonsfil og legge til en oppføring i / Etc / inittab. Her er noen eksempler på oppføringer som skal brukes til terminalen din, som du legger inn i konfigurasjonsfilen / etc / gettydefs.

Merk at DT38400, DT19200, etc., bare er etiketter og må være det samme som du bruker / Etc / inittab.

Hvis du vil, kan du lage getty skriv ut interessante ting i påloggingsbanneret. I eksemplene mine har jeg systemnavnet og serienummeret skrevet ut. Du kan legge til andre ting: blockquote

skygge = ja

Når du er ferdig med å redigere / etc / gettydefs, kan du bekrefte at syntaksen er riktig ved å gjøre:

Pass på at det ikke er noen andre getty eller uugetty config-filen for den serielle porten som terminalen din er knyttet til, for eksempel (/etc/default/{uu}getty.ttySN eller /etc/conf.{uu}getty.ttySN), da dette vil sannsynligvis forstyrre kjøring getty på en terminal. Fjern slike motstridende filer hvis de kommer ut.

Rediger din / Etc / inittab fil for å kjøre getty på seriell port (erstatter i riktig informasjon for omgivelsene din - port, hastighet og standardterminal):

På dette tidspunktet bør du se en påloggingsprompt på terminalen din. Du må kanskje slå tilbake for å få terminalens oppmerksomhet.

mgetty

"M" står for modem. Dette programmet er hovedsakelig for modemer, og fra midten av 2000 vil det trenge omkompilering for å bruke det til tekstterminaler (med mindre du bruker maskinvareflytkontroll - og det krever vanligvis en håndlagd kabel). For dokumentasjonen for direkte tilkoblede terminaler, se avsnittet "Direkte" i håndboken: mgetty.texi.

Se på de siste linjene i /etc/mgetty/mgetty.config for et eksempel på å konfigurere det for en terminal. Med mindre du sier "toggle-dtr no", vil det tro at du har et modem og slippe (negere) DTR-pin på PCen for å forsøke å nullstille det ikke-eksisterende modemet. I motsetning til andre gettys, vil mgetty ikke knytte seg til en terminal før noen treffer hvilken som helst nøkkel i den terminalen, slik at du får se en? for terminalen i topp eller ps til dette skjer. Loggene inn / Var / log / mgetty / kan vise noen advarselsmeldinger som bare gjelder for modemer som du kan ignorere.

Her er et eksempel på den enkle linjen du legger inn / Etc / inittab: