Rozdział 39.
UUCP
Tim Parker
W tym rozdziale:
Konfiguracja protokołu UUCP
Połączenie UUCP
Komunikacja bezpośrednia
Skrypty logowania
Modyfikowanie harmonogramu dostępu
UUCP a bezpieczeństwo
Używanie protokołu UUCP
Protokół UUCP (ang. UNIX to UNIX Copy) opracowany został jako prosty protokół do połączeń modemowych pomiędzy systemami UNIX-owymi. Dziś najczęściej używany jest do przesyłania poczty, pozwalając na korzystanie z niej za pośrednictwem modemu systemom nie podłączonym na stałe do sieci. Może również być używany do przeglądania grup dyskusyjnych i innych podobnych usług, nie wymagających stałego połączenia. UUCP tworzy połączenie pomiędzy dwoma systemami UNIX-owymi. Nie może być użyty do korzystania z systemu zdalnego (typu FTP czy Telnet). Choć posiada zabezpieczenia adekwatne do większości zastosowań, właśnie ten protokół jest najczęściej używany do włamań, ponieważ administratorzy przez niedopatrzenie czy niewiedzę nie konfigurują odpowiednio tych zabezpieczeń.
W systemach linuxowych używa się kilku wersji UUCP, które są kompatybilne ze sobą pod względem przesyłania danych, ale różnią się procesem konfiguracji. Często podczas instalacji systemu można wybrać pomiędzy wersją Taylor UUCP i HDB (HoneyDanBer) UUCP. Wielu użytkowników Linuxa woli wersję Taylor, choć użytkownicy innych systemów UNIX-owych wybierają nowszą wersję HDB. W tym rozdziale przyjrzymy się obu tym wersjom (inne są spotykane względnie rzadko, nie będziemy się wiec nimi zajmować). W pierwszej części rozdziału zajmiemy się konfiguracją UUCP, druga omawia używanie tego protokołu.
Konfiguracja protokołu UUCP
Większość plików konfiguracyjnych dotyczących UUCP znajduje się w katalogu /usr/lib/uucp. Choć proces konfiguracji może wydawać się okropnie skomplikowany, w rzeczywistości tylko kilka plików wymaga modyfikacji (w każdym z nich trzeba zmienić jeden lub dwa wpisy).
Wersje Taylor i HDB różnią się całkowicie pod względem konfiguracji, omówimy je więc oddzielnie. Nie musisz się martwić o to, jaka wersja działa na drugim końcu połączenia - nie ma to żadnego znaczenia, o ile tylko system jest skonfigurowany prawidłowo.
W niektórych wersjach Linuxa dostępne są skrypty nieco ułatwiające konfigurację (częściej skrypty takie rozprowadzane są z wersją HDB, choć kilka skryptów jest również dostępnych dla wersji Taylor UUCP). Jeśli zdecydujesz się na ich użycie, mimo wszystko powinieneś sprawdzić wszystkie wpisy „ręcznie”.
W podanym niżej przykładzie zakładamy, że nazwą naszego komputera jest merlin i chcemy połączyć się za pomocą UUCP z komputerem arthur. Podczas konfigurowania swojego systemu powinieneś zachować format wszystkich podanych przykładów, wprowadzając oczywiście poprawki dotyczące nazw systemów.
Konfigurowanie Taylor UUCP
Poniżej przedstawiamy pliki biorące udział w procesie konfigurowania Taylor UUCP, wraz z ich krótkim opisem:
/usr/lib/uucp/config - definiuje nazwę komputera lokalnego;
/usr/lib/uucp/sys - określa, jak wywoływać systemy zdalne;
/usr/lib/uucp/port - opisuje każdy port używany do nawiązywania połączenia i jego parametry;
/usr/lib/uucp/dial - definiuje metody porozumiewania się z modemem przy nawiązywaniu połączeń;
/usr/lib/uucp/dialcodes - w nim zapisywane są pełne odpowiedniki symbolicznych kodów numerów telefonicznych; rzadko używany, gdy istnieje połączenie bezpośrednie;
/usr/lib/uucp/call - może zawierać identyfikator i hasło systemu zdalnego, ale obecnie jest rzadko używany;
/usr/lib/uucp/passwd - zawiera identyfikatory użytkowników i hasła używane, gdy ktoś chce połączyć się z Twoim systemem; używany tylko w przypadku, gdy zamiast zwykłego logowania aktywny jest program uucico.
Aby nie komplikować problemu, pominiemy tu całą teorię i przejdziemy od razu do omówienia przykładowej konfiguracji. Jedyne, co musisz zrobić, to podstawić własne dane, takie jak numery telefonów, pliki urządzeń, nazwy systemów itp. Proces powinien być powtórzony dla każdego systemu, z którym chcesz się łączyć.
Pierwszy plik, który należy zmodyfikować, zawiera nazwę systemu i kilka innych ogólnych parametrów. Plik /usr/lib/uucp/config powinien zawierać jeden wiersz definiujący nazwę Twojego systemu:
nodename merlin
Słowo nodename musi rozpoczynać wiersz, po nim muszą następować spacje lub znaki tabulacji, a następnie nazwa systemu lokalnego. Informacja w tym pliku może być wprowadzona podczas instalowania systemu - wtedy nie trzeba jej modyfikować. Powinieneś jednak upewnić się, że jest ona prawidłowa - w przeciwnym przypadku połączenie nie będzie działało.
|
Aby można było używać UUCP, Twój system musi posiadać nazwę. Dla kompatybilności ze starszymi wersjami UUCP powinna ona składać się z siedmiu lub mniej znaków. Najlepiej, jeśli jest to ta sama nazwa, którą podałeś podczas instalacji systemu. Ułatwi to życie użytkownikom, którzy będą chcieli połączyć się z Twoim systemem. Przykładowo, jeśli pełna nazwa domenowa systemu ma postać merlin.tpci.com, rozsądnie będzie nadać mu nazwę UUCP merlin. |
Potrzebne będą również informacje o systemie, z którym zamierzasz się połączyć. Należy je wprowadzić do pliku /usr/lib/uucp/sys. Zwykle plik ten zawiera kilka przykładowych wpisów, można więc użyć jednego z nich jako szablonu, usuwając również znaki komentarza (#). Wpis określający parametry połączenia z komputerem arthur może wyglądać na przykład tak:
# system: arthur (Bill Smallwood's Linux system)
system arthur
time Any
phone 555-1212
port com1
speed 9600
chat login: merlin password: secret1
Pierwszy wiersz powyższego przykładu jest komentarzem. Następne wiersze określają różne parametry połączenia, takie jak nazwa systemu zdalnego (arthur), czas, kiedy można łączyć się z systemem (wartość Any oznacza brak ograniczeń), numer telefonu (włącznie z numerem kierunkowym itp.), port szeregowy, którego należy użyć (com1), prędkość połączenia (9600 bodów) oraz skrypt chat, automatyzujący logowanie (w tym przypadku odpowiadający na monit login: tekstem merlin, a następnie wysyłający hasło secret1 po odebraniu tekstu password:).
Większość połączeń wymaga podania identyfikatora i hasła - muszą się one znaleźć w pliku konfiguracyjnym, ponieważ UUCP nie dopuszcza sesji interaktywnych. Może to stanowić pewien problem, ponieważ pozwala innym użytkownikom na odczytanie hasła dostępu, ale ponieważ używane jest ono tylko do obsługi UUCP, nie jest to poważne zagrożenie. Poza tym odpowiednio ustalone prawa dostępu do tego pliku powinny zabezpieczać przed odczytaniem go przez użytkowników systemu.
|
Nie wszystkie serwery wymagają podania hasła przy połączeniach UUCP. W niektórych używa się hasła pustego, w jeszcze innych - uucp. |
Nazwa portu podana w pliku /usr/lib/uucp/sys nie musi zgadzać się z faktyczną nazwą urządzenia w systemie Linux - odpowiednie połączenie zapewnia wpis w pliku /usr/ lib/uucp/port, w którym dla modemu o prędkości 9600 bodów powinien znaleźć się wpis podobny do takiego:
# com1 device port
port com1
type modem
device /dev/cua0
speed 9600
dialer Hayes
Pierwszy wiersz w powyższym przykładzie określa nazwę portu, używaną również w pliku /usr/lib/uucp/sys. Typ połączenia (zwykle modem) określony jest w następnym wierszu. Faktyczne urządzenie, do którego odnosi się dany port, określone jest w wierszu trzecim. W wielu systemach można tu wpisać identyfikator /dev/modem, który jest dowiązaniem do odpowiedniego urządzenia.
Dalej następuje maksymalna prędkość połączenia modemowego. Jako ostatnia podana jest informacja o typie modemu, a właściwie sposobie, w jaki ma on wybrać numer. Jest to pozostałość po czasach, gdy modemy nie potrafiły same wybierać numeru i używały do tego celu urządzenia o nazwie dialer.
Typ modemu podany w pliku /usr/lib/uucp/port musi być zdefiniowany w pliku /usr/lib/uucp/dial; oto przykładowy wpis:
# Hayes modem
dialer Hayes
chat "" ATZ OK ATDT\T CONNECT
Symbol \T automatycznie zastępowany jest przez numer, z jakim należy się połączyć. W niektórych systemach dane z plików /usr/lib/uucp/dial i /usr/lib/uucp/port połączone są w jeden wpis w pliku /usr/lib/uucp/sys, bezpośrednio opisujący wszystkie parametry modemu i połączenia.
Komputer na drugim końcu połączenia (w tym przypadku arthur) musi posiadać w plikach konfiguracyjnych odpowiednie wpisy dla komputera merlin. Będą one podobne do przedstawionych powyżej, różnice wystąpią tylko w nazwach systemów, numerze telefonu, ewentualnie również w skrypcie chat i typie modemu. Dopóki oba komputery nie są skonfigurowane prawidłowo, uzyskanie połączenia nie będzie możliwe.
W niektórych systemach dostępny jest program uuchck, który weryfikuje wpisy w plikach konfiguracyjnych i wyświetla odpowiednie podsumowanie. Program ten możesz również zdobyć w węzłach FTP i BBS (namiary na nie możesz znaleźć w dodatku A „Węzły FTP i grupy dyskusyjne poświęcone Linuxowi”).
Domyślnie Taylor UUCP pozwala systemowi zdalnemu po połączeniu się wykonać tylko wybrane polecenia. Zwykle są to polecenia rmail i rnews. Jeśli chcesz pozwolić na używanie jakichś dodatkowych poleceń, musisz dodać wiersz zawierający ich nazwy do pliku /usr/lib/uucp/sys; na przykład, aby zezwolić na używanie poleceń rmail, rnews, rsmtp i rdataupdate, należy dodać następujący wiersz:
system chatton
...
commands rmail rnews rsmtp rdataupdate
Wszystkie polecenia muszą znajdować się w ścieżce przeszukiwania używanej przez programy obsługi UUCP (czyli w zasadzie program uuxqt).
Jeśli chcesz przesyłać pliki pomiędzy dwoma komputerami, musisz również zmodyfikować inne pliki konfiguracyjne. Kiedy system zdalny wysyła plik do Twojego komputera, powinien być on ze względów bezpieczeństwa zapisany w katalogu /usr/spool/ uucppublic lub /var/spool/uucppublic. Nie powinieneś pozwalać na zapisanie plików gdziekolwiek indziej, ponieważ może się to skończyć zniszczeniem plików systemowych. Przyjęło się, że przesyłane pliki trafiają do katalogu /usr/spool/uucppublic lub /usr/ spool/uucp/system, gdzie system to nazwa systemu zdalnego.
Katalogi, do których trafiać mają pliki przesyłane przez UUCP i z których można wysyłać pliki, można określić w pliku /usr/lib/uucp/sys:
system chatton
...
local-send ~/send
local-receive ~/receive
Przy takiej konfiguracji użytkownicy Twojego systemu mogą wysyłać pliki znajdujące się w podkatalogu send katalogu uucp, a każdy plik przychodzący zostanie zapisany w podkatalogu receive. Można zezwolić na wysyłanie plików z kilku różnych miejsc, na przykład z katalogów domowych użytkowników:
local-send ~/send /home
Jeśli chcesz umożliwić obsługę żądań transferu pochodzących z komputera zdalnego, powinieneś dodać dwa wpisy:
remote-send /usr/lib/uucppublic
remote-request /usr/lib/uucppublic
Powodują one, że komputer zdalny może pobierać pliki z katalogu /usr/lib/ uucppublic, może również w tym samym katalogu zapisywać pliki. Również tu można zezwolić na korzystanie z kilku katalogów, oddzielając ich nazwy spacjami.
UUCP pozwala także na przesyłanie danych do innego komputera za pomocą komputera pośredniczącego (ang. hopping). Przykładowo, jeśli chcesz wysyłać pocztę do systemu warlock, ale połączyć się z nim możesz tylko przez systemem wizard, powinieneś poinformować o tym fakcie system UUCP. W tym celu do pliku /usr/lib/uucp/sys powinieneś dodać polecenie forward:
system wizard
...
forward warlock
Następnie należy dodać wpis dla systemu warlock, który poinformuje UUCP, że poczta przychodząca od Ciebie przechodzić będzie przez system wizard:
system warlock
...
forward-to merlin
Wpis forward-to gwarantuje, że pliki zwrócone przez system warlock będą przesyłane do systemu merlin, czyli do Twojego komputera. W przeciwnym przypadku byłyby one usuwane jako niemożliwe do dostarczenia.
Domyślnie Taylor UUCP nie pozwala na pośredniczenie w przesyłaniu poczty. Administrator powinien dokładnie rozważyć zezwolenie na taką działalność ze względu na potencjalne duże obciążenie łącza modemowego plikami pochodzącymi z innych systemów.
Konfigurowanie HDB UUCP
HDB UUCP jest systemem nowszym niż Taylor UUCP. Pod wieloma względami jego konfiguracja jest łatwiejsza, ale tak naprawdę oba systemy nie jest trudno skonfigurować.
Nazwa systemu lokalnego nie jest ustawiana w żadnym pliku konfiguracyjnym - używana jest nazwa podana podczas instalacji sieci. Można ją zmienić za pomocą polecenia hostname.
Nazwy systemów zdalnych przechowywane są w pliku /usr/lib/uucp/Systems (w niektórych starszych wersjach plik ten nazywa się /usr/lib/uucp/L.sys). Każdemu z systemów odpowiada osobny wiersz o formacie:
nazwa_systemu ogr_czasowe typ_urządzenia prędkość telefon
* skrypt_logowania
Pole nazwa_systemu określa nazwę systemu zdalnego. Pole ogr_czasowe pozwala ustalić, w jakich godzinach może nastąpić połączenie. typ_urządzenia to etykieta odpowiadająca odpowiedniemu wpisowi w pliku /usr/lib/uucp/Devices. prędkość określa maksymalną prędkość przesyłania danych (ograniczoną zwykle prędkością modemu z jednej lub z drugiej strony połączenia), telefon to numer telefonu, do którego podłączony jest system zdalny, a skrypt_logowania określa identyfikator użytkownika i hasło, które należy podać po połączeniu się z systemem (podobnie jak skrypt chat w systemie Taylor UUCP). Przykładowy wpis dla systemu zdalnego arthur może mieć postać:
arthur Any ACU 9600 555-1212 login: uucp password: *secret1
Wartość Any w polu ogr_czasowe nie nakłada żadnych ograniczeń co do czasu połączenia. Typ urządzenia o etykiecie ACU musi być zdefiniowany w pliku /usr/lib/uucp/ Devices (w starszych wersjach plik ten nazywa się /usr/lib/uucp/L-devices).
Wpisy w pliku /usr/lib/uucp/Devices (lub w starszych wersjach /usr/lib/uucp/ L-devices) zawierają dane o urządzeniach, których można użyć do połączeń z systemami zdalnymi. Mają one składnię:
typ_urządzenia sterownik dialer_line prędkość dialer
* [token Dialer ...]
typ_urządzenia to etykieta, która będzie używana dla danych ustawień. sterownik to nazwa urządzenia, które użyte będzie do komunikacji (zwykle port szeregowy, jak np. /dev/tty2a czy /dev/modem). Pole dialer_line nie jest używane, należy w nie wpisać myślnik. Parametr prędkość określa maksymalną prędkość przesyłania danych, a dialer to nazwa pliku, w którym znajdują się instrukcje dotyczące obsługi danego urządzenia. Przykładowy wpis dla modemu Hayes 9600 podłączonego do drugiego portu szeregowego może wyglądać tak:
ACU tty2A - 9600 dialHA96
Opisuje on urządzenie o etykiecie ACU, podłączone do portu /dev/tty2A (część /dev nazwy urządzenia została pominięta - HDB UUCP dopuszcza takie uproszczenie), używające programu zapisanego w pliku dialHA96 do sterowania obsługą wybierania numerów. Dla większości popularnych modemów dostępne są gotowe pliki, których nazwy należy wpisać w polu dialer.
Jeśli nie jest dostępny plik opisujący komunikację z modemem, należy stworzyć odpowiedni wpis w pliku /usr/lib/uucp/Dialers o formacie:
dialer translacje oczekuj wyślij ...
dialer to etykieta odpowiadająca użytej w pliku /usr/lib/uucp/Devices. translacje to tablica translacji używana podczas wybierania numeru, pozwalająca zamienić odpowiednie znaki na pauzy itp. Pola oczekuj i wyślij to skrypt chat, dzięki któremu ustawiane są parametry pracy modemu. Znaki białe w tym skrypcie są ignorowane, chyba że znajdują się w cudzysłowach. Oto przykładowy wpis dla modemu Hayes 1200 Smartmodem:
hayes1200 =,-, "" AT\r\c OK\r \EATDT\T\r\c CONNECT
Przy wybieraniu numeru znaki - i = zamieniane są na , (przecinek) oznaczający pauzę. Dalej następują polecenia inicjujące modem i wybierające numer. Ponieważ w pliku Dialers znajdują się gotowe wpisy dla większości popularnych modemów, nie będziemy szczegółowo omawiać tego zagadnienia.
Problem zezwalania na transfer plików jest nieco bardziej złożony niż w przypadku Taylor UUCP, ponieważ HDB UUCP pozwala na bardziej szczegółową konfigurację. W książkach poświęconych UUCP na temat ten poświęconych jest prawie sto stron - my skoncentrujemy się na niezbędnym minimum.
Dane dotyczące praw dostępu do systemu i plików zawarte są w pliku /usr/lib/uucp/ Permissions. Format pojedynczego wpisu w takim pliku jest następujący:
MACHINE=nazwa_zdalna LOGNAME=uucp \
COMMANDS=rmail:rnews:uucp \
READ=/usr/spool/uucppublic:/usr/tmp \
WRITE=/usr/spool/uucppublic:/usr/tmp \
SENDFILES=yes REQUEST=no
Pole MACHINE określa nazwę komputera zdalnego. LOGNAME to identyfikator, za pomocą którego komputer ten (lub Twój komputer) loguje się do systemu, COMMANDS - polecenia, jakie może wykonać, READ i WRITE - lista katalogów z których może czytać i do których może zapisywać pliki, pole SENDFILES określa, czy dopuszcza się przesyłanie plików, a REQUEST - czy dozwolone jest żądanie przesłania plików z Twojego systemu. Ukośniki na końcu każdego wiersza służą do ukrycia znaku nowego wiersza - dzięki temu cały wpis jest traktowany jak jeden wiersz, a jednocześnie zachowana jest dobra czytelność tekstu. Jest to rozwiązanie typowe w systemach UNIX-owych.
Kompletny wpis dla komputera zdalnego o nazwie wizard może mieć następującą postać:
MACHINE=wizard LOGNAME=uucp1 \
COMMANDS=rmail:uucp \
READ=/usr/spool/uucppublic \
WRITE=/usr/spool/uucppublic \
SENDFILES=yes REQUEST=yes
Komputer ten może pobierać i wysyłać pliki do katalogu /usr/spool/uucppublic. Może uruchomić programy mail oraz uucp. Jeśli nie chcesz, by komputer zdalny przesyłał pliki do Twojego systemu, ustaw wartość SENDFILES na równą no. Podobnie, jeśli nie życzysz sobie, by jakiekolwiek pliki były pobierane z Twojego systemu, ustaw na no wartość REQUEST.
Połączenie UUCP
Nawiązanie połączenia UUCP składa się z kilku etapów. Łatwiej będzie zrozumieć rolę plików konfiguracyjnych, jeśli przyjrzymy się przebiegowi typowej sesji UUCP. Proces nawiązujący połączenie UUCP i obsługujący przesyłanie informacji nazywa się uucico (ang. UUCP Call In/Call Out). Połączenie może być zrealizowane przez uruchomienie uucico z nazwą zdalnego komputera podaną jako parametr:
uucico -s arthur
Przy uruchomieniu, program uucico szuka danych o systemie zdalnym w pliku /usr/lib/uucp/sys (Taylor UUCP) lub /usr/lib/uucp/Systems (HDB UUCP). Po odnalezieniu ich, odczytuje odpowiednie dane z innych plików konfiguracyjnych (/usr/lib/uucp/port i /usr/lib/uucp/dial dla Taylor UUCP albo /usr/lib/uucp/ Devices i /usr/lib/uucp/Dialers dla HDB UUCP), uruchamia połączenie modemowe i tworzy plik blokujący dostęp do portu szeregowego innym aplikacjom (sprawdzając najpierw, czy urządzenie nie jest używane przez inną aplikację - czyli czy nie istnieje plik LCK, np. LCK..cua0 dla pierwszego modemu).
Po wykonaniu skryptu chat inicjalizującego modem i wybierającego numer, do logowania do komputera zdalnego używany jest skrypt chat zapisany w pliku /usr/lib/uucp/sys lub /usr/lib/uucp/System. Po zakończeniu logowania, w systemie zdalnym uruchamiany jest również program uucico, po czym oba programy wymieniają potwierdzenia i rozpoczyna się transfer danych.
Po zakończeniu sesji komputer lokalny upewnia się, że komputer zdalny nie ma nic więcej do przesłania i przerywa połączenie. Program uucico kończy działanie.
Komunikacja bezpośrednia
Jeśli dwa komputery połączone są bezpośrednio przez port szeregowy, do przesyłania danych również można użyć protokołu UUCP. Jedyna zmiana w opisanym wyżej procesie konfiguracji dotyczy konfiguracji portu. Zamiast używać urządzenia modemu, użyć należy połączenia bezpośredniego. Przykładowo, dla systemu Taylor UUCP wpis w pliku /usr/lib/uucp/sys będzie zawierał wiersz:
port direct1
a w pliku /usr/lib/uucp/port znajdzie się wpis:
port direct1
type direct
speed 38400
device /dev/cua1
Prędkość transmisji i nazwę portu szeregowego należy dostosować do rzeczywistych wartości używanych w systemie. Podobnie rzecz wygląda w przypadku HDB UUCP, z tym że odpowiednie wpisy powinny znaleźć się w plikach /usr/lib/uucp/Systems i /usr/lib/uucp/Devices.
Skrypty logowania
Skrypty logowania są częścią pliku /usr/lib/uucp/sys lub /usr/lib/uucp/System; często okazują się one najtrudniejszym krokiem konfiguracji połączenia. Jeśli łączysz się z typowym systemem UNIX-owym, wysyłane powinny być tylko standardowe zachęty do wprowadzenia identyfikatora i hasła, ale w niektórych systemach nie jest to takie proste. Z tego powodu przyjrzymy się temu problemowi nieco dokładniej.
Ogólnie rzecz biorąc, skrypt logujący składa się z par wzorzec-akcja. Wzorzec wyszukiwany jest wśród znaków wysyłanych przez drugi koniec połączenia, natomiast akcja określa tekst, który ma zostać wysłany przez komputer lokalny. Prosty skrypt może wyglądać tak:
login: merlin password: secret1
W takim przypadku system czeka na odebranie tekstu login:, następnie wysyła tekst merlin, czeka na tekst password: i wysyła secret1. Skrypt można troszkę skrócić, zdając sobie sprawę, że w zasadzie interesuje nas tylko moment zakończenia komunikatu, na który czekamy:
gin: merlin word: secret1
Takie rozwiązanie ma też inne zalety, na przykład jeśli system zdalny zamiast login: wysyła tekst Login:, skrócona forma - w przeciwieństwie do formy pełnej - zareaguje prawidłowo.
Użyteczna jest możliwość wymuszenia na maszynie zdalnej zrestartowania procesu getty. W tym celu należy wstawić myślnik i słowo BREAK, co powoduje wysłanie sekwencji resetującej połączenie po upływie określonego czasu, na przykład tak:
ogin: -BREAK-ogin: merlin sword: secret1
W takim przypadku, jeśli komputer zdalny nie wyśle zachęty login:, po pewnym czasie Twój komputer wysyła sekwencję resetującą połączenie i ponownie czeka na zachętę.
Można używać również kilku znaków specjalnych. Oto znaczenie najważniejszych z nich.
\c Zapobiega wysyłaniu znaku powrotu karetki (tylko przy wysyłaniu).
\d Opóźnienie o 1 sekundę (tylko przy wysyłaniu).
\p Pauza trwająca ułamek sekundy (tylko przy wysyłaniu).
\t Wysłanie znaku tabulacji.
\r Wysłanie znaku powrotu karetki.
\s Wysłanie spacji.
\n Wysłania znaku nowego wiersza.
\\ Wysłanie znaku \.
Czasem trzeba wysłać jeden lub więcej z podanych wyżej znaków, zanim komputer zdalny zechce się odezwać. Przykładowo, poniższy skrypt wysyła przed próbą nawiązania kontaktu kombinację powrót karetki + znak nowego wiersza:
\n\r\p ogin: merlin word:secret1
To zwykle wystarcza, by w systemie zdalnym uruchomiony został proces getty obsługujący odpowiedni port.
Modyfikowanie harmonogramu dostępu
Zarówno Taylor, jak i HDB UUCP pozwalają na podanie, kiedy można łączyć się z danym systemem. W przykładach podanych wcześniej nie było żadnych ograniczeń czasowych (w odpowiednim polu występowało słowo Any), ale takie ograniczenia mogą być bardzo użyteczne - czy to ze względu na różne taryfy telefoniczne, czy też po prostu na ograniczony czas działania komputera po drugiej stronie połączenia.
Jeśli chcesz zezwolić na połączenia w poszczególne dni tygodnia, użyj dwuliterowych skrótów ich angielskich nazw (Mo - poniedziałek i dalej Tu, We, Th, Fr, Sa, Su), Wk dla dni roboczych, Any dla dostępu bez ograniczeń i Never dla zablokowania dostępu. Dozwolone są również kombinacje tych wartości. Godziny dostępu podaje się w formie zakresu, w formacie 24-godzinnym. Jeśli nie zostaną określone godziny, w których można się połączyć, połączenie jest możliwe przez cały dzień.
Daty i godziny podaje się nie oddzielając ich spacjami, natomiast poszczególne wpisy rozdziela się przecinkami. Oto przykładowe definicje ograniczeń, prawidłowe zarówno w systemie Taylor, jak i HDB:
Wk1800-0730 dostęp w dni robocze od 18.00 do 7.30;
MoWeFr dostęp w poniedziałki, środy i piątki;
Wk2300-2400, SaSu dostęp w dni robocze od 23.00 do 24.00 i w weekendy przez całą dobę.
UUCP a bezpieczeństwo
Prawa dostępu do plików konfiguracyjnych UUCP powinny być uważnie ustawione, tak aby protokół mógł funkcjonować prawidłowo i nie zagrażał bezpieczeństwu systemu. Najprościej można zapewnić to w ten sposób, że wszystkie pliki konfiguracyjne powinny być własnością użytkownika uucp, grupy uucp. W tym celu w katalogu /usr/lib/uucp należy wydać polecenia:
chown uucp *
chgrp uucp *
Ze względów bezpieczeństwa dla użytkownika uucp powinieneś założyć jakieś dobre hasło. Niektóre wersje Linuxa pozostawiają domyślnie to hasło puste, co powoduje, że system stoi otworem dla każdego, komu tylko przyjdzie do głowy zalogować się jako uucp.
Prawa dostępu do plików powinny umożliwiać czytanie i zapisywanie (i wykonywanie dla katalogów) tylko dla ich właściciela. Prawo odczytu dla kogokolwiek innego może dać mu informacje o hasłach pochodzące z plików konfiguracyjnych.
Kiedy program obsługi UUCP loguje się do systemu zdalnego, musi podać identyfikator użytkownika i hasło. Dane te są przechowywane w plikach /usr/lib/uucp/sys lub /usr/lib/uucp/Systems, powinny więc być zabezpieczone przed nieautoryzowanym dostępem poprzez ustalenie odpowiednich praw dostępu.
Jeśli kilka innych systemów łączy się z Twoim, możesz dla wszystkich utworzyć jedno wspólne konto i hasło, można również zrobić to dla każdego systemu zdalnego z osobna - w tym celu wystarczy dodać dla każdego systemu wpis do pliku /etc/passwd i zdefiniować dla niego (za pomocą programu passwd) odpowiednie hasło. System zdalny będzie mógł zalogować się używając takiego konta. Na użytkownikach korzystających z protokołu UUCP należy wymusić użycie tylko programu uucico. Odpowiedni wpis w pliku /etc/ passwd może wyglądać tak:
uucp1:123:52:UUCP Login for Arthur:/usr/spool/uucppublic:usr/lib/uucp/uucico
Katalogiem domowym użytkownika uucp1 w powyższym przykładzie jest /usr/ spool/uucppublic, a po zalogowaniu uruchamiany jest program uucico. Jeśli utworzysz osobne konto dla każdego łączącego się z Twoim systemu, możesz dokładniej kontrolować prawa dostępu.
Należy uważnie sprawdzić, jakie polecenia może wykonać dany użytkownik. Odpowiednie ustawienia znajdują się w plikach konfiguracyjnych UUCP. Jeśli pliki są przesyłane dalej przez Twój system, powinieneś wiedzieć kto je przysyła i dokąd trafiają.
Najważniejszą jednak sprawą jest zapewnienie, aby z systemu mogli korzystać tylko zaufani użytkownicy. Nie otwieraj dostępu dla wszystkich, bo jest to proszenie się o kłopoty. Regularnie sprawdzaj dane konfiguracyjne i prawa dostępu do plików zawierających newralgiczne informacje.
Używanie UUCP
Po skonfigurowaniu systemu UUCP można używać go do przesyłania plików i poczty. Najpierw trzeba jednak poznać składnię adresów, która nieco różni się od używanej powszechnie w Internecie:
komputer!cel
komputer to nazwa komputera zdalnego, natomiast cel to nazwa pliku, do którego chcesz się dobrać, bądź identyfikator użytkownika. Na przykład, aby wysłać pocztę do użytkownika yvonne w systemie arthur, można użyć polecenia mail w następujący sposób:
mail arthur!yvonne
UUCP pozwala również na przejście przez kilka komputerów, zanim plik trafi do adresata. Można dzięki temu zaoszczędzić na rachunkach telefonicznych lub też dostać się do większej sieci za pomocą jednego tylko połączenia. Załóżmy, że chcesz wysłać pocztę do użytkownika bill w systemie warlock, ale nie masz z nim połączenia. Masz za to połączenie z systemem arthur, który jest połączony z systemem warlock i skonfigurowany do przesyłania poczty od Ciebie. W takim przypadku możesz wysłać pocztę poleceniem:
mail arthur!warlock!bill
Podczas dekodowania adresu odczytywana jest tylko pierwsza część (arthur), pozostała jest przesyłana razem z pocztą do systemu arthur. W tym systemie ponownie następuje odczytanie adresu - teraz adresatem jest system warlock; jeśli dozwolone jest pośredniczenie w przekazywaniu poczty, wiadomość zostanie przesłana do tego systemu. Droga przesłania wiadomości może być bardziej skomplikowana, na przykład poniższy adres powoduje przesłanie wiadomości do użytkownika alex w systemie vader za pośrednictwem systemów arthur, warlock i chatton:
mail arthur!warlock!chatton!vader!alex
W skomplikowanych przypadkach trudno jednak nie pomylić kolejności, w jakiej trzeba podać nazwy komputerów. Możliwość taka może być dość użyteczna w przypadku, gdy pewna liczba użytkowników posiada lokalne połączenia pomiędzy komputerami - dzięki temu możliwe jest skonfigurowanie nawet dość złożonej sieci (symbol wykrzyknika w adresie nazywany jest po angielsku bang, cały adres może więc zostać odczytany jako arthur-bang-warlock-bang-chatton-bang-vader-bang-alex).
|
Niektóre interpretery poleceń nie akceptują znaku !, ponieważ jest on zarezerwowany do innych celów - na przykład powłoka C używa go do przywoływania poprzednio wydanego polecenia. W takim przypadku należy zabronić jego interpretacji, na przykład poprzedzając go symbolem \: mail arthur\!warlock\!bill |
W zależności od tego, jak skonfigurowany jest system, może on albo od razu po wysłaniu wiadomości łączyć się z innym systemem, albo wstawiać wiadomości do kolejki oczekującej na wysłanie przy najbliższym połączeniu, szczególnie jeśli połączenia są dozwolone tylko w określonych godzinach. Dane dotyczące ograniczania czasu połączeń zapisane są w pliku /usr/lib/uucp/sys lub /usr/lib/uucp/Systems.
Musisz pamiętać o tym, że jeśli systemy, przez które przesyłasz dane, nie łączą się od razu z następnym systemem, proces przesyłania wiadomości może się znacznie przedłużyć. Jeśli na przykład komputer łączy się z następnym systemem raz na dobę, w najgorszym przypadku może wprowadzić nawet 24-godzinne opóźnienie. Każdy następny komputer pośredniczący powoduje dodatkowe opóźnienie.
|
Nie możesz założyć, że dane przesyłane przez UUCP będą poufne. W systemie zdalnym może je przeglądać każdy, kto ma dostęp do katalogu UUCP. Nie w każdym systemie prawa dostępu są ustawione prawidłowo. Jeśli musisz przesłać poufne dane, najlepiej je zakoduj, podając adresatowi odpowiedni klucz (oczywiście nie za pomocą poczty elektronicznej). |
W systemie UUCP wszystkie zlecenia transferu traktowane są jako zadania (ang. jobs) - z tym terminem możesz spotkać się dość często, przeglądając dokumentację dotyczącą UUCP. Zadanie to polecenie, które ma zostać wykonane w systemie zdalnym, plik, który ma zostać przesłany, czy też dowolne inne dane, które mają zostać przesłane pomiędzy dwoma systemami.
Przesyłanie poczty
Większość programów do obsługi poczty akceptuje adresy w formacie UUCP bez żadnych dodatkowych zabiegów konfiguracyjnych, co upraszcza znacząco używanie tego protokołu. W poprzednim podrozdziale przedstawiliśmy przykład użycia polecenia mail z adresem w formacie UUCP.
Można wykorzystać wszystkie opcje modyfikujące zachowanie polecenia mail. Dla przykładu spróbujmy za pomocą tego polecenia przesłać zawartość pliku dane_1 do użytkownika yvonne w systemie chatton przez system arthur, dołączając nagłówek z tematem. W tym celu należy wydać polecenie:
mail -s "Plik z danymi" arthur\!chatton\!yvonne < dane_1
Praktycznie wszystkie programy pocztowe, również te pracujące w systemie X, akceptują oprócz zwykłych adresów internetowych adresy w formacie UUCP, ale warto sprawdzić to w dokumentacji przed zainstalowaniem nowego pakietu pocztowego.
Przesyłanie plików
Do przesyłania plików za pomocą protokołu UUCP służy polecenie uucp, którego składnia jest następująca:
uucp [opcje] źródło cel
Opcje obsługiwane przez to polecenie różnią się nieco w zależności od wersji i typu systemu UUCP, ale większość wersji obsługuje opcje zebrane poniżej.
-c Zapobiega kopiowaniu pliku do kolejki przed wysłaniem. Domyślnie plik, który ma zostać przesłany, jest kopiowany do katalogu kolejki. Za pomocą opcji -C można określić położenie tego katalogu.
-f Zapobiega odtwarzaniu struktury katalogów w systemie docelowym. Domyślnie struktura katalogów jest odtwarzana, można również zażądać tego explicite, podając opcję -d.
-m Wysyła wiadomość do osoby, która wydała polecenie uucp, potwierdzającą zakończenie kopiowania danych.
-nużytkownik Wysyła po zakończeniu kopiowania wiadomość do użytkownika w systemie zdalnym.
Ustawienia domyślne odpowiadają większości użytkowników, choć opcja -m może być przydatna, jeśli chcesz otrzymać potwierdzenie przesłania danych.
Parametry źródło i cel określają nazwy odpowiednich plików lub katalogów, analogicznie jak w przypadku polecenia cp. Trzeba jednak pamiętać, że jeśli nazwa odnosi się do systemu zdalnego, musi posiadać prawidłowy format UUCP. Przykładowo, jeśli chcesz przesłać plik dane_1 z bieżącego katalogu do katalogu /usr/spool/uucppublic w systemie arthur, powinieneś wydać polecenie:
uucp dane_1 arthur\!/usr/spool/uucppublic
Zauważ, że przed ścieżką dostępu do katalogu w systemie zdalnym pojawiła się nazwa tego systemu. Katalog /usr/spool/uucppublic jest zwykle jedynym katalogiem, do którego można przesłać dane. Adresat danych musi sam zadbać o skopiowanie ich do odpowiedniego katalogu.
Jeśli chcesz wysłać plik do użytkownika bill, umieszczając go w osobnym podkatalogu, i powiadomić go o tym fakcie oraz otrzymać potwierdzenie wysłania pliku, powinieneś wydać polecenie:
uucp -m -nbill dane_1 arthur\!/usr/spool/uucppublic/bill/
Jeśli chcesz skopiować plik z komputera zdalnego, musisz znać jego położenie i mieć dostęp do katalogu i prawo odczytu tego pliku (lub też ktoś musi skopiować dla Ciebie ten plik do katalogu uucppublic). Poniższe polecenie skopiuje plik bigfile z katalogu /usr/tmp w systemie chatton do lokalnego katalogu /home/reksio:
uucp chatton\!/usr/tmp/bigfile /home/reksio
UUCP pozwala na użycie symboli wieloznacznych, ale należy otoczyć je cudzysłowami (żeby zapobiec ich interpretacji przez interpreter poleceń powłoki). Aby skopiować wszystkie pliki, których nazwa zaczyna się od liter chap, zapisane w katalogu /usr/ bill/book (zakładając, że masz odpowiednie prawa dostępu) do lokalnego katalogu /usr/bigbook, wydaj polecenie:
uucp "warlock\!/usr/bill/book/chap*" /usr/bigbook
Możliwe jest także przesyłanie plików za pośrednictwem innych systemów, co wymaga posiadania odpowiednich praw dostępu we wszystkich systemach pośredniczących. Można również przesyłać pliki z jednego systemu do innego (co prawda trudno znaleźć zastosowanie dla tej sztuczki), na przykład tak:
uucp arthur\!/usr/lib/uucppublic/bigfile warlock\!/usr/lib/uucppublic/
Powyższe polecenie powoduje przesłanie pliku bigfile z systemu arthur do systemu warlock. Prostszym rozwiązaniem byłoby wydanie odpowiedniego polecenia w systemie arthur lub warlock - nie występują wówczas problemy z konfiguracją praw dostępu.
Sprawdzanie transferu
Za pomocą polecenia uustat można sprawdzić, jaki jest aktualny status transferu, który został „zamówiony”, ale nie dotarł jeszcze na miejsce. Po jego wydaniu pojawi się lista wszystkich wydanych przez Ciebie zleceń kopiowania o następującym formacie:
ID_zadania system użytkownik data polecenie rozmiar
system jest nazwą pierwszego komputera, do którego dane są wysyłane (czyli nie zawsze jest to nazwa systemu docelowego), użytkownik to identyfikator osoby, która wydała zlecenie kopiowania, pole data określa, kiedy dane zadanie zostało zlecone, polecenie to dokładna treść polecenia, które zostanie wykonane po nawiązaniu połączenia, a rozmiar to sumaryczna wielkość danych, które zostaną przesłane.
Jeżeli wydasz polecenie uustat jako zwykły użytkownik, otrzymasz informacje tylko o tych zadaniach, które sam zleciłeś. Jeśli polecenie to wydasz jako root, wyświetlone zostaną dane o wszystkich czekających na skopiowanie plikach. Jako zwykły użytkownik również możesz uzyskać informacje o wszystkich zleceniach, używając opcji -a:
uustat -a
Aby anulować wysłanie jakiegoś pliku, użyj opcji -k polecenia uustat wraz z identyfikatorem zadania; na przykład, aby anulować wysłanie pliku, któremu został przyznany numer identyfikacyjny 17, należy wydać polecenie:
uustat -k 17
Możesz anulować wysłanie tylko tych plików, które sam zleciłeś (chyba że jesteś zalogowany jako administrator).
Podsumowanie
Protokół UUCP jest dość łatwy do skonfigurowania. Oferuje on prosty sposób przesyłania poczty czy plików do innych systemów. Jest to jedna z najłatwiejszych metod komunikacji w niewielkich sieciach, ponieważ do nawiązania połączenia wystarcza połączenie modemowe lub bezpośrednie.
Choć popularność protokołu UUCP spada dzięki rozwojowi sieci LAN, nadal jest on rozwiązaniem najtańszym i dobrym dla kogoś, kto potrzebuje połączyć tylko kilka komputerów. Jest również świetnym sposobem na połączenie się z systemami przyjaciół, pozwalającym na przykład na wygodne przesyłanie poczty.
O tym, jak skonfigurować Linuxa aby możliwe było korzystanie z poczty elektronicznej, przeczytać możesz w rozdziale 40. „Konfigurowanie poczty”.
Używanie grup dyskusyjnych omówione jest w rozdziale 41. „Konfigurowanie grup dyskusyjnych”.
Metody zabezpieczania systemu przed włamaniami są tematem rozdziału 42. „Bezpieczeństwo w sieci”.
Rozdział 45. „Kopie zapasowe”, omawia bardzo istotną problematykę tworzenia kopii zapasowych.
630 Część VI ♦ Linux dla administratorów
630 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\39.DOC
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\39.DOC 631
Rozdział 39. ♦ UUCP 631