|
48 | 48 |
|
49 | 49 | %%%%%
|
50 | 50 |
|
51 |
| -\pdfbookmark[1]{inetd}{inetd} |
52 |
| - |
53 |
| -\begin{slide} |
54 |
| -\sltitle{Správa síťových služeb: \texttt{inetd}} |
55 |
| -\setlength{\baselineskip}{0.8\baselineskip} |
56 |
| -\begin{itemize} |
57 |
| -\item servery síťových služeb se spouští buď při startu systému, nebo je |
58 |
| -startuje démon \texttt{inetd} při připojení klienta. |
59 |
| -\item démon \texttt{inetd} čeká na portech definovaných v |
60 |
| -\texttt{/etc/inetd.conf} a když detekuje příchozí spojení/datagram, |
61 |
| -spustí příslušný server a přesměruje mu deskriptory. |
62 |
| -\item příklad obsahu \texttt{/etc/inetd.conf}: |
63 |
| -\end{itemize} |
64 |
| -\begin{alltt} |
65 |
| -ftp stream tcp nowait root /usr/etc/ftpd ftpd -l |
66 |
| -shell stream tcp nowait root /usr/etc/rshd rshd -L |
67 |
| -login stream tcp nowait root /usr/etc/rlogind rlogind |
68 |
| -exec stream tcp nowait root /usr/etc/rexecd rexecd |
69 |
| -finger stream tcp nowait guest /usr/etc/fingerd fingerd |
70 |
| -ntalk dgram udp wait root /usr/etc/talkd talkd |
71 |
| -tcpmux stream tcp nowait root internal |
72 |
| -echo stream tcp nowait root internal |
73 |
| -\end{alltt} |
74 |
| -\end{slide} |
75 |
| - |
76 |
| -\label{INETD} |
77 |
| - |
78 |
| -\begin{itemize} |
79 |
| -\item \texttt{inetd} je v podstatě velký \texttt{poll} cyklus obhospodařující |
80 |
| -sadu socketů podle konfigurace. |
81 |
| -\item Start přes \texttt{inetd} šetří prostředky, protože příslušný server běží |
82 |
| -pouze po čas, kdy jsou jeho služby opravdu potřeba. Nehodí se tedy pro pro |
83 |
| -spoustění vytížených služeb (HTTP) nebo služeb kde může být velký overhead při |
84 |
| -inicializaci (např. SSH). |
85 |
| -\item Typicky se pomocí \texttt{inetd} spouští servery, které se používají málo |
86 |
| -nebo jejichž inicializace je relativně nenáročná (\texttt{telnetd}, |
87 |
| -\texttt{ftpd}). Silně vytížené a dlouho startující servery (\texttt{httpd}) se |
88 |
| -obvykle startují ze systémových inicializačních skriptů a běží stále. |
89 |
| -\item Často má cenu mít \texttt{inetd} vypnutý úplně. Pokud na vašem stroji běží |
90 |
| -např. pouze SSH, tak pro to se \texttt{inetd} ve většině případů nepoužívá, |
91 |
| -\texttt{inetd} by byl jen dalším serverem běžícím na stroji a zdroj |
92 |
| -potenciálního nebezpečí, pokud by se v něm nebo v jednom z něj spouštěných |
93 |
| -programů objevila bezpečnostní chyba. To by ostatně mělo platit pro všechny |
94 |
| -instalované programy poskytující síťové služby - buďto by měly implicitně |
95 |
| -poslouchat pouze na localhostu (resp. používat unixové sockety) nebo by |
96 |
| -implicitně neměly běžet a měly by být spuštěny (ve smyslu permanentně |
97 |
| -zapnuty) až tehdy když jsou skutečně třeba (tento přístup se označuje jako |
98 |
| -\emph{secure by default}). |
99 |
| - |
100 |
| - |
101 |
| -\end{itemize} |
102 |
| - |
103 |
| -%%%%% |
104 |
| - |
105 |
| -\begin{slide} |
106 |
| -\sltitle{Formát souboru \texttt{/etc/inetd.conf}} |
107 |
| -\texttt{služba soket proto čekání uživ server argumenty} |
108 |
| -\begin{itemize} |
109 |
| -\item \texttt{služba} \dots{} jméno síťové služby podle \texttt{/etc/services} |
110 |
| -\item \texttt{soket} \dots{} \texttt{stream} nebo \texttt{dgram} |
111 |
| -\item \texttt{proto} \dots{} komunikační protokol (\texttt{tcp}, \texttt{udp}) |
112 |
| -\item \texttt{čekání} \dots{} \texttt{wait} (\texttt{inetd} čeká na ukončení |
113 |
| -serveru před akceptováním dalšího klienta), \texttt{nowait} (\texttt{inetd} |
114 |
| -akceptuje dalšího klienta hned) |
115 |
| -\item \texttt{uživatel} \dots{} server poběží s identitou tohoto uživatele |
116 |
| -\item \texttt{server} \dots{} úplná cesta k programu serveru nebo |
117 |
| -\texttt{internal} (službu zajišťuje \texttt{inetd}) |
118 |
| -\item \texttt{argumenty} \dots{} příkazový řádek pro server, včetně |
119 |
| -\texttt{argv[0]} |
120 |
| -\end{itemize} |
121 |
| -\end{slide} |
122 |
| - |
123 |
| -\begin{itemize} |
124 |
| -\item Soket typu \texttt{stream}: |
125 |
| - \begin{itemize} |
126 |
| - \item \texttt{wait} \dots{} server dostane soket, na který musí aspoň |
127 |
| - jednou zavolat \texttt{accept}. Teprve tím získá nový soket, přes který |
128 |
| - může komunikovat s klientem. Po skončení serveru přebírá řízení soketu |
129 |
| - zpět \texttt{inetd}. |
130 |
| - \item \texttt{nowait} \dots{} \texttt{inetd} zavolá \texttt{accept} a |
131 |
| - získaný soket předá serveru, server tedy může rovnou komunikovat (může |
132 |
| - používat standardní vstup a výstup) a nemusí vědět, že komunikuje po |
133 |
| - síti. Mezitím \texttt{inetd} čeká na další klienty a podle potřeby |
134 |
| - spouští další instance serveru. |
135 |
| - \end{itemize} |
136 |
| -\item Jak pro \texttt{wait} tak pro \texttt{nowait} provedl \texttt{inetd} |
137 |
| -na soketu volání \texttt{bind} aby mu přiřadil číslo portu podle pole |
138 |
| -\texttt{služba}. |
139 |
| -\item V případě \texttt{wait} dostane server soket od \texttt{inetd} v podobě |
140 |
| -deskriptoru 0 (standarní vstup). \texttt{inetd} před voláním \texttt{fork} |
141 |
| -provedl \texttt{dup2(sock, 0)}, kde \texttt{sock} je nabindovaný socket. |
142 |
| -Viz příklad \example{inetd/accept-rw.c}. |
143 |
| -\item V případě \texttt{nowait} \texttt{inetd} zavolá \texttt{accept} (pro TCP |
144 |
| -spojení), přesměruje deskriptory 0, 1, a 2 do síťového socketu a spustí daný |
145 |
| -server. |
146 |
| -Viz příklad: \example{inetd/echo-server.sh}. Podívejte se do daného skriptu pro |
147 |
| -podrobné instrukce, jak ho použít. |
148 |
| -\item Pro soket typu \texttt{dgram} má smysl pouze \texttt{wait}. Server musí |
149 |
| -přečíst ze soketu aspoň jeden datagram. |
150 |
| -\item Jestliže \texttt{inetd} restartuje server (kromě \texttt{stream~nowait}) |
151 |
| -příliš často (cca jednou za sekundu), usoudí, že nastala chyba a po určitou dobu |
152 |
| -(asi 10 minut) službu zablokuje (nespouští server a odmítá spojení). Ostatní |
153 |
| -servery spouští normálně dál. |
154 |
| -\item Pro zajímavost, ne všechny systémy musí nutně \texttt{inetd.conf} používat |
155 |
| -stejným způsobem. Například od Solarisu 10 se tento soubor použije pouze pro |
156 |
| -po\-čá\-teč\-ní konverzi do interní databáze pomocí \texttt{inetconv(1M)} a pro |
157 |
| -zapínání a vypínání služeb se pak používá příkaz \texttt{inetadm(1M)}. |
158 |
| -\end{itemize} |
159 |
| - |
160 | 51 | \endinput
|
0 commit comments