Wrappers

Skrypty otaczające

Poprzednio omówione zostały powszednie problemy pojawiające się podczas budowy metodą package user i sposoby radzenia sobie z nimi. Rozwiązanie błędów podczas instalacji wymaga zazwyczaj edycji jednego lub wiecej plików Makefile. Dokonywanie tych zmian ręcznie jest męczące nawet gdy taka potrzeba pojawia się sporadycznie. Ilekroć będziesz chciał przeinstalować pakiet będziesz musiał dokonać zmian ponownie. Skrypty sed i patch pomagają w kolejnych przypadkach ale muszą być tworzone indywidualnie dla każdego pakietu. Istnieje lepsze rozwiązanie. Mimo, że istnieje nieskończona ilość sposobów instalacji plików naprawdę niewiele jest używanych przez pakiety. Pięć poleceń mkdir, chgrp, chown, chmod i install są odpwiedzialne za za wiele zwykle występujących problemów podczas instalacji. Skrypty rozpoznają pewne wzorce problemów i obsługują je automatycznie.

Instrukcje w części dotyczącej specyfiki LFS wskazują aby zainstalować skrypty otaczające w /usr/lib/pkgusr. Jeśli to zrobisz i upewnisz się, że ten katalog jest pierwszym wpisem w PATH każdego użytkownika pakietu wtedy oszczędzisz sobie wiele czasu zmarnowanego na obsługę powtarzających się błędów. Zauważ, że jeśli chcesz wybrać inny katalog niż /usr/lib/pkguser dla skryptów musisz zachować ostrożność. Niektóre skrypty konfiguracyjne ignorują pewne lokacje. Podkatalogi /etc np. nie będą działać ponieważ /etc jest jedną z tych lokacji.

Istotne jest, żebyś zrozumiał ograniczenia skryptów otaczających. Mogą one rozwiązać pewne problemy bez interwencji użytkownika. Ale inne problemy ze względu na swoją naturę wymagają ręcznej interwencji. Gdy program próbuje instalować plik z ustawionym bitem setuid skrypt zapobiegnie temu nie pozwalając na próbę zmiany właściciela na root. To pozwoli przejść dalej w procesie instalacji bez błędów lecz jest to tylko częściowe rozwiązanie. Skrypt nie może (i nie powinien) brać odpowiedzialności za decyzję w kwestii czy program powinien mieć ustawiony setuid root czy nie. Skrypt jedynie włącza komunikaty błędów do standardowego wyjścia błędu i oznacza je z początku „***” w miejscach, gdzie powinno się zwrócić szczególną uwagę. Za „***” pojawi się oryginalne polecenie, które instalacja próbowała wykonać. *Musisz* sprawdzic te linie oznaczone „***”, zbadać pliki i katalogi i podjąć odpowiednią akcję. W związu z tym konieczne jest logowanie wyjścia poleceń i bezwzględne ich sprawdzanie. Skrpyt ‚build’ zawarty w more_control_helpers demonstruje pewne użyteczne w tym celu triki przekierowania. Poniższe trzy przykłady powinny zilustrować na jaki rodzaj wpisów powinieneś być wyczulony:

Przykład I

„*** install -c rsh -o root -m 4775 /usr/bin/rsh”
Ta wiadomość jest wyjściem ze skryptu otaczającego instalację inetutils. Pakiet chciał zainstalować plik rsh z ustawionym bitem setuid root. Skrypt otaczający usunął „-o root” i zmienił „-m 47775” na „-m 755” przed wydaniem polecenia w realnej instalacji. Istotną sprawą jest „-m 4xxx” ponieważ chce ustawić bit setuid. Niektóre skrypty instalacyjne wrzucają „-o root” jako dobre rozwiązanie dla zwykłych binarek. W takich przypadkach wystarczy, że skrypt usunie „-o root” i nie musisz podejmować dalszych czynności. Ale kiedy, jak w przypadku inetutils, uprawnienia wskazują na próbę dodania setuid lub setgid wtedy należy przeprowadzić śledztwo. Musisz zdecydować czy chcesz zeby rsh mialo setuid root i jeśli tak to musisz z konta root wydać polecenia w rodzaju:

chown root /usr/bin/rsh
chmod u+s /usr/bin/rsh

wskazówka:
Bądź konserwatywny w rozdzielaniu setuid. Jeślni nie jesteś pewnien czy kiedykolwiek używaleś programu (jako nie-root) prawdopodobnie nie chcesz aby miał on setuid root. Pamiętaj, że możesz w każdej chwili dokonać zmian później jeśli będą potrzebne. Jeśli posłużysz się tymi wskazówkami w odniesieniu do rsh prawdopodobnie nie zakończy się to ustawieniem bitu setuid root.

Przykład II

„*** chgrp tty /usr/bin/write”
Jest to wyjście z skryptu otaczającego podczas instalacji util-linux. Pakiet ten chciał instalować program write z grupą tty co jest pozwoleniem na dostęp do terminali innych użytkowników. Skrypt zapobiegł zmianie grupy i ustawieniu bitu setgid. Musisz zdecydować czy tego chcesz i jeśli jednak tak wydaj jako root polecenie:

chgrp tty /usr/bin/write
chmod g+s /usr/bin/write

Przykład III

„*** install -d -m 755 /sbin”
To również z instalacji util-linux. Util-linux bez dobrego uzasadnienia próbuje utworzyć ponownie katalog /sbin. Skrypt otaczający zapobiega temu i nie musisz podejmować żadnej dodatkowej czynności.