Proces wywołujący rsh w komputerze lokalnym jest klientem. Komunikuje się on z pro-cesem-serwerem. Serwerem rsh jest rshd (demon zdalnej powłoki). To rshd wykonuje polecenie w zdalnym hoście i zwraca wynik polecenia do klienta działającego w kompu-terzę lokalnym. Wykonywanie zdalnych poleceń za pomocą rsh przebiega bezproblemowo wtedy, gdy mamy do czynienia z zaufanymi hostami lub użytkownikami. Jeśli host jest zaufany, każdy użytkownik mający tę samą nazwę w obu systemach może wykonywać polecenie rsh bez wpisywania swojego hasła. Jeżeli w zdalnym hoście użytkownik zostanie zdefiniowany jako zaufany, będzie mógł w nim wykonywać polecenie rsh, nawet nie posiadając w nim konta. Choć koncepcja zaufanych hostów i użytkowników poprawia komfort pracy — dzięki niemu można na przykład uniknąć konieczności logowania się do systemu — ma istotną wadę, stanowi bowiem, potencjalne źródło różnych nadużyć i naruszeń systemu bezpieczeństwa.
Listę zaufanych hostów i użytkowników zawiera plik /etc/hosts.equiv. Przykład typowego pliku hosts. equiv pokazano na ilustracji 9.2.
% cat /etc/hosts.equiv
morpheus
thetic
stimpty
skynet "f
hobbes
hal
faust
faraday
obiwan
Wiersze pliku hosts.equiv mogą być również pełnymi nazwami, takimi jak fo-ozie.hartford.edu. Jeżeli nazwa hosta poprzedza nazwę użytkownika, to wiersz definiuje zaufanego użytkownika. Choć w większości systemów definiq'e zaufanych hostów i użytkowników są zapisane w pliku hosts. equiv, w pliku . rhosts ulokowanym w katalogu domowym każdego użytkownika można znaleźć dodatkowe informacje. Na ilustracji 9.3. pokazano zawartość tego pliku z hosta o nazwie morpheus.
morpheus % cat .rhosts caribou.hartford.edu bgray misho
Widać, że użytkownik bgray z hosta caribou. hartf ord. edu jest użytkownikiem zaufanym. Jeśli więc bgray, będąc załogowanym do hosta caribou. hartf ord. edu, uruchomi następujące polecenie:
caribou% rsh -1 gray morpheus rm ważny_plik
to wtedy host morpheus zaakceptuje i wykona polecenie rm (usuwając ważny plik) tak samo, jakby to zrobił w odpowiedzi na polecenie wydane lokalnie! Wiersz mi sho oznacza zaufanego użytkownika gray z hosta misho. Pliku . rhosts można również używać do ograniczania dostępu użytkownikom z określonych hostów oraz użytkownikom wymienionym z nazwy. Robi się to, umieszczając znak minus przed nazwą hosta lub użytkownika. Na przykład wpis misho -bob uniemożliwi dostęp do lokalnego hosta użytkownikowi o nazwie bob z hosta misho.
System rozpoczyna sekwencję weryfikacji autentyczności, sprawdzając najpierw plik ho-sts. equiv, a następnie przechodząc do pliku .rhosts. Przeglądanie będzie zatrzymane w chwili, gdy zostanie napotkany pierwszy pasujący wpis. Dlatego kolejność wpisów, zwłaszcza tych wykluczających pewne hosty i pewnych użytkowników, jest istotna. Dodatkowo przed nazwą można umieścić znak „+". Oznacza on, że wszystkie hosty z danej domeny będą traktowane jako zaufane (podobnie wszyscy użytkownicy z danego hosta). Oczywiście nikł nie chce, aby jego system został spenetrowany tą drogą. Ze względu na potencjalne nadużycia większość administratorów systemów nie zezwala użytkownikom na posiadanie plików .rhosts.
Do wykonywania poleceń na zdalnym hoście z poziomu programu C służy funkcja rexec {remote exec). Funkcja biblioteczna rexec przypomina pod wieloma względami zdalną wersję omówionej wcześniej funkcji system. Składnię funkcji umieszczono w tabeli 9.1.
Pliki włączane |
<netdb.h> |
Rozdział podręcznika |
3N | |
Prototyp |
int rexec(char ** ahost, unsigned short ińport, const char *user, const char *passwd, const char *cmd, int *fd2p); | |||
Zwracana wartość |
Sukces |
Niepowodzenie |
Czy zmienia errno | |
Deskryptor pliku gniazd strumieniowych |
-1 |
Nie |
249