Ero sivun ”Palvelinohjelma xinetd:n avulla” versioiden välillä
pEi muokkausyhteenvetoa |
LP (keskustelu | muokkaukset) (→Katso myös: -> inetd, xinetd) |
||
(6 välissä olevaa versiota 3 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
Linuxissa on hyvin helppoa ohjata mikä tahansa normaali näppäimistöä lukeva ja näytölle tulostava ohjelma toimimaan verkkopalveluna. Tässä esimerkkinä käytetään bc-ohjelmaa, joka on yksinkertainen laskin. | Linuxissa on hyvin helppoa ohjata mikä tahansa normaali näppäimistöä lukeva ja näytölle tulostava ohjelma toimimaan verkkopalveluna. Tässä esimerkkinä käytetään bc-ohjelmaa, joka on yksinkertainen laskin. | ||
== bc-ohjelma == | == bc-ohjelma == | ||
bc on yksinkertainen laskin. Voit käynnistää sen ilman optioita pelkällä bc-komennolla. Kirjoittamalla 1+2 ja painamalla enter pitäisi tulla tulokseksi 3. Lopettaa voit painamalla Ctrl-D. | [[bc]] on yksinkertainen laskin. Voit käynnistää sen ilman optioita pelkällä bc-komennolla. Kirjoittamalla 1+2 ja painamalla enter pitäisi tulla tulokseksi 3. Lopettaa voit painamalla Ctrl-D. | ||
bc on siis samanlainen ohjelma kuin konsoliohjelmat yleensäkin: se lukee syötettä rivi kerrallaan, vastaa komentoihin ja lopettaa kun syöte loppuu. Syötteen voit ottaa esimerkiksi [[Komentorivin perusteet|putkesta]]: kokeile sanoa | bc on siis samanlainen ohjelma kuin konsoliohjelmat yleensäkin: se lukee syötettä rivi kerrallaan, vastaa komentoihin ja lopettaa kun syöte loppuu. Syötteen voit ottaa esimerkiksi [[Komentorivin perusteet|putkesta]]: kokeile sanoa | ||
echo "1+2" | bc | |||
== Miten se saadaan verkkoon? == | == Miten se saadaan verkkoon? == | ||
[[Asetustiedosto]]ssa <tt>/etc/services</tt> on lueteltu palveluiden nimiä ja niitä vastaavia TCP- ja UDP-portteja. Sieltä pitäisi löytyä esimerkiksi seuraavia rivejä: | |||
ssh 22/tcp # SSH Remote Login Protocol | ssh 22/tcp # SSH Remote Login Protocol | ||
Rivi 18: | Rivi 16: | ||
http 80/tcp www www-http # WorldWideWeb HTTP | http 80/tcp www www-http # WorldWideWeb HTTP | ||
Yllä oleva ei suinkaan tarkoita, että koneessasi olisi [[ssh]]-palvelin, [[telnet]]-palvelin ja http-palvelin. Palvelut vain on valmiiksi nimetty, niin että voit vaikkapa sanoa "telnet www.flug.fi http" eikä "telnet www.flug.fi 80". Lisätään ensiksi tänne oma palvelumme, vaikkapa porttinumeroon 2008, tekemällä mallin mukaan uusi rivi: | |||
remote-bc 2008/tcp # Etäkäytettävä laskin | |||
remote-bc 2008/tcp # | |||
Seuraavaksi siirry hakemistoon <tt>/etc/xinetd.d/</tt> ja tee sinne tiedosto nimeltä <tt>remote-bc</tt> ja tiedoston sisällöksi seuraavaa: | Seuraavaksi siirry hakemistoon <tt>/etc/xinetd.d/</tt> ja tee sinne tiedosto nimeltä <tt>remote-bc</tt> ja tiedoston sisällöksi seuraavaa: | ||
# | # Tälla voipi laskea 1+2 etana! Jee! | ||
service remote-bc | service remote-bc | ||
{ | { | ||
Rivi 37: | Rivi 33: | ||
} | } | ||
Yllä server- ja server_args -määrittelyt tarkoittavat, että ajetaan komento /usr/bin/bc --interactive -q . --interactive käskee bc-ohjelmaa olettamaan että syöte tulee "normaalisti", vaikka se todellisuudessa tuleekin verkosta; -q tarkoittaa "quiet" eli alkuteksti jätetään pois. user -määrittely kertoo minkä | Yllä server- ja server_args -määrittelyt tarkoittavat, että ajetaan komento <tt>/usr/bin/bc --interactive -q</tt> . <tt>--interactive</tt> käskee bc-ohjelmaa olettamaan että syöte tulee "normaalisti", vaikka se todellisuudessa tuleekin verkosta; <tt>-q</tt> tarkoittaa "quiet" eli alkuteksti jätetään pois. user -määrittely kertoo minkä [[käyttäjä]]n oikeuksilla ohjelma ajetaan, ja turvallisuussyistä on tärkeää että annetaan mahdollisimman vähän oikeuksia omaava käyttäjä. socket_type -määrittelyn pitää olla yllä oleva stream, ja disable-määrittelyn tietenkin "no". wait kertoo että uuden yhteydenoton tullessa ei odoteta vanhan loppumista: siis useampi käyttäjä voi ajaa bc-ohjelmaa samaan aikaan. | ||
Nyt kaiken pitäisi olla valmista. Uudelleenkäynnistä xinetd sanomalla | Nyt kaiken pitäisi olla valmista. Uudelleenkäynnistä xinetd sanomalla | ||
/etc/rc.d/init.d/xinetd restart | |||
tai Debian-pohjaisissa järjestelmissä | tai Debian-pohjaisissa järjestelmissä | ||
/etc/init.d/xinetd restart | |||
ja testaa sanomalla | ja testaa sanomalla | ||
telnet localhost 2008 | |||
Lopettaa voit nytkin Ctrl-D -näppäilyllä. | Lopettaa voit nytkin Ctrl-D -näppäilyllä. | ||
== Palomuuriin reikä == | == Palomuuriin reikä == | ||
Yllä otettiin telnet -yhteys localhostiin, ts. ei oikeasti minnekään vaan kierrätettiin verkkoyhteys omalle koneelle. Muualta voi yhteyden ottaa, jos palomuuri ei estä sitä. Palomuurin konfigurointia tämä ohje ei käsittele enempää, mutta esimerkiksi ipchains-muurille käsky | Yllä otettiin telnet-yhteys localhostiin, ts. ei oikeasti minnekään vaan kierrätettiin verkkoyhteys omalle koneelle. Muualta voi yhteyden ottaa, jos palomuuri ei estä sitä. Palomuurin konfigurointia tämä ohje ei käsittele enempää, mutta esimerkiksi 2.2-sarjan ja sitä vanhemmissa ytimissä käytössä olleelle ipchains-muurille käsky | ||
ipchains -A input -s 1.2.3.0/255.255.255.0 -d 0/0 2008 -p tcp -y -j ACCEPT | |||
avaa aliverkkoon 1.2.3.* portin 2008. | avaa aliverkkoon 1.2.3.* portin 2008. | ||
Uudemmalle iptablesille löytyy ohjeet artikkelista [[iptables]]. | |||
== Lisätietoa? == | == Lisätietoa? == | ||
Verkkopalvelujen virittäminen voi toki olla paljon monimutkaisempaakin, tässä esitettiin vain yksinkertainen perustapaus. Lisätietoa saat komennoilla | Verkkopalvelujen virittäminen voi toki olla paljon monimutkaisempaakin, tässä esitettiin vain yksinkertainen perustapaus. Lisätietoa saat komennoilla | ||
<tt>man xinetd</tt> ja <tt>man xinetd.conf</tt>, joskin ohjeet ovat melko kryptisiä. Hyvää yleisesitystä aiheesta | <tt>man xinetd</tt> ja <tt>man xinetd.conf</tt>, joskin ohjeet ovat melko kryptisiä. Hyvää yleisesitystä aiheesta ''Miten Internet toimii'' ei tämän kirjoittaja tunne. | ||
== telnet-komento skripteissä == | == telnet-komento skripteissä == | ||
Telnet-yhteyden muodostuminen voi kestää hetken. Siksi yleensä kannattaa sanoa esimerkiksi | Telnet-yhteyden muodostuminen voi kestää hetken. Siksi yleensä kannattaa sanoa esimerkiksi | ||
([[sleep]] 0.0001 ; [[echo]] "1+2" ; sleep 0.0001) | telnet localhost 2008 > tulos.txt | |||
jolloin ensin odotetaan 100 millisekuntia, sitten lähetetään komento, ja sitten odotetaan toiset 100 millisekuntia jotta vastaus ehtii tulla. | jolloin ensin odotetaan 100 millisekuntia, sitten lähetetään komento, ja sitten odotetaan toiset 100 millisekuntia jotta vastaus ehtii tulla. | ||
Tällä tavalla voi tarvittaessa vaikkapa selvittää levytilan käytön | Tällä tavalla voi tarvittaessa vaikkapa selvittää esimerkiksi levytilan käytön aina halutessaan, eikä tarvitse kirjautua koneelle ssh-yhteydellä, kunhan vain tekee sopivan ohjelman, joka tulostaa halutut tiedot. Myös omia verkko-ohjelmia on helppo kokeilla tällaisella kokeilupalvelimella. | ||
==Katso myös== | |||
* [[xinetd]] | |||
* [[inetd]] | |||
[[Luokka:Verkko]] | [[Luokka:Verkko]] | ||
[[Luokka:Ohjeet]] | |||
[[Luokka:Palvelimet]] |
Nykyinen versio 12. maaliskuuta 2008 kello 14.43
Linuxissa on hyvin helppoa ohjata mikä tahansa normaali näppäimistöä lukeva ja näytölle tulostava ohjelma toimimaan verkkopalveluna. Tässä esimerkkinä käytetään bc-ohjelmaa, joka on yksinkertainen laskin.
bc-ohjelma[muokkaa]
bc on yksinkertainen laskin. Voit käynnistää sen ilman optioita pelkällä bc-komennolla. Kirjoittamalla 1+2 ja painamalla enter pitäisi tulla tulokseksi 3. Lopettaa voit painamalla Ctrl-D.
bc on siis samanlainen ohjelma kuin konsoliohjelmat yleensäkin: se lukee syötettä rivi kerrallaan, vastaa komentoihin ja lopettaa kun syöte loppuu. Syötteen voit ottaa esimerkiksi putkesta: kokeile sanoa
echo "1+2" | bc
Miten se saadaan verkkoon?[muokkaa]
Asetustiedostossa /etc/services on lueteltu palveluiden nimiä ja niitä vastaavia TCP- ja UDP-portteja. Sieltä pitäisi löytyä esimerkiksi seuraavia rivejä:
ssh 22/tcp # SSH Remote Login Protocol telnet 23/tcp http 80/tcp www www-http # WorldWideWeb HTTP
Yllä oleva ei suinkaan tarkoita, että koneessasi olisi ssh-palvelin, telnet-palvelin ja http-palvelin. Palvelut vain on valmiiksi nimetty, niin että voit vaikkapa sanoa "telnet www.flug.fi http" eikä "telnet www.flug.fi 80". Lisätään ensiksi tänne oma palvelumme, vaikkapa porttinumeroon 2008, tekemällä mallin mukaan uusi rivi:
remote-bc 2008/tcp # Etäkäytettävä laskin
Seuraavaksi siirry hakemistoon /etc/xinetd.d/ ja tee sinne tiedosto nimeltä remote-bc ja tiedoston sisällöksi seuraavaa:
# Tälla voipi laskea 1+2 etana! Jee! service remote-bc { socket_type = stream wait = no user = nobody server = /usr/bin/bc server_args = --interactive -q disable = no }
Yllä server- ja server_args -määrittelyt tarkoittavat, että ajetaan komento /usr/bin/bc --interactive -q . --interactive käskee bc-ohjelmaa olettamaan että syöte tulee "normaalisti", vaikka se todellisuudessa tuleekin verkosta; -q tarkoittaa "quiet" eli alkuteksti jätetään pois. user -määrittely kertoo minkä käyttäjän oikeuksilla ohjelma ajetaan, ja turvallisuussyistä on tärkeää että annetaan mahdollisimman vähän oikeuksia omaava käyttäjä. socket_type -määrittelyn pitää olla yllä oleva stream, ja disable-määrittelyn tietenkin "no". wait kertoo että uuden yhteydenoton tullessa ei odoteta vanhan loppumista: siis useampi käyttäjä voi ajaa bc-ohjelmaa samaan aikaan.
Nyt kaiken pitäisi olla valmista. Uudelleenkäynnistä xinetd sanomalla
/etc/rc.d/init.d/xinetd restart
tai Debian-pohjaisissa järjestelmissä
/etc/init.d/xinetd restart
ja testaa sanomalla
telnet localhost 2008
Lopettaa voit nytkin Ctrl-D -näppäilyllä.
Palomuuriin reikä[muokkaa]
Yllä otettiin telnet-yhteys localhostiin, ts. ei oikeasti minnekään vaan kierrätettiin verkkoyhteys omalle koneelle. Muualta voi yhteyden ottaa, jos palomuuri ei estä sitä. Palomuurin konfigurointia tämä ohje ei käsittele enempää, mutta esimerkiksi 2.2-sarjan ja sitä vanhemmissa ytimissä käytössä olleelle ipchains-muurille käsky
ipchains -A input -s 1.2.3.0/255.255.255.0 -d 0/0 2008 -p tcp -y -j ACCEPT
avaa aliverkkoon 1.2.3.* portin 2008. Uudemmalle iptablesille löytyy ohjeet artikkelista iptables.
Lisätietoa?[muokkaa]
Verkkopalvelujen virittäminen voi toki olla paljon monimutkaisempaakin, tässä esitettiin vain yksinkertainen perustapaus. Lisätietoa saat komennoilla man xinetd ja man xinetd.conf, joskin ohjeet ovat melko kryptisiä. Hyvää yleisesitystä aiheesta Miten Internet toimii ei tämän kirjoittaja tunne.
telnet-komento skripteissä[muokkaa]
Telnet-yhteyden muodostuminen voi kestää hetken. Siksi yleensä kannattaa sanoa esimerkiksi
(sleep 0.0001 ; echo "1+2" ; sleep 0.0001) | telnet localhost 2008 > tulos.txt
jolloin ensin odotetaan 100 millisekuntia, sitten lähetetään komento, ja sitten odotetaan toiset 100 millisekuntia jotta vastaus ehtii tulla.
Tällä tavalla voi tarvittaessa vaikkapa selvittää esimerkiksi levytilan käytön aina halutessaan, eikä tarvitse kirjautua koneelle ssh-yhteydellä, kunhan vain tekee sopivan ohjelman, joka tulostaa halutut tiedot. Myös omia verkko-ohjelmia on helppo kokeilla tällaisella kokeilupalvelimella.