Ymmärrä / etc / inittab
On helmikuu 12, 2021 by admin Käytän seuraavaa /etc/inittab
-tiedostoa (systemv):
# /etc/inittab: init(8) configuration. # $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $ # The default runlevel. id:5:initdefault: # Boot-time system configuration/initialization script. # This is run first except when booting in emergency (-b) mode. si::sysinit:/etc/init.d/rcS # What to do in single-user mode. ~~:S:wait:/sbin/sulogin # /etc/init.d executes the S and K scripts upon change # of runlevel. # # Runlevel 0 is halt. # Runlevel 1 is single-user. # Runlevels 2-5 are multi-user. # Runlevel 6 is reboot. l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # Normally not reached, but fallthrough in case of emergency. z6:6:respawn:/sbin/sulogin S0:12345:respawn:/sbin/getty -L 115200 ttyS0
Ymmärränkseni, miten asiat todella toimivat, arvostan, jos vastauksesi kysymyksiin 1–3 sinulle erotetaan kaksi tilannetta:
- Olen kytketty järjestelmään sarjaportin avulla.
- Minulla on ”tavallinen” pöytätietokone.
Kysymykset:
-
Jos lisätään toinen getty-linja, kun linux käynnistyy, näen kaksi erillistä päätelaitetta?
-
Jos avaan useita getty-viivoja, kuinka määritin minkä getty suorittaa
si::sysinit:/etc/init.d/rcS
-komennoni ja mikä getty suorittaa muut komentosarjan komennot? (ne, jotka suorittavat komentosarjoja järjestelmän suoritustason mukaan)toisin sanoen:
/etc/inittab
-tiedostossa – voinko määrittää erilaisia komentoja eri gettyille? (tarkoitan terminaaleille, jotka avautuvat näiden gettyjen avulla) -
/etc/init.d/rc5 -kansion viimeinen komentosarja suoritetaan seuraava komento:
su nobody -c /bin/sh
ja lähtö on:
sh: cannot set terminal process group (1618): Inappropriate ioctl for device sh: no job control in this shell sh-4.3$ whoami nobody
Joten vahvistin että en ole kukaan, mutta miksi se kirjoittaa kaksi ensimmäistä riviä? myös miksi kehote on sh-4.3 $ eikä kukaan @ …
-
Käytän sarjaliitäntää. Voinko muuttaa / etc / inittab -tiedostoa ja viimeistä komentosarjaa jonka suorittaa init:
- ohjelman suorittaminen ennen sisäänkirjautumista matalan käyttöoikeuden käyttäjänä (init-prosessi odottaa päättymistä)
- kun ohjelma poistuu, saat säännöllisen kirjautumiskehote järjestelmään
- mikä on paras tapa luoda alhainen etuoikeutettu käyttäjä ja antaa hänen suorittaa tämä ohjelma init-prosessin aikana (jos en halua käyttää kukaan käyttäjää)
vastaus
Kysymys 1:
Kyllä, lisäämällä lisää getty
linjat, saat enemmän päätelaitteita rinnakkain. Vain yksi getty
voidaan liittää yhteen päätelaitteeseen kerrallaan, joten vain yksi getty
sarjaporttia kohti on mahdollista. Tavallisella pöytätietokoneella Linux-ydin määrittelee useita virtuaalikonsoleita, joihin pääsee Control + Alt + FX -näppäinyhdistelmillä ja jotka vastaavat /dev/ttyX
-laitteet (X = luku). Tarkka kokoonpano voi vaihdella jakelujen välillä, mutta yleensä valtavirran jakelussa noin kahdella ensimmäisellä /dev/ttyX
laitteella on getty
määritetty heille, kun järjestelmä toimii normaalisti. openvt
– ja deallocvt
-komennoilla voit lisätä tai poistaa virtuaalikonsoleita ja käynnistää prosesseja (jotka voivat olla mitä tahansa prosesseja, ei välttämättä getty
s).
/dev/tty0
on erityinen: se viittaa siihen, kumpi virtuaalikonsoli on tällä hetkellä valittu. /dev/console
on samanlainen erikoislaite, joka viittaa mihin tahansa TTY-laitteeseen, joka on määritelty ensisijaiseksi ytintason järjestelmäkonsoliksi. Pöytätietojärjestelmissä se on oletusarvoisesti aliakseksi /dev/tty0
, mutta käynnistysvaihtoehdolla console=
voit vaihtaa sen sarjaan satamaan. Esimerkiksi Joissakin sulautetuissa arkkitehtuureissa se voi oletusarvoisesti olla sarjaportti. Apuohjelmat, kuten xconsole
, voivat toimia myös lisäulostulona tiedostolle /dev/console
.
Aikana, kun tietokoneet olivat suuria monikaappisia asioita erillisissä tietokonehuoneissa, viestin lähettäminen /dev/console
olisi ollut tapa tavoittaa päivystävä järjestelmäoperaattori fyysisesti tietokoneen lähellä, mikä on voinut olla hyödyllistä esimerkiksi vaihda nauhoja tai levypaketteja. Nykyaikaisissa järjestelmissä erityisesti diviville /dev/console
lähetetyt viestit ovat yleensä käynnistys- / sammutusviestejä tai mahdollisesti viimeinen kanava kiireellisiä hälytyksiä varten vikatilanteista, jotka saattavat vaikuttaa verkon tai tallennustilan käyttöön tai jopa liittyy ytimen kaatumiseen: ”fyysisestä laitteistosta vastaavan henkilön on nähtävä tämä ja tavalliset lokitiedostot ovat jostain syystä käyttökelvottomia.”
Kysymys 2:
Pelkään, että sinulla on väärinkäsitys täällä. Linjaa sysinit
ja muita /etc/inittab
-rivejä ei liitetä ryhmään getty
prosessoi ollenkaan. Jokaisella komennolla, joka suoritetaan osoitteesta inittab
, ellei toisin mainita, sen vakio-tulo-, lähtö- ja virtavirrat liittyvät /dev/console
.
Rivit getty
määrittelevät käyttämänsä TTY-laitteen ja prosessin getty
on sisäänrakennettu koodi, joka määrittää kyseisen TTY-laitteen itselleen ja kaikki heidän aliprosessinsa elleiTämä ja TTY-laitteen asetusten palauttaminen ovat suurin osa getty
-tarkoitusta: /etc/issue
ja kirjautumiskehotteen näyttäminen, hyväksymällä käyttäjänimi, TERM-ympäristömuuttujan asettaminen ja TTY-kirjautumisprosessin seuraavan vaiheen aloittaminen (yleensä /bin/login
mutta muokattavissa) ovat käytännössä vain pieniä osia.
Huomaa, että siellä on käytäntö, jonka mukaan TTY-laitteiden kahden merkin tunnuskentän rivin inittab
ensimmäisessä sarakkeessa on vastattava kyseisen TTY-laitteen nimeä /dev/tty
etuliite, joten /dev/ttyS0
saa inittab-rivin tunnuksen S0
ja niin edelleen. ei välttämättä liity mihinkään TTY: hen lainkaan (tai tuottaa vain hätätilanteita / dev / konsolille tarvittaessa), tunnus voi olla mikä tahansa, mikä ei ole ristiriidassa TTY-laitelinjan tunnusten kanssa.
(Takaisin sisään päivä, jolloin sarjaan liitetyt päätteet olivat ei rm, TTY-laitteen asetusten saaminen oikealle päätelaitteelle linjan toisessa päässä ja kyseisen päätelaitteen palauttaminen tunnettuun tilaan sisäänkirjautumista varten olivat ei-triviaalisia tehtäviä, koska kilpailevia päätetyyppistandardeja oli paljon.)
Jos määrität inittab
-rivin suorittamaan komentosarjan, voit esimerkiksi tarkistaa, onko tietyn /dev/ttyX
virtuaalikonsolin kanssa laite on olemassa. Jos näin ei ole, voit luoda openvt -c X <command>
-ohjelmiston virtuaalikonsolin luomiseksi ja komennon käynnistämiseksi siinä; jos virtuaalikonsolilaite on jo olemassa, voit yksinkertaisesti käynnistää minkä tahansa haluamasi komennon vakiosyötöllä, -lähdöllä ja virheellä, joka ohjataan siihen. Voit esimerkiksi määrittää seuraavanlaisen inittab-rivin:
6:345:respawn:/usr/local/sbin/myscript
ja sitten /usr/local/sbin/myscript
jotain tällaista ( vastuuvapauslauseke: ei testattu, minulla ei ole tällä hetkellä järjestelmää, jossa on SysVinit, muokkaa rohkeasti, jos voit parantaa sitä:
#!/bin/sh if [ -c /dev/tty6 ]; then exec <some command> </dev/tty6 >/dev/tty6 2>&1 else exec openvt -c 6 -w <some command> fi
respawn
rivillä inittab
varmistaa, että prosessi käynnistetään automaattisesti uudelleen, jos se kuolee jostain syystä. 345
on luettelo SysVinit-ajon tasoista, joita tämän prosessin tulisi suorittaa. Jos tarvitset sitä suoritettavaksi kaikilla tavallisilla ajotasoilla, kirjoita 12345
.
Huomaa, että tämä toimii tarkoitetulla tavalla vain, jos inittab-rivi sijoitetaan rivin sysinit
jälkeen, joten udev
-alustan voidaan olettaa olevan täydellinen. Jos haluat tehdä tämän init-prosessin alkuvaiheessa, saatat joutua huolehtimaan todellisten laitesolmujen luomisesta laitteille, joissa ohjaimet on jo ladattu ensin; kun udev
on käynnissä, sen tulisi luoda laitesolmut automaattisesti, kun laiteohjaimet alustetaan.
Jos käytät sarjaporttia, openvt
-komentoa ei käytetä.
Joten kyllä, voit varmasti liittää erilaisia komentoja erilaisiin TTY-laitteisiin. Se auttaa, jos komennoissa on sisäänrakennetut palvelut, kuten getty
s, mutta voit tehdä sen myös komentosarjojen avulla.
(Jos määrität jotain monimutkaisempaa kuin yksinkertaista tail -f
, jotta voit tarkastella pysyvästi jotakin lokia muuten käyttämättömässä virtuaalikonsolissa, sinun tulee lukea man setsid
ja tarkista, voidaanko sitä soveltaa suunnittelemallesi.)
Kysymys 3:
TTY-istunnon alustamiseen liittyy enemmän tietylle ei-juurikäyttäjälle kuin vain käynnistämällä komentotulkki su
.
Virheilmoitukset
sh: cannot set terminal process group (1618): Inappropriate ioctl for device sh: no job control in this shell
johtuvat todennäköisesti siitä, että kuori on liitetty /dev/console
-laitteeseen eikä tiettyyn TTY-laitteeseen. Koska /dev/console
on vain Alias nykyiselle järjestelmäkonsolille mikä tahansa, sillä ei ole käytettävissään kaikkia TTY-ohjauksen ioctl-toimintoja.
Jos ei ole kirjautumiskomentosarjaa, joka antaisi hyödyllisemmän arvon ympäristömuuttujalle PS1
, oletusarvoinen kehote /bin/sh
voi olla yksinkertaisesti sh-<version>$
.
Kysymys 4:
Kyllä, voit. Määritä ”viimeinen komentosarja” wait
-tyyppiseksi riviksi inittab
ja sijoita se ennen sarjaliittimiäsi vastaava getty
-rivi.
Tietämättä paljon enemmän ympäristöstäsi, on hyvin vaikea sanoa, mikä olisi paras tapa luoda alhaisen käyttöoikeuden omaava käyttäjä tällaisiin tarkoituksiin.
Kommentit
vastaus
-
Kyllä, olettaen, että rivi annetaan yksilöllinen tunniste ja määritetty päätelaite on käytettävissä:
S1:12345:respawn:/sbin/getty -L 115200 ttyS1
avaa päätelaitteen sarjaporttiin, joka on liitetty
ttyS1
. -
inittab
-viivan rivit eivät ole peräkkäisiä tai liittyvät kirjautumiseen. Jokainen rivi kuvaa toimintaa, joka suoritetaan tietyssä ajotasojen sarjassa. Sitensi::sysinit:/etc/init.d/rcS
määrittää, ettäinit
pitäisi suorittaa/etc/init.d/rcS
, kun se käsittelee järjestelmän alustusta; tämä tapahtuu ennen sisäänkirjautumista. (Katso lisätietojainittab(5)
-sivulta .).Erilaisten komentojen määrittäminen eri
getty
s tietyissä päätelaitteissa, sinun tulisi määrittää itsegetty
-kutsu esimerkiksi muuttamallalogin
käynnistettävä ohjelma (-l
-vaihtoehto useimmissagetty
-toteutuksissa):S0:12345:respawn:/sbin/getty -L 115200 -l /bin/my-t0-login ttyS0 S1:12345:respawn:/sbin/getty -L 115200 -l /bin/my-t1-login ttyS1
-
iv
suoritetaan ennen sisäänkirjautumista, eikä sen suorittamia ohjelmia ole kytketty päätelaitteeseen (”oikein”, mikä on se, mitägetty
tekee – se avaa päätelaitteen sinulle ja yhdistää aloittamansa ohjelmat siihen), joten kunsu nobody -c /bin/sh
kutsutaan, shell ei löydä odotettua päätelaitteen asetusta ja poistaa työn hallinnan käytöstä.sh-4.3$
-kehote on Bash 4.3: n oletuskehote, kun sitä käytetään nimellä/bin/sh
.
Jos ohjelman on tarkoitus toimia vasta, kun käyttäjä alkaa kirjautua sisään, voit kytkeä sen sisäänkirjautumisjärjestykseen, jota getty
käyttää; mutta tällainen ohjelma toimisi pääkäyttäjänä. Riippuen siitä, mitä pidät tarkalleen, sinun on todennäköisesti parempi käyttää initscriptä kuin /etc/inittab
mukautusta tai sudo
ja shellin käynnistyskomentosarjat.
Kommentit
- kiitos uusinnastasi. Voinko pyytää smailailmoitusta sec.2: sta? miten voin muokata kirjautumiskomentoa jokaiselle eri gettylle?
- Valmis, katso päivitys.
- kiitos! vain tarkistaaksesi ymmärsinkö oikein: getty-prosessi suorittaa oletusarvoisesti komennon / bin / login, joka suorittaa järjestelmän kirjautumisesta vastaavan prosessin. Nyt getty suorittaa toisen komennon, jokaisen komennon, jonka ’ valitsen, eikä se kutsu järjestelmän kirjautumisprosessia kuten aiemmin … olenko oikeassa?
- Kyllä, se on totta. Avain saa
getty
avaamaan TTY: n sinulle; sen tavanomainen toiminta on odottaa kirjautumisnimeä ja suorittaa sitten TTY: hen liitettylogin
;login
odottaa salasanaa, tarkistaa sen ja käynnistää kuoren, joka on myös yhdistetty TTY: hen. Jos vaihdatlogin
osan, sinun on varmistettava, että korvaava ohjelma käyttäytyy kutenlogin
. - Esimerkiksi, jos haluan ohittaa kirjautumisvaiheen – voidakseni avata järjestelmän pääkäyttäjällä kirjoittamatta käyttäjänimeä tai salasanaa. Voin käyttää: S0: 12345: respawn: / sbin / getty -L 115200 -l – / bin / sh ttyS0 tai käyttää: S0: 12345: respawn: / sbin / getty -L 115200 -l [my_script_path] ttyS0 ja sen sisällä komentosarja i ’ suoritan komennon – / bin / sh ja muut?
Vastaa
Juuri sekunti (pitkä!) vastaus on lähetetty. Minun on sanottava, että ensimmäinen selittää melko hyvin. Tällä hetkellä haluan kommentoida kolmatta kohtaa: Kyse ei ole pelkästään ajoituksesta vaan prosesseista, jotka ohjaavat ”todellista virtuaalista” ttyä, eikä vain ”konsolinuken”.
Ennen kuin voit aloittaa shellin ”työnhallinnalla”, sinun on määritettävä eli avattava ttyN. ”Yleinen” -komento on getty
. Sieltä tty-jotain saat aloittaa kuoren, ei vain sen jälkeen .
Se on kuin yritettäisiin ensin käynnistää ikkunanhallinta ja sitten xorg sen sijaan, että ”käynnistettäisiin” ne yhdessä xinitin kanssa. Mielestäni. ”istunnonjohtaja”.
Seurauksena
xx:12:...:program
ja päinvastoin:
aa:1:...:pr_1 bb:1:...:pr_2
… saat N: M-relaation (saat myös sotkun, jos väärinkäytät – monet RL: t, joista jokaisella on monia erilaisia progeja) Voit mennä pitkälle siinä, mutta koska aina erilaisia RC- ”standardeja” on vallannut. ”Runcoms”. Niiden kanssa inittab näyttää yksinkertaiselta, mutta kaikki monimutkaisuudet ovat näissä skripteissä.
Mutta inittab näyttää yksinkertaiselta ja oikealta – vain viimeinen kommentti ja ”z6” -merkintä …
Ehkä ”su kukaan” tarvitsee vain ”getty … ttyN” ennen / ympärillä. su
login
-kohdan sijaan, eikä uudelleensyntymistä. Pitäisi antaa ainakin toinen virheilmoitus kuin ”sopimaton”.
Päätelmä (toisen vastauksen lukemisen jälkeen): Sinun ei tarvitse monimutkaista init.d
-järjestelmää, raaka inittab on tarpeeksi joustava. Sinun tarvitsee vain saada käsite ja yksityiskohdat oikealla.
Voit määrittää kolme ajotasoa: yhden ttyNs, toisen ttySN ja yhden molemmat käynnistävän RL. Se on käynnistysparametri, jonka voit lisätä käynnistyslataimen kanssa. ”5” on tapauksessasi vain oletusarvo. Valitset ytimen, juuren = ja ajotason, johon aloittaa.
”Respawn” -toiminto on sysvinit, jota todella tarvittiin / tarvitaan Paljon enemmän se ei tee, ja vähemmän olisi ollut mahdollista toteuttaa komentosarjassa. Mutta jos poistut (tai kaatumasta) ”viimeiseltä” kuoritasolta, tarvitset turvaverkon.
sysvinit voi jopa havaita väärä kokoonpano tekemällä virhe ”kutu liian nopeasti – sivuuttamatta 5 minuuttia …”.
getty
on prosessi; mitä puhut, on TTY-laite . Ydin avasi ensimmäisen sinulle ja init-skripteille;/dev/console
on alias ” ensimmäiselle TTY-laitteelle, jonka ydin avasi ja käytti ”. Jos käyttäjätililläsi on TTY-laitteen luku- ja kirjoitusoikeudet, voit vain alkaa käyttää sitä (eigetty
tarvita), mutta voi olla hyvä idea asettaa TERM-muuttuja oikein:TERM=linux top </dev/tty8 >/dev/tty8 2>&1 &
taiTERM=vt100 top </dev/ttyS1 >/dev/ttyS1 2>&1 &
käynnistäätop
-komennon 8. virtuaalikonsolissa tai 2. sarjaportti.getty
-prosessi, se aiheuttaa sekaannusta. input & -lähtö, koska nämä kaksi prosessia taistelevat tulon puolesta ja niiden lähdöt sekoittuvat yhteen.getty
-prosessit käynnistetään vasta sen jälkeen, kun/etc/init.d/rc 5
ja kaikki sen aloittamat komentosarjat ovat valmiit .