PROGRAMOWANIE
Tworzenie własnej powłoki
Tworzenie własnej powłoki
Zamknięci w muszli
W tym miesiącu Steven Goodwin omawia sposób stworzenia własnego interpretera poleceń w prosty i bezbolesny sposób. Stworzymy sami powłokę systemową! STEVEN GOODWIN
Jako że powłokę można w każdej chwili za-Esther Keller, visipix.com
stąpić inną, wielu programistów starało się Dla obserwatora zzewnątrz Linux jest jednorodnym systemem. Dla pozostałych jest to zgrana mieszanka ją-
podmienić ją swoją własną wersją. Każda po-dra systemu, modułów i narzędzi, z których włoka, tak jak każda z dystrybucji Linuksa, każde zajmuje się dokładnie pojedynczym za-przeznaczona jest do określonych zadań. Nie-daniem. Dotyczy to także procedury logowa-które (np. ash) są bardzo małe i oferują mini-nia do systemu. Znak zachęty do logowania malny zestaw funkcji, a ich przeznaczeniem (wymagający podania nazwy użytkownika jest ochrona dysków. Inne (np. csh lub ksh) i hasła) obsługiwany jest przez średnio przyja-umożliwiają przeprowadzanie bardzo skom-czemu użytkownik nie będzie musiał wpisywać zny znak zachęty poleceń (umożliwiający uru-plikowanych operacji na skryptach.
poleceń, ani pamiętać określonych przełączni-chamianie programów). Ten znak zachęty na-Najbardziej popularną powłoką jest powło-ków poleceń. mmshell zaprezentujemy na przy-zywamy powłoką (lub interpreterem poleceń).
ka Linuksa o nazwie bash (skrót od ang. Bour-kładzie określonego użytkownika multimedial-A ponieważ jest to tylko kolejny program, więc ne Again SHell), napisana przez Stephena Bo-nego o nazwie music.Powinniśmy rozpocząć od możemy go zmodyfikować, dodać potrzebne urnea. Ze względu na swoją wszechstronność opracowania tradycyjnego systemu menu. Na-funkcje lub nawet zastąpić go własnym roz-powłoka ta stała się de facto standardem w Li-stępnie przeanalizujemy różnice pomiędzy wiązaniem. I właśnie to zamierzamy zrobić!
nuksie. My postaramy się wypełnić niszę, ofe-zwykłymi programami a programami powłoki rując powłokę posiadającą funkcje sterowania oraz postaramy się poradzić sobie z nimi. Na Walka z wiatrakami
multimediami. A więc do dzieła! Rozpoczyna-koniec zajmiemy się odpowiednim sposobem Powłoka to interpreter poleceń, umożliwiający my prace nad mmshell!
instalacji i użytkowania naszej nowej powłoki.
użytkownikom wprowadzanie komend, które w rezultacie wykona system. Bbrzmi to banal-Gdybym miał młotek...
Przejażdżka
nie. Wpisujemy polecenie, powłoka je wyko-mmshell ma posiadać podstawową funkcjonal-Większość programistów napisała przynaj-nuje. System operacyjny zajmuje się bardziej ność multimedialną (odtwarzanie plików MP3, mniej raz w swoim życiu system menu. Nie szczegółową stroną, sprawdzając uprawnienia sterowanie głośnością, dostęp do napędu CD) są one ani zbyt wielkie, ani zbyt wyrafino-plików, ładując plik, aktualizując tabelę proce-oraz umożliwiać korzystania z narzędzi ze-wane. Naprawdę! Nasz samodzielny prosów i sterując bitem SUID. Z kolei powłoka wnętrznych, opisanych w Tabeli 1: Narzędzia.
gram menu może wyglądać tak, jak pokaza-jest odpowiedzialna za przeadresowania, para-Przy tak ograniczonym zestawie funkcji nie bę-
no na Listingu 1.
metry symboli wieloznacznych (ang. wild-dziemy potrzebowali zaawansowanych metod cards), sterowanie potokami i wiele, wiele in-edycji, czy bufora historii poleceń. Użyjemy za-Tabela 1. Narzędzia
nych. Krótki opis umieszczono w Ramce 1.
tem prostego interfejsu w stylu menu, dzięki mplayer Znakomite narzędzie do odtwarzania plików audio Ramka 1. Niektóre cechy powłoki i wideo, obsługujące kilkanaście kodeków, także systemu Windows. Jeżeli nie potrzebujemy zaawansowanej obsługi wielu kodeków, Zarządzanie zmiennymi środowiskowymi,
*.jpg na rm file1.jpg file2.jpg file3.jpg.
odpowiedniejszym programem będzie mpg123
np. PS1 i PATH. Druga z nich to uporządko-Wbudowana funkcja edytowania. Doty-
(mplayer może powodować problemy wana lista katalogów, którą przegląda poczy wypełniania pól, skrótów klawiaturo-wymagające wykonania reset terminala).
włoka w poszukiwaniu programów.
wych (np. CTRL+A lub CTRL+E) umożli-cdcd
Odtwarzacz CD pracujący z wiersza poleceń.
Polecenia wewnętrzne. Niektóre polecenia, wiających powrót do początku lub końca Bardzo użyteczny. Obsługuje także bazę danych jak np. cd, export czy history, zostały umiesz-bieżącej linijki.
CD i cddb. Jeżeli program nie odnajdzie pliku czone wewnątrz kodu samej powłoki. Zwięk-konfiguracyjnego (.cdcdrc) w katalogu głównym Przeadresowanie i potoki. Każdy z trzech użytkownika, uruchomiony zostanie tryb interak sza to prędkość działania systemu (dostęp podstawowych strumieni danych (wejścio-tywny w celu uzyskania odpowiednich danych od do dysku nie jest potrzebny).
wy, wyjściowy, błędów) może być skiero-użytkownika.
Rozszerzenia symboli wieloznacznych.
wany w kierunku z lub do plików przy po-aumix
Odchudzony Mikser posiadający tylko Umożliwiają np. zmianę nazwy pliku rm mocy potoków.
podstawową funkcjonalność.
70
Marzec 2004
www.linux-magazine.pl
Tworzenie własnej powłoki
PROGRAMOWANIE
Patrząc na Listing 1 z perspektywy progra-powinniśmy się spodziewać. Program urucha-pliki podczas użytkowania plików zablokowa-misty zauważymy, że jest to bardzo prosty pro-mia się standardowo dzięki funkcji głównej, nych, opisano w Ramce 2: Priorytet dostępu.
gram. Być może będziemy musieli zmienić wraz z nazwą pliku wykonywalnego argv [0]
Trzeba zatem ustawić odpowiednią pułapkę, przełączniki urządzeń dla programów cdcd (poprzedzonym znakiem minus, gdy jest uru-która wykrywałaby naciśnięcie takiej kombi-i aumix, ale wymagają one co najwyżej podsta-chamiany jako powłoka) i kończy pracę (wylo-nacji klawiszy:
wowych wyjaśnień. Prawdopodobnie nie trze-gowując użytkownika z danego procesu) po za-ba nawet dodawać opcji dla kompilatora, zro-kończeniu funkcji main. Powłoka bash wyma-
/* Dodane do głównej funkcji */
bimy to jednak:
ga w tym miejscu użycia polecenia exit, które signal(SIGINT, CloseHandler);
jest odpowiednikiem użytej przez nas opcji gcc mmshell.c -o mmshell
Quit (wyjście z programu).
/* Ten parametr sprawia, że
Dodatkowo musimy wziąć pod uwagę moni-uchwyt może być ponownie użyty
Pamiętajmy jednak o tym, że program ten torowanie sygnału SIGINT. Pojawia się on do obsługiwania różnych sygna
będzie wykorzystywany jako powłoka, musi-w chwili naciśnięcia klawiszy CTRL+C przez łów */
my zatem rozważyć także inne kwestie z tym użytkownika. Gdyby nasze menu było zwy-związane.
kłym programem, zostałoby po prostu za-void CloseHandler(int Signal)
mknięte i musielibyśmy uruchomić je ponow-
{
Wody rzeki Orinoco
nie. Program jednak jest teraz powłoką, która puts('Exiting...');
Bez względu na to, czy będzie to interpreter spowodowałaby w takim przypadku także wy-
/* Stop all music here */
poleceń czy też samodzielny program, musimy logowanie użytkownika. A zanim to nastąpi, exit(0);
przede wszystkim pomyśleć nad podstawową powinniśmy zamknąć wszystkie uruchomione
}
strukturą programu. W końcu powłoka jest po programy i pliki oraz wyłączyć odtwarzaną prostu programem, więc niczego innego nie muzykę. Powód, dla którego musimy zamykać Zamiast obsługi sygnału CTRL+C, możemy go kompletnie zignorować. Poniżej podaliśmy Listing 1. Samodzielne menu
skuteczne rozwiązanie:
#include <stdio.h>
system("cdcd -d /dev/cdrom signal(SIGINT, SIG_IGN); /* U
#include <stdlib.h>
stop");
identical to sigignoreU
break;
(SIGINT); */
void PrintMenu(void)
case 3:
{
system("mplayer mp3s/*.mp3
Prawdopodobnie będziemy chcieli przechwy-puts("Menu Options\n");
&>/dev/null");
tywać także inne sygnały. Gdybyśmy starali się puts("1. Play CD");
break;
stworzyć np. powłokę matematyczną, należa-puts("2. Stop CD");
case 4:
łoby zająć się obsługą wyjątków zmiennoprze-puts("3. Play MP3s"); system("aumix -d /dev/mixer -
cinkowych (SIGFPE). Pełna lista sygnałów puts("4. Mute");
v0");
znajduje się w /usr/include/bits/signum.h, nie puts("5. Unmute");
break;
wszystkie z nich można jednak wykrywać (np, puts("9. Quit");
case 5:
SIGKILL czy SIGSTOP).
}
system("aumix -d /dev/mixer -
v99");
Jak kobieta
int GetUserOption(void)
break;
Dużo więcej kłopotu podczas programowania
{
}
powłoki stwarza funkcja system, która możecie char opt[16];
}
wierzyć lub nie, ładuje swój własny interpreter poleceń do wykonania podanego polecenia!
printf("Option: ");
int main(int argc, char **argv) Chodzi o powłokę sh z dowiązaniem symbo-fgets(opt, sizeof(opt), stdin);
{
licznym do bash. Nie jest to problem sam w so-opt[sizeof(opt)-1] = '\0';
int iOpt;
bie (oszczędza czas na załadowanie innej po-return atoi(opt);
włoki), ale jeżeli tworzymy powłokę dla specy-
}
puts("Multimedia Shell - v0.0\n"); ficznego środowiska, taka funkcja może oka-do
zać się problematyczna (będziemy wtedy mu-void ProcessMenu(int iOption)
{
sieli posiadać kopię bash na dysku).
{
PrintMenu();
Zamiast system użyjemy funkcji vfork w po-switch(iOption)
iOpt = GetUserOption();
łączeniu z execvp. Pierwsza z nich rozdziale
{
ProcessMenu(iOpt);
obecny program na dwa identyczne procesy.
case 1:
}
Pierwsza część rozwidlenia (zwana procesem system("cdcd -d /dev/cdrom while(iOpt != 9);
macierzystym [ang. parent]) pracuje jak zwy-play");
kła powłoka, a druga część (zwana procesem break;
return 0;
potomnym [ang. child]) wykonuje nasz pro-case 2:
}
gram zewnętrzny przy pomocy drugiej funkcji www.linux-magazine.pl
Marzec 2004
71
PROGRAMOWANIE
Tworzenie własnej powłoki
ni podczas programowania w powłoce, jest po Ramka 2. Priorytet dostępu
prostu nieobecna, gdy pracujemy bez niej.
Mimo że uprawnienia dostępu zabezpiecza-nego użytkownika i zabrania mmshell dostę-
Rozwiązanie przynoszą nam projektanci syste-ją system przed niepowołanymi gośćmi ko-pu do nowych poleceń czy dodatkowych lo-mu libc. W rzeczywistości proponują oni dwa rzystającymi z odtwarzacza CD czy karty gowań tego użytkownika. Plik lock powinien różne rozwiązania.
dźwiękowej, możemy jeszcze bardziej ogra-zostać usunięty po wylosowaniu użytkownika.
Pierwsze z nich polega na zamianie funkcji niczyć użycie mmshell do pojedynczego przy-Dopiero tutaj widać konieczność występo-execvp na funkcję execle. Obsługuje ona zwykłe padku. Dzięki temu zabezpieczymy się przed wania sygnałów obsługi (np. SIGINT). Je-parametry programu w innym formacie i wsta-sytuacją, w której dwóch użytkowników bę-
żeli, przykładowo, użytkownik naciśnie wia przed nimi pustą tablicę zmiennych środo-dzie wydawało sprzeczne ze sobą polecenia, kombinację klawiszy CTRL+C przy urucho-wiskowych.
a powłoka może odmówić dostępu obu użyt-mionym mmshell, a sygnał nie był obsługi-kownikom, w przeciwieństwie do music.
wany, plik lock nie zostałby nigdy usunięty execle("/usr/bin/cdcd", U
Możemy również utworzyć prosty plik lock i nikt nie mógłby zalogować się ponownie
"cdcd", "play", NULL, U
w katalogu /home/music. Plik ten jest po-jako użytkownik music do chwili ręcznego ppEnviroVars);
trzebny tylko jako wskaźnik zalogowania da-skasowania użytkownika root.
/* Note: full path required */
execvp. Rozwidlenie jest konieczne, ponieważ Beze mnie...
Drugie rozwiązanie polega na wykorzystaniu execvp zastępuje istniejący proces, uniemożli-Po usunięciu wywołania system z naszego inter-zmiennej globalnej! Zmienna nosi nazwę envi-wiając nam dalsze działanie interpretera pole-pretera poleceń straciliśmy więcej niż niepo-ron i ma taki sam format, jak opisana powyżej ceń. Tak więc dzięki rozbiciu procesu na dwie trzebne wywołanie bash. Straciliśmy przyjacie-ppEnviroVars. Używana jest w pozostałych for-części, jedna z nich działa dalej, a druga zuży-la! Wszystko, czego dostarcza nam powłoka, zo-mach non-execle, funkcji exec*().
wa się podczas pracy. Popatrzmy na Listing 2.
stało stracone (Ramka 1: Niektóre cechy po-Na koniec powinniśmy powiedzieć kilka W ten sposób otrzymujemy niejako włoki odświeży nam pamięć), np. przekierowa-słów o ścieżce wyszukiwania. Wiemy już jak w promocji kolejną cechę – możliwość ponie (ukrywa nadmierne dane wyjściowe mplay-działa execvp, przeszukując najpopularniejsze znania identyfikatora procesu (ID) urucho-er), zmienne środowiskowe (w szczególności katalogi w poszukiwaniu plików wykonywal-mionego programu. Możemy później wyko-polecenie PATH), czy symbole wieloznaczne.
nych – execplp działa tak samo. Inne odmiany rzystać ten identyfikator do usunięcia pro-Utrata ostatniej funkcji oznacza, że nie będzie-nie posiadają już jednak tej funkcji. Z reguły cesu (a więc wyciszenia muzyki) w chwili my mogli już korzystać z *.mp3 w naszej li-nie stwarza to wielkiego problemu, gdyż roz-naciśnięcia przez użytkownika kombinacji stwie odtwarzania. Próbując użyć tej funkcji, sądnie jest umieszczać pełne ścieżki dostępu klawiszy CTRL+C.
otrzymamy jedynie komunikat błędu mówiący do plików, które chcemy uruchamiać – zwięk-o braku pliku *.mp3. Problem ten możemy roz-sza to bezpieczeństwo systemu.
kill(process_id, SIGKILL);
wiązać w trójnasób – podając nazwę każdego pliku w katalogu, wykorzystując zestaw pole-Kapitan Huśtawka
execvp jest jedną z odmian funkcji exec*().
ceń opendir-readdir-closedir lub też powraca-W zależności od punktu widzenia, bezpieczeń-
Wszystkie z nich opisano w man exec, więc za-jąc do polecenia system. Niestety, nie mamy tyle stwo jest fantastycznym wyzwaniem i miej-praszamy do lektury.
miejsca na łamach naszego pisma, aby zamie-scem wykorzystania nieskończonych możliwo-Wywołanie naszej funkcji usuwającej pro-
ścić tutaj pełne rozwiązanie. Umieściliśmy je ści lub też największym problemem admini-ces można przeprowadzić następująco: jednak na stronie internetowej magazynu Li-stracyjnym dzisiejszych czasów. Cokolwiek nux Magazine pod adresem http://www.linux-byśmy nie myśleli, bezpieczeństwo jest na char *args[] = { "cdcd",U
magazine.pl/issue/02/mmshell2.c pewno najbardziej istotne. Nawet programiści
"play", NULL };
Kolejną funkcją powłoki, której brak bę-
nie są odporni na zwracanie uwagi na bezpie-ForkAndExec("cdcd", args); dziemy mocno odczuwać, jest środowisko.
czeństwo. W końcu to właśnie przede wszyst-Każda zmienna, od której będziemy uzależnie-kim programiści popełniają błędy w zabezpie-Tutaj musimy nadać nazwę programu w dwóch miejscach: nazwa pliku wykonywal-Listing 2. Dzielenie na dwa procesy nego i pierwszy argument. Przyjmuje się, że void ForkAndExec(const char *pName, printf("ERROR! Could not spawn argument zerowy oznacza nazwę pliku. Nie const char **ppArgs)
%s...", pName);
musi to być prawdziwa nazwa pliku (jako że
{
return;
ktoś może korzystać z dowiązań symbolicz-pid_t process_id;
case 0:
nych), ale użycie prawdziwej nazwy nie bę-
/* Używamy vfork zamiast fork,
execvp(pName, ppArgs);
dzie stanowić problemu.
ponieważ tak jest szybciej */
exit(0);
Będąc programistami języka C, przyzwy-
/*jeśli zamierzamy jedynie, aby default:
czailiśmy się już, że nazwa programu okre-potomek wywoływał execvp */
/* Proces macierzysty */
ślana jest przez argv[0]. Nazwa pliku nie process_id = vfork();
printf("Spawned PID %d\n", wymaga pełnej ścieżki dostępu, gdyż nasza switch(process_id)
process_id);
wersja evecvp przeszuka automatycznie ka-
{
}
talogi /bin i /usr/bin (jeżeli nie podano case -1:
return process_id;
ścieżki dostępu).
72
Marzec 2004
www.linux-magazine.pl
Tworzenie własnej powłoki
PROGRAMOWANIE
czeniach programów! Rozważmy jednak, czym główny. Aby potwierdzić ścieżkę dostępu do włoki (jako że napisaliśmy ją sami, wiemy, jest błąd zabezpieczeń?
pliku wykonywalnego, spróbujmy wpisać: że jest stosunkowo bezpieczna!), kopiujemy Szybki rzut oka na publikowane rady (typu ją do katalogu /usr/bin i dodajemy jej nazwę BugTraq) czy też wiadomości z zakresu $ which mplayer
do listy dostępnych interpreterów poleceń.
(nie)bezpieczeństwa w Linux-Magazine, po-
/usr/local/bin/mplayer
Pamiętajmy, żeby podczas wykonywania tej zwala wyróżnić kilka głównych problemów operacji posiadać przywileje użytkownika związanych z ochroną systemu. Najczęściej Bezpieczne programowanie jest tematem tyle głównego (roota).
problem jest następujący:
rozległym, co skomplikowanym. Napisano na Wersja X programu Y posiada błąd przepełnienia ten temat wiele książek i opracowań. Niektóre
# cp mmshell /usr/bin
bufora, który może być wykorzystany, umożliwiając z nich są dostępne pod adresami [3] i [4].
# echo /usr/bin/mmshell >>/etcU
wykonywanie dowolnych poleceń przez intruza
/shells
podszywającego się pod bieżącego użytkownika.
Śpiąc w samochodzie
Mimo że jest to poważny problem dla ser-Po skończeniu projektu powinniśmy go prze-Teraz musimy sprawić, aby znak zachęty do werów głównych (root) lub mających dostęp testować. Stwórzmy zatem użytkownika o na-logowania używał naszej powłoki zamiast po-do grupy wheel, dla nas może być to sprawa zwie music i dołączmy go do grupy audio.
włoki bash. Zmian możemy dokonać bezpo-marginalna, nie wymagająca naszej uwagi.
średnio w pliku /etc/passwd, jednak nie zale-W końcu jest to tylko prosty interpreter po-
# adduser --ingroup audio music camy takiego rozwiązania. Lepiej użyć progra-leceń. Jeżeli mamy go używać, musimy jed-mu chsh. Działa on na dowolnym koncie użyt-nak posiadać odpowiednie uprawnienia do Upewnijmy się jeszcze, że grupa audio po-kownika, ale zmiana powłoki także innych pracy na tym komputerze (moglibyśmy wy-siada odpowiednie uprawnienia dostępu do użytkowników wymaga użycia konta użytkow-rządzić więcej szkód używając bash i polece-sterowania odtwarzaczem CD oraz karty munika głównego.
nia rm!). Prawda? Każdy problem związany zycznej i będziemy już gotowi do testów funk-z bezpieczeństwem jest istotny. Jeżeli korzy-cjonalnych użytkownika. Jako że utworzony $ chsh -s /usr/bin/mmshell
stamy z mmshell w ograniczonym środowisku przez nas interpreter poleceń jest bardzo re-
(np. do obsługi kiosku interentowego czy strykcyjny, nie uruchamiajmy go na naszym Zmiana powłoki będzie obowiązywać od chwi-bankomatu), użytkownicy nie będą mieli koncie użytkownika, aby później nie błądzić li ponownego zalogowania do systemu. Tak możliwości zmiany powłoki. Luka w bezpie-po omacku i być w rezultacie zmuszonym do więc napiszmy „exit” i zalogujmy się ponow-czeństwie może to umożliwiać, przez co hac-załogowania się jako użytkownik główny (ronie. Jeżeli wszystko działa prawidłowo (a nie kerzy znajdą punkt wejścia do ataku.
ot), żeby usunąć powstałe usterki.
ma powodu, żeby nie działało poprawnie), być Bezpieczeństwo powłoki można osiągnąć Testowanie mmshell to proces dwuetapowy.
może będziemy musieli zmienić ścieżki dostę-
solidnymi technikami programistycznymi: W pierwszym musimy zalogować się jako użyt-pu dla poszczególnych programów, np. aumix kompilując kod należy brać pod uwagę każde kownik music z powłoką i korzystać z progra-czy mplayer), zobaczymy na ekranie: ostrzeżenie, które kompilator nam podaje, mu, jak ze zwykłego systemu menu. Potwierdzi można też skorzystając z narzędzi typu Splint to posiadanie ustalonych wcześniej właściwych mymachine login: music
[1] czy Flawfinder [2] do przeprowadzenia uprawnień i działanie sygnałów. W drugim eta-Password:
szczegółowych testów. Powinniśmy sprawdzić pie musimy skonfigurować użytkownika music Linux tori 2.4.19 #44 SMP Sun
granice bezpieczeństwa (najlepiej nie korzy-w taki sposób, aby po zalogowaniu ładowany Dec 28 19:07:54 GMT 2003 i686 U
stając z narzędzi typu sprintf i strcpy), potwier-był nasz nowy interpreter poleceń.
unknown
dzić wejście użytkownika (kontrola, usuwanie Mimo że system Linux umożliwia zwykłym Last login: Sun Jan 4 U
i sekwencje wyjścia) oraz unikać niepewnego użytkownikom zmianę powłoki, nie pozwala 14:32:26 2004 from mymachine
oprogramowania. Ostatni punkt ciężko zreali-jednak na dodanie własnych powłok do syste-zować, gdyż będziemy uruchamiać inne pro-mu. Jedynymi dozwolonymi powłokami są te, Powłoka multimedialna U
gramy, a kontrolę już przekazaliśmy naszej znajdujące się w pliku /etc/shells file. Dzięki te-
– wersja 0.1
powłoce. Tworzenie bezpiecznych systemów mu zapewniamy bezpieczeństwo i stabilność staje się coraz trudniejsze z powodu wielkiej systemu. Użytkownicy wierzą, że ich interpre-Opcje Menu
ilości nieznanego oprogramowania (np. mater poleceń będzie dyskretny, nie zapisując łych programów typu klient i edytorów).
każdego naciśnięcia klawisza w pliku dzienni-1. Odtwarzaj CD
Gdy już znaleźliśmy (lub napisaliśmy) bez-ka. Nawet gdyby użytkownik zalogował się do 2. Zatrzymaj CD
pieczny program, możemy go uruchomić. Aby systemu używając bezpiecznej powłoki (takiej 3. Odtwarzaj pliki MP3
utrzymać odpowiedni poziom bezpieczeństwa, jak ssh), naciśnięcia klawiszy mogą być nadal 4. Wycisz
należy uruchomić program z pełną ścieżką do-przechwytywane przez interpreter poleceń po-5. Włącz dźwięk
stępu. Nie będzie w ten sposób miejsca na swo-dobny do konia trojańskiego (w chwili, gdy po-9. Wyjście
bodną interpretację położenia np. programu włoka ssh przekaże sterowanie domyślnej po-
'mplayer', zamiast którego zostanie urucho-włoce użytkownika). Na szczęście tylko użyt-Oto nasze menu! Powłoka ma podstawową miony (pomyłkowo lub celowo) koń trojański.
kownik główny (root) ma przywileje umożli-funkcjonalność, ale nic nie stoi na przeszko-Oczywiście program wykonywalny powinien wiające zmianę powłok, więc ryzyko zarażenia dzie, żeby zaktualizować mmshell, dodając no-być przechowywany w bezpiecznym katalogu, się trojanem jest stosunkowo niskie.
we funkcje zgodnie z potrzebami. Można także do którego dostęp ma wyłącznie użytkownik Po wnikliwej analizie nowego kodu po-napisać nowy interpreter poleceń.
■
www.linux-magazine.pl
Marzec 2004
73