Posiadanie serwera wirtualnego jest dziś niemal równoznaczne z dostępem do Shella. Co takiego oferuje konto shellowe i w jaki sposób może ułatwić i przyspieszyć codzienną pracę webmastera-programisty?
Shell to powłoka systemów UNIX lub Linux, używana do wykonywania poleceń systemowych. Pozwala na wykonywanie komend systemu operacyjnego i swobodny dostęp do zasobów maszyny. Poprzez powłokę można również uruchamiać programy.
Tak się składa, że większość serwerów WWW pracuje na systemach opartych o różne dystrybucje Linuksa. Wykupując hosting, bardzo często spotkasz się z podpunktem, że dana usługa będzie oferowała dostęp do konta Shell. Mimo to administratorzy w firmach hostingowych bronią się rękami i nogami przed rozdawnictwem takich kont.
Stwarzają one duże możliwości w zakresie zarządzania całą jednostką, jaką jest serwer fizyczny. Jest to oczywiste zagrożenie nieustannej pracy serwera. Właśnie z uwagi na bezpieczeństwo maszyny, na której znajdują się konta kilkudziesięciu i więcej klientów, tylko posiadacze większych pakietów hostingowych otrzymują dostęp do powłoki.
W tym artykule powiemy o tym, w jaki sposób to narzędzie może służyć webmasterowi, który tworzy dynamicznie generowane witryny, czyli te pracujące w oparciu o technologie skryptowe, takie jak PHP, CGI czy JSP.
Dostęp do konta Shell na innym komputerze niż ten, na którym aktualnie pracujesz, nazywa się fachowo dostępem zdalnym. Oznacza to, że możesz bezproblemowo wykonywać polecenia powłoki na innym serwerze oddalonym o dziesiątki, setki lub tysiące kilometrów od miejsca zamieszkania. Jedyny warunek to poprawne zalogowanie się.
Do połączenia z kontem powłoki można wykorzystać dwa protokoły. Jeden z nich to Telnet, który pracuje na porcie 23. Niestety, jedna wada sprawia, że obecnie nie warto go stosować. Informacje przesyłane pomiędzy klientem a serwerem nie są szyfrowane. Oznacza to, że hasło do twojego konta i pozostałe informacje, które komputer przesyła do serwera, mogą zostać podsłuchane.
Podejmując ryzyko, możesz zalogować się przez Telnet i to bez instalacji żadnego dodatkowego oprogramowania. W systemie Windows wystarczy skorzystać z narzędzia \”uruchom…\” i wprowadzić \”telnet\”. Gdy ukaże się konsola, wystarczyć wprowadzić adres głównej domeny serwera, hasło i oto już jesteś zalogowany.
Drugim, preferowanym protokołem, a zarazem udoskonalonym następcą Telneta jest SSH (skrót od Secure Shell). Bezpieczny Shell oferuje już pełne szyfrowanie wszystkich danych wymienianych na drodze pomiędzy klientem a serwerem. Pracuje na porcie 22. Do połączenia przez ten protokół będzie potrzebny odpowiedni program. Zdecydowanie najpopularniejszym jest mała aplikacja o nazwie PuTTY. Można ją pobrać z serwera mieszczącego się pod adresem http://www.putty.net.pl.
Uruchamianie sesji Telnet
{tlo_1}
Krok 1: Uruchomienie
Korzystając ze start -> uruchom…, włącz wbudowane w system Windows klienta Telnet.
{/tlo}
{tlo_0}
Krok 2: Wprowadź polecenie
odpowiedzialne za połączenie z hostem, tj. {stala}o nazwaserwera{/stala} (\”o\” od open).
{/tlo}
{tlo_1}
Krok 3: Logowanie
na konto z wykorzystaniem loginu i hasła administratora bądź użytkownika uprawnionego do otwierania sesji shellowych.
{/tlo}
{tlo_0}
Krok 4: Po zalogowaniu
wyświetli się informacja o ostatnim połączeniu oraz znak zachęty ($), po którym należy wpisywać wszystkie polecenia.
{/tlo}
Uruchamianie sesji SSH przy użyciu programu PuTTY
{tlo_1}
Krok 1: Uruchom klienta PuTTY
który umożliwia łączenie się z kontem Shell za pomocą czterech protokołów.
Krok 2: Wybierz protokół SSH
i wprowadź nazwę serwera.
{/tlo}
{tlo_0}
Krok 3: Logowanie na konto
z wykorzystaniem loginu i hasła administratora bądź użytkownika uprawnionego do otwierania sesji shellowych.
{/tlo}
{tlo_1}
Krok 4: Po zalogowaniu
wyświetli się informacja o ostatnim połączeniu oraz znak zachęty ($), po którym należy wpisywać wszystkie polecenia.
{/tlo}
Podstawowe komendy
Po zalogowaniu się na konto shellowe zostaniesz przeniesiony do domyślnego katalogu. Aby poznać dokładną lokalizację, wpisz komendę {stala}pwd{/stala} Przykładowy rezultat może być taki: {stala}/home/users/admin{/stala}. Jeżeli chcesz sprawdzić, jakie pliki i katalogi znajdują się w danej lokalizacji, możesz dokonać jego wylistowania: {stala}ls{/stala}. Jeżeli twoja strona znajduje się w innym katalogu, np. {stala}/home/users/mojastrona{/stala}, możesz przejść tam, przy użyciu komendy {stala}cd ../nazwa_uzytkownika{/stala}.
Dotychczasowe hasło można zmienić, wprowadzając komendę {stala}passwd{/stala}. Zostaniesz poproszony o wprowadzenie dotychczasowego hasła, a następnie o dwukrotne wpisanie nowego hasła. W większości przypadków zmiana tego parametru, oznaczać będzie zmianę hasła dla głównego konta poczty oraz hasła do połączenia z serwerem ftp.
A to tylko część komend służących do poruszania się po strukturze katalogów serwera. (Więcej w tabeli 1.)
Midnight Commander
Z pewnością wygodniejszym sposobem poruszania się po zasobach dysku serwera jest graficzny eksplorator. Taką funkcję pełni Midnight Commander, który bardzo przypomina Norton Commandera. Uruchamia się go za pomocą polecenia {stala}mc{/stala}. Opisywanie, w jaki sposób poruszać się po MC, nie miałoby chyba najmniejszego sensu. Warto jednak wspomnieć o paru ciekawych opcjach: funkcji \”Info\”, która pozwala sprawdzić, ile jeszcze miejsca pozostało na dysku (zakładka left lub right), oraz funkcji \”FTP link\” umożliwiającej łączenie się z zewnętrznymi serwerami FTP.
Do czego może przydać się FTP link?
Każdy, kto prowadzi serwis internetowy często spotyka się z problemem wgrywania (uploadu) plików na serwer. Tradycyjnie wgrywanie np. wersji demo gry odbywa się w dwóch etapach. Najpierw pobiera się z serwera FTP producenta duży plik, a następnie wrzuca go na serwer docelowy.
W ten sposób niepotrzebnie dwukrotnie obciąża się swoje domowe łącze (raz ściągając, drugi raz wgrywając). Czy nie lepiej byłoby pobrać ten plik od razu na własny serwer? Przecież serwery dysponują bardzo szybkimi łączami o ogromnej przepustowości.
Na to pozwala właśnie funkcja \”FTP Link\”. Po połączeniu się z serwerem FTP można dokonywać wszystkich operacji. Oczywiście nie sprawdza się to w przypadku serwerów publicznych, które nie nadają aż takich uprawnień. Lecz jeżeli jest to typowe konto FTP, każdy użytkownik może wykonywać wszystkie dozwolone w tym protokole operacje.
Przy dokonywaniu połączeń obowiązuje schemat: {stala}#ftp:uzytownik:haslo@serwer.pl/katalog{/stala}.
WGET
W trakcie poszukiwań najlepszego programu do pobierania plików z sieci natrafisz z pewnością na znakomitego wgeta. W Shellu jest to jedna z tych aplikacji, które omawiane są obowiązkowo. Nic dziwnego, bo wget to program prosty w nieskomplikowanych zastosowaniach i doskonały w zaawansowanych. Pozwala na pobieranie plików za pośrednictwem protokołów HTTP, HTTPS i FTP. Do komunikacji wykorzystuje zwykłą linię komend, dlatego łatwo go będzie sprzęgnąć z Cronem (o którym już zaraz).
Za pomocą wgeta pobierzesz nie tylko konkretny, wskazany plik, ale również i całą stronę. Aplikacja potrafi pracować rekurencyjnie, podążając za odnośnikami ukrytymi w kodzie HTML witryn. Wgeta można użyć do aktualizacji/prowadzenia mirrora, czyli lustrzanego odbicia wybranego serwera FTP. Program sam sprawdzi, które pliki zmieniły się od czasu ostatniej wizyty, a następnie pobierze tylko te, które zostały dodane lub zmieniły datę modyfikacji.
Wget może pracować za pośrednictwem proxy. Najprostsza komenda, która pobierze plik z określonego serwera, wygląda następująco: {stala}wget ftp://nazwaserwera.pl/plik.rar{/stala}. W wgecie obowiązuje następująca składnia: {stala}Wget [OPCJE] [ADRES/ADRESY URL]{/stala}.
Pakowanie i rozpakowywanie
Zwykle gdy zechcesz ściągnąć i uruchomić duże, gotowe skrypty na serwerze, np. fora, musisz wykonać cały zestaw czynności. Na początku należy pobrać forum na dysk lokalny, rozpakować, skonfigurować, a następnie wgrać na serwer, dbając przy okazji o parametry bazy danych.
Jakby tego było mało, samo wgrywanie zazwyczaj trwa bardzo długo, ponieważ typowe forum składa się z setek plików zawierających głównie grafiki i skrypty.
Za pomocą Shella możesz tę czynność wykonać inaczej: pobrać dystrybucję forum bezpośrednio z oficjalnej witryny programu, rozpakować na serwerze i dopiero całość przy użyciu edytora dostępnego w tym środowisku skonfigurować. Pierwsze dwie czynności będą trwały zaledwie kilkanaście sekund zamiast kilkunastu długich minut.
Najpierw wykorzystaj program wget, aby pobrać plik, a następnie rozpakuj go przy użyciu polecenia {stala}tar{/stala}:
wget http://ovh.dl.sourceforge.net/sourceforge/phpbb/phpBB-2.0.18.tar.gz
tar xzf phpBB-2.0.18.tar.gz
W tym momencie dostępny jest już katalog phpBB2 z całym forum.
CRON
Cron to tak zwany demon, czyli typowy program, który nieustannie pracuje w tle linuksowego systemu operacyjnego. Linuksowy Cron pod nieco inną postacią jest z pewnością znany także tym, którzy pracują na platformach Microsoftu. Windowsowy odpowiednik występuje pod nazwą Harmonogram Zadań, a jego możliwości są bardzo zbliżone w stosunku do Crona. Potrafi on zatem wykonać zaprogramowane wcześniej zadanie o ustalonym czasie, czyli przeważnie uruchomić lub zatrzymać jakiś zewnętrzny program.
Jak działa CRON?
Cron uruchamiany jest automatycznie podczas startu systemu operacyjnego. Ponieważ typowy serwer internetowy pracuje non stop, Cron działa wraz z nim w tle systemu. Uaktywnia się przy tym co minutę, sprawdzając, czy istnieją nowe zadania do wykonania. Jeżeli tak, Cron zrealizuje zlecone mu polecenia. Oczywiście zadania muszą być gdzieś gromadzone. Służą do tego pliki konfiguracyjne, posiadające format crontab.
Crontab to jednocześnie program, który pozwala na edycję plików konfiguracyjnych, czyli wprowadzanie, modyfikowanie i usuwanie zadań. Crontab dba o spójność i poprawność plików konfiguracyjnych oraz odpowiada za wczytywanie zadań do pamięci Crona. Tym sposobem po każdej modyfikacji plików konfiguracyjnych nie ma potrzeby restartowania głównego demona, jakim jest Cron.
Warto w tym momencie zaznaczyć, iż administratorzy serwerów oferują użytkownikowi ograniczoną funkcjonalność w stosunku do pełnych możliwości serwera (ze względów bezpieczeństwa i konieczności zapewnienia bezawaryjnej pracy serwera). Z tego też powodu nie omawiamy w tym artykule sposobu instalacji, uruchomienia i administracji Cronem.
Zastosowania
Crona można wykorzystać np. do cyklicznego uruchamiania aplikacji diagnostycznych, które sprawdzą np. czy żadna z tabel w bazie nie uległa przypadkiem uszkodzeniu.
Zastosowań jest wiele: ktoś może potrzebować systemu wysyłającego raz dziennie na adres e-mail statystyki odwiedzin witryny lub informacje o liczbie nowo zarejestrowanych kont. Ktoś inny może wykorzystywać Crona do powiadamiania pracowników o zamówieniach wykonanych przez firmę w danym dniu lub generowania zbiorczego zestawienia pod koniec tygodnia. Z kolei ktoś, kto prowadzi forum internetowe, może udostępnić opcję powiadamiania o nowych wątkach na forum.
Prowadzący rozmaite newsroomy mogą zrezygnować z codziennego wysyłana listów mailingowych, ponieważ Cron raz dziennie, w czasie najmniejszego ruchu (około 3-6 nad ranem), wyśle mailing, tworząc automatycznie (na podstawie danych z bazy) wyciąg z podsumowaniem dodanych w danym dniu newsów.
Jeżeli witryna udostępnia kanały RSS, Cron może posłużyć do generowania nowego pliku, nie za każdym razem, gdy odwoła się do niego użytkownik, ale np. raz na 3 godziny.
Dostęp do Crontaba
Aby wprowadzić nowe zadania lub zmienić istniejące, należy edytować plik konfiguracyjny przy użyciu programu Crontab. Do każdego konta shellowego przypisany jest dokładnie jeden plik konfiguracyjny Crontab. Tym sposobem, edytując jego zawartość, znajdziemy w nim tylko swoje zadania.
- Edycja zawartości pliku Crontab odbywa się poprzez wprowadzenie polecenia {stala}crontab -e{/stala}.
- Zawartość całego pliku Crontab można wyświetlić na ekranie (wylistować) korzystając z polecenia {stala}crontab -l{/stala}.
- Usunięcie (skasowanie) zawartości aktualnego pliku Crontab odbywa się poprzez polecenie {stala}crontab -r{/stala}.
Edycja pliku Crontab właściwie niczym nie różni się od edycji pliku tekstowego. Odbywa się ona przy użyciu domyślnego edytora tekstu, choć i to można zmienić. Jeżeli wolisz pracować na edytorze Vi, możesz zmienić domyślny edytor, korzystając z polecenia: {stala}export EDITOR=vi{/stala}. A gdy zechcesz zmienić edytor na mcedit: {stala}export EDITOR=mcedit{/stala}.
Programowanie zadań
Format dokumentów Crontab jest bardzo restrykcyjny: każde zadanie zajmuje jedną linię i składa się z siedmiu poleceń. Szablon przykładowego zadania prezentuje się następująco:
{stala}minuta godzina dzień_miesiąca miesiąc dzień_tygodnia użytkownik polecenie{/stala}
Jak łatwo zauważyć, najwięcej, bo aż pięć zmiennych wykorzystywanych jest do sprecyzowania czasu, w którym zostanie wykonane polecenie. Jako że polecenie {stala}użytkownik{/stala} jest w omawianym przypadku niepotrzebne, można je odrzucić.
Rozpoczynając edycję pliku konfiguracyjnego ze swojego konta, dajesz Crontabowi wystarczającą wskazówkę, którego użytkownika to zadanie dotyczy. W miejsce polecenia wprowadź dowolne odwołanie do programu czy skryptu. Możesz do tego wykorzystywać parametry. Wszystko odbywa się analogicznie jak przy wprowadzaniu poleceń za pomocą linii komend.
Oto polecenia, które precyzują, kiedy ma zostać uruchomiona komenda:
- minuta – 0-59 – w której minucie godziny,
- godzina – 0-23 – o której godzinie,
- dzień_miesiąca – 1-31 – w którym dniu miesiąca,
- miesiąc – 1-12 lub słownie – w którym miesiącu; wyrażony numerycznie lub trzyliterowym skrótem angielskiej nazwy miesiąca (np. Jul, Dec),
- dzień_tygodnia – 0-7 lub słownie – w którym dniu tygodnia; wyrażony numerycznie lub trzyliterowym skrótem angielskiej nazwy dnia (np. Mon, Fri), gdzie 0 i 7 to niedziela, 1 poniedziałek, itd.
Przy zapisie poleceń występują dwa znaki specjalne:
- * (asteriks) – wszystkie wartości z zakresu są dopuszczone, czy też wartość jest nieistotna (\”*\” przy parametrze miesiąc oznacza, że zadanie dotyczy wszystkich miesięcy w roku).
- , (przecinek) – służy do utworzenia listy dopuszczanych wartości (\”1,3,5,7\” przy dzień_tygodnia oznacza, że zadanie będzie wykonywane w nieparzyste dni tygodnia).
- – (pauza) – pozwala na tworzenie zakresu dopuszczanych wartości (\”1-14\” przy dzień_miesiąca oznacza, że zadanie będzie wykonywane od 1 do 14 dnia miesiąca).
- / (podzielone) – dzieli zakres w taki sposób, że co n-ta wartość jest dopuszczona (\”*/2\” przy dzień_miesiąca oznacza, że zadanie będzie wykonywane w co drugi dzień miesiąca).
Przykładowe zadania
* * * * * php /home/users/work/test.php
Co minutę zostanie uruchomiony parser php, który zinterpretuje i zwróci wynik działania skryptu o nazwie test.php zlokalizowanego na koncie work.
0 * * * * php /home/users/work/test.php
Zadanie będzie uruchamiane co godzinę.
40 15 * * * php /home/users/work/test.php
Zadanie będzie uruchamiane codziennie o 15:40.
0 4 1 * * php /home/users/work/test.php
Zadanie będzie uruchamiane w pierwszy dzień miesiąca o 4:00.
25 3 * * 3 php /home/users/work/test.php
Zadanie będzie uruchamiane w każdą środę o 3:25.
0 0 1 1 * php /home/users/work/test.php
Zadanie będzie uruchamiane o północy pierwszego dnia roku (1 stycznia).
0 4 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * php /home/users/work/test.php
Zadanie będzie uruchamiane nad ranem, o 4:00 w nieparzyste dni miesiąca.
0 3 */2 * * php /home/users/work/test.php
Zadanie będzie wykonywane w co drugi dzień miesiąca o godzinie 3:00.
0,30 0-4 * * * php /home/users/work/test.php
Zadanie będzie wykonywane od północy do 4 rano co pół godziny.
15-30 3 * * * php /home/users/work/test.php
Zadanie będzie uruchamiane codziennie, od 3:15 do 3:30 – co minutę.
*/10 * * * * php /home/users/work/test.php
Zadanie będzie uruchamiane co 10 minut.
0 3 5,15,25 * 5 php /home/users/work/test.php
Zadanie będzie wykonywane 5., 15. i 25. dnia każdego miesiąca o godzinie 3:00, jak i we wszystkie piątki o godzinie 3:00. Warto zwrócić uwagę, że pola dzień_tygodnia i dzień_miesiąca działają niezależnie, co ilustruje ten przykład.
Specjalne definicje czasu
Istnieje alternatywna forma wyrażenia czasu, która znacząco upraszcza ten zapis. Składa się ona ze znaku specjalnego, małpy oraz słowa kluczowego. Z pewnością ma to jedną ważną zaletę: całość jest znacznie łatwiejsza do odczytania i poprawnego zrozumienia przez człowieka.
- {stala}@reboot{/stala} – uruchamia zadanie przy (re)starcie systemu operacyjnego. Co ciekawe, możliwości zdefiniowania takiego zadania nie było przy wcześniejszej metodzie, stąd funkcja ta jest unikalna. Serwery są restartowane bardzo rzadko i jedynie z konkretnego powodu. Może to oznaczać, że został uszkodzony na przykład dysk twardy, który wymaga wymiany lub zaistniała inna sytuacja kryzysowa. Wykorzystanie {stala}@reboot{/stala} pozwala sprawdzić, czy z serwisem jest wszystko w porządku.
- {stala}@yearly{/stala} – uruchamia zadanie raz w roku (1 stycznia).
- {stala}@monthly{/stala} – uruchamia zadanie raz w miesiącu (1. dnia miesiąca).
- {stala}@weekly{/stala} – uruchamia zadanie w niedziele o północy.
- {stala}@daily{/stala} – uruchamia zadanie codziennie o północy.
- {stala}@midnight{/stala} – jak wyżej.
- {stala}@hourly{/stala} – wykonuje zadanie co godzinę.
Przykładowy sposób użycia:
@hourly php /home/users/work/test.php
Zapamiętywanie zadania
Po napisaniu zadań w edytorze Vi należy zapisać plik Crontaba korzystając z polecenia {stala}:w{/stala}, a następnie wyjść z programu używając {stala}:q{/stala} lub za jednym razem – {stala}:wq{/stala}. Jeżeli wszystko przebiegło pomyślnie, na ekranie powinien pojawić się komunikat:
{stala}crontab: installing new crontab{/stala}.
Po zapisaniu pliku może też pojawić się błąd. Stanie się to wtedy, gdy w zapisie zabraknie na przykład jednego asteriksa. W tym przypadku pojawi się komunikat zbliżony do tego:
{stala}\”/tmp/crontab.27190\”:2: bad hour{/stala}
{stala}errors in crontab file, can\’t install.{/stala}
Zostaniesz poproszony o dokonanie poprawek w pliku, ponieważ Crontab nie dopuści do uruchomienia niepoprawnego pliku z zadaniami.
Zobacz w sieci
- http://www.putty.net.pl/
polski mirror programu PuTTY - http://www.gnu.org/software/wget/
podręcznik do Wgeta - http://www.man.rzeszow.pl/docs/podrecznik/temat-13.htm
dokumentacja edytora Vi stanowiąca doskonałą pomoc dla początkujących, zawiera wykaz komend programu
Podsumowanie
W artykule zaprezentowaliśmy bogactwo możliwości, jakie oferuje dostęp do konta Shell. Począwszy od lepszego zarządzania zasobami dyskowymi, poprzez możliwości zdalnego pobierania, a na wykonywaniu zaplanowanych zadań skończywszy. Jeżeli chcesz wiedzieć więcej na temat Shella, który jako narzędzie nie powinien być obcy żadnemu webmasterowi, skorzystaj z zamieszczonych w artykule odnośników do pomocnych stron w sieci.