Dla początkujących
FreeBSD – chwila dla admina, cz. 1
10
lipiec-sierpień 2009
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
11
www.lpmagazine.org
lin
ux
@
so
ftw
ar
e.
co
m
.p
l
FreeBSD – chwila
dla admina, cz. 1
Nie istnieje system operacyjny, który byłby w stanie zaspokoić i w pełni usatysfakcjonować nawet
najbardziej wymagającego użytkownika, pozostając przy tym przyjaznym dla rozpoczynających przygodę
z nim, a jednocześnie złożonym, funkcjonalnym i wydajnym dla zaawansowanych użytkowników. Jednak
to właśnie wizja takiego wyidealizowanego systemu przyświecała od początku twórcom FreeBSD. Dzięki
niej ich dzieło jest nieustannie rozwijane i wzbogacane o nowe, innowacyjne technologie.
Łukasz Ciesielski
D
ążąc do pewnego uniwersalizmu, trudno stwo-
rzyć konfigurację odpowiadającą oczekiwa-
niom tysięcy użytkowników. Właśnie dlatego
kluczową czynnością jest modyfikacja usta-
wień systemowych w taki sposób, aby osiągnąć to do czego
dąży każdy administrator – system pozbawiony wad.
Niestety najczęściej okazuje się, że jest to pojęcie jedynie
teoretyczne, jednak każde działanie mające na celu udoskona-
lenie konfiguracji systemu, przybliża moment wprowadzenia
pustych pojęć w istniejące realia. Artykuł omawia zagadnienia
nietypowe a zarazem niezwykle istotne, choć często pomija-
ne w rozmaitych opracowaniach dotyczących FreeBSD. Przy-
kładem problemów, o których mowa są chociażby konfigura-
cja jądra, zarządzanie kontami i grupami użytkowników, a tak-
że dodawanie i współdzielenie drukarek w sieci lokalnej. Nie-
zwykle trudnym zadaniem okazuje się wyselekcjonowanie in-
formacji, które mogłyby okazać się najistotniejsze dla każdego
użytkownika. Są jednak zadania cechujące się powtarzalnością
i koniecznością ich wykonania. Poniższe zagadnienia są pew-
nego rodzaju perełkami, ostatnimi szlifami systemu FreeBSD.
Oczywiście nie są one podstawą działania tego systemu, jednak
to właśnie dzięki takim zabiegom może stać się doskonalszym.
Serce jak dzwon
Sercem każdego systemu operacyjnego z rodziny Linuksa lub
BSD jest oczywiście jądro systemu. Zastanówmy się zatem
czym jest wspomniany kernel (ang. jądro) i do czego służy?
Uogólniając można określić go jako filar podpierający cały sys-
tem, podstawę, na której ten bazuje. Do zadań jądra należy za-
równo zarządzanie pamięcią, dostęp do dysków, jak też kontro-
lowanie bezpieczeństwa systemu, i zarządzanie siecią (choć nie
całkowite). Ponadto kernel odpowiada za wykrycie i sprawdza-
nie poprawności dostępnych w danym komputerze urządzeń,
jak chociażby procesor, pamięć, dyski twarde, karta graficz-
na itd. Współcześnie twórcy FreeBSD dążą do dynamiczne-
go konfigurowania poszczególnych elementów systemu. Nie
oznacza to jednak, że samodzielna kompilacja lub rekompila-
cja odeszły do lamusa. Wręcz przeciwnie! Indywidualna praca
nad dostosowaniem kernela owocuje nie tylko zwiększeniem
wydajności systemu, ale pozwala także na poznanie kolejnych
etapów funkcjonowania systemu operacyjnego. Najczęściej w
tym momencie nasuwa się podstawowe pytanie: Dlaczego war-
to poświęcać czas na samodzielne konfigurowanie gotowego do
użycia kernela? Wątpliwość ta nie jest całkowicie nieuzasad-
niona. Otóż FreeBSD posiada jądro monolityczne, jednak ak-
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
10
lipiec-sierpień 2009
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
11
www.lpmagazine.org
tualnie uwidaczniają się już pewne cechy jądra
nazywanego potocznie modularnym. Oznacza
to, że w trakcie działania potrafi ono tak zmo-
dyfikować ustawienia, aby pozostały jedynie te,
które faktycznie są niezbędne. Zmiana konfigu-
racji jądra modularnego byłaby nieuzasadniona,
gdyż jego atutem jest właśnie automatyczna reor-
ganizacja modułów. Ponieważ jednak w dalszym
ciągu korzysta się z kernela monolitycznego, je-
go rekompilacja stała się jedną z najczęściej wy-
konywanych czynności poinstalacyjnych. Jed-
nym z kluczowych powodów jest zwiększenie
wydajności i skrócenie czasu uruchamiania się
systemu. Polega to na zadeklarowaniu posiada-
nego sprzętu, dzięki czemu jądro nie będzie tra-
cić czasu na sprawdzanie urządzeń, których dany
komputer nie posiada. Choć pozornie wydaje się
to mało istotne, w rzeczywistości może znacznie
skrócić czas potrzebny na start systemu.
Drugim powodem, dla którego warto sa-
modzielnie skompilować jądro jest możliwość
wzbogacenia go o obsługę dodatkowego sprzę-
tu, np. karty dźwiękowe, graficzne itp. Domyśl-
ny kernel – GENERIC – nie jest w stanie obsłu-
żyć każdego sprzętu ze względu na jego rosnącą
ilość. Ponadto jądro jest w pewnym sensie ogra-
niczone barierami jakimi jest chociażby ilość pa-
mięci RAM. Dzieje się tak dlatego, że musi ono
być nieustannie obecne w pamięci. Jest to ko-
lejny powód tworzenia własnej wersji kerne-
la – możliwość zaoszczędzenia zajmowanej pa-
mięci. Bardzo często konfiguracja pozbywająca
się zbędnych elementów, zmniejsza automatycz-
nie rozmiar jądra. Oczywiście wyjątkiem jest sy-
tuacja, w której zostanie dodana obsługa nowe-
go sprzętu. W takim wypadku rozmiar nowego
kernela może okazać się większy niż standar-
dowego. Zanim jednak przystąpimy do zmiany
domyślnej konfiguracji, musimy wyjaśnić kilka
ważnych zagadnień. Kompilacja jądra będzie od-
bywać się w katalogu /usr/src/sys (dostęp do nie-
go istnieje także poprzez katalog /sys). Znajdu-
je się tam rozmaite podkatalogi, jednak najważ-
niejszym jest /arch/conf. Znajdują się w nim pli-
ki związane z poszczególnymi architekturami.
Oczywiście każdy wybiera taką dla jakiej mody-
fikuje jądro (najczęściej jest to i386). Warto za-
uważyć, że katalog skupiający pliki związane z
daną architekturą dotyczy wyłącznie tej architek-
tury. Może okazać się, że nie posiadamy katalo-
gu /usr/src/sys. Jest to spowodowane tym, że w
systemie nie zostały zainstalowane źródła kerne-
la. Rozwiązanie jest proste – doinstalować. Użyt-
kownik ma tu dwie możliwości. Najprostsza to
posłużenie się konfiguratorem sysinstall (musi
zostać uruchomione jako root). W sekcji Con-
figure należy wybrać Distributions, a następ-
nie src i sys. Druga metoda polega na zainsta-
lowaniu źródeł jądra bez użycia sysinstall. Wy-
starczy utworzyć odpowiedni katalog (mkdir -p
/usr/src/sys), powiązać go z katalogiem /sys (ln -s
/usr/src/sys /sys) i wydać polecenie
cat /cdrom/
src/ssys.[a-d]* | tar -xzvf -
. Teraz mo-
żemy już rozpocząć pracę nad własną wersją ją-
dra systemowego. Na początek skopiujmy do-
myślny kernel, aby nie wykonywać operacji bez-
pośrednio na nim. Wystarczy przejść do katalogu
/usr/src/sys/i386/conf i za pomocą polecenia
cp
GENERIC NOWY_KERNEL
wykonać kopię orygina-
łu. Ciekawostką jest fakt, że nazwę jądra przyję-
ło się pisać dużymi literami i nadawać mu nazwę
tożsamą z nazwą komputera. Ułatwia to rozpo-
znawanie w przypadku większej ilości kompute-
rów wyposażonych w różne sprzęty.
Kolejnym krokiem jest odpowiednie
umiejscowienie pliku konfiguracyjnego. Jest to
niezwykle istotna kwestia, gdyż przechowywa-
nie go w katalogu /usr/src grozi utratą wprowa-
dzonych zmian, np. kiedy katalog ten zostanie
opróżniony po nieudanej konfiguracji. Najbez-
pieczniej jest plik ten umiejscowić w katalogu
domowym, a następnie utworzyć do niego sym-
boliczne dowiązanie (np.
ln -s /home/lucas/
NOWY_KERNEL
). Nie pozostaje nic innego jak
przystąpić do zmiany zawartości pliku konfi-
guracyjnego. Wszystkie operacje będą wyma-
gać uprawnień administratora. Po zakończe-
niu pracy z plikiem, jądro zostanie ponownie
skompilowane i będzie gotowe do użycia. Do
dzieła! Jak łatwo zauważyć struktura pliku nie
jest skomplikowana. Na każdą linię przypada
słowo kluczowe oraz przypisane do niego argu-
menty (najczęściej jeden). Ponadto użytkownik
może dodawać własne komentarze, co w przy-
padku zaawansowanych modyfikacji lub pracy
zespołowej nie pozostaje bez znaczenia. Aby
wskazać linię mającą mieć charakter komenta-
rza wystarczy na początku użyć znaku
#
. War-
to zauważyć, że pewne opcje są niezależne od
posiadanej architektury sprzętu. Wyczerpujący
opis tych opcji można znaleźć w pliku /usr/src/
sys/conf/NOTES. Po edytowaniu pliku GENE-
RIC, pierwszy parametr, który zobaczymy bę-
dzie określał architekturę naszego komputera
(np. machine i386). Oczywiście jego wartość
różne wartości, jak chociażby alpha, amd64,
i386, ia64, sparc64 czy powerpc. W dalszej
części określamy rodzaj posiadanego proceso-
ra. Jest to istotna kwestia, ponieważ pozwala
zwiększyć wydajność systemu. Jeśli nie znamy
dokładnie typu procesora można to sprawdzić
edytując plik /var/run/dmesg.boot. Ciekawost-
ką jest fakt, że dopuszcza się zdefiniowanie kil-
ku typów (jeden pod drugim), jednak zaleca się
wybór właściwego z nich, np. cpu I686_CPU.
Ponieważ tworzymy własną wersję jądra, war-
to pokusić się o zmianę nazwy wyświetlanej
podczas startu systemu. W artykule nowy ker-
nel nazywa się NOWY_KERNEL, ale w pliku
konfiguracyjnym nadal widnieje domyślna na-
zwa, czyli GENERIC (ident GENERIC). Jeśli
tego nie zmienimy to pomimo że jądro nazy-
wa się NOWY_KERNEL, przy uruchamianiu
systemu będzie wyświetlana nazwa GENERIC.
Pozornie nie ma to znaczenia, jednak w sytuacji
kiedy mamy zamiar korzystać z dwóch kerneli,
warto wiedzieć, który z nich jest uruchamiany.
Dalej znajduje się kilka parametrów, które po-
winny znaleźć się w każdym jądrze. Można za-
liczyć do nich chociażby systemowego zarząd-
cę procesów (options SCHED_4BSD), obsługę
sieci (options INET) oraz – jeżeli uruchamia-
my system z dysku twardego – podstawowy,
dyskowy system plików (options FFS). Obsłu-
ga sieci jest niezwykle istotna, ponieważ nawet
jeśli nie korzystamy z sieci niektóre programy
wymagają dostępu do tzw. pętli zwrotnej loop-
back, czyli połączeń wewnątrz komputera. Ko-
lejną opcją jest INET6. Zasada jest prosta: jeże-
li używasz Ipv6, to zostawiasz wpis, natomiast
jeżeli nie – usuwasz.
Odpowiednia konfiguracja może także
zwiększyć wydajność w odniesieniu do ope-
racji dyskowych. Aby skrócić czas dostępu
do dysku podczas zapisu danych, warto usta-
wić opcję Soft Updates (options SOFTUPDA-
TES). Wpis ten nie włącza automatycznie tej
funkcji, lecz umożliwia to użytkownikowi po
uruchomieniu systemu. Można to w prosty spo-
sób sprawdzić za pomocą polecenia
mount
. Je-
żeli, któryś z zamontowanych dysków nie bę-
dzie opisany za pomocą parametru
soft-upda-
tes
oznacza to, że musimy zrobić to korzysta-
jąc z polecenia np. newfs (dla starszych syste-
mów plików jest to
tunefs
). Jeżeli posiadamy
odpowiednią ilość pamięci operacyjnej, istnieje
możliwość usprawnienia obsługi dużych kata-
logów. Służy do tego wpis
options UFS_DIR-
HASH
. Jest to specjalny kod niezwykle przydat-
Listing 1.
Przykładowa zawartość pliku lo-
gin.conf.
:
charset
=
iso
-
8859
-
2
:\
:
lang
=
pl_PL
.
ISO8859
-
2
:\
:
lc_ctype
=
pl_PL
.
ISO8859
-
2
:\
Listing 2.
Konfiguracja pakietu SAMBA (plik
smb.conf, sekcja [printers]).
comment
=
Drukarka
path
= /
var
/
spool
/
samba
create
mask
=
0700
public
=
yes
guest
ok
=
yes
printable
=
yes
browseable
=
yes
writeable
=
yes
12
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
lipiec-sierpień 2009
13
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
www.lpmagazine.org
ny i wydajny w przypadku np. dużych serwe-
rów. W przypadku systemów poddanych du-
żym obciążeniom lub dysponujących małą pa-
mięcią, warto opcję tę wyłączyć. Pewne kontro-
wersje budzi wpis
options UFS_ACL
, czyli ob-
sługa list kontroli dostępu do plików. Standar-
dowo jest ona włączona i chociaż istnieje moż-
liwość wyłączenia jej, skutki jakie może za so-
bą pociągać takie działanie pozostają nieprze-
widziane. Zdecydowanie zaleca się pozosta-
wienie tego wpisu, zwłaszcza jeżeli listy ACL
były wcześniej wykorzystywane przez dany
system. Choć większość wspomnianych wyżej
parametrów jest raczej niezbędna, istnieją także
takie, które bez obaw można usunąć. Można do
nich zaliczyć chociażby
options NFSCLIENT
,
options NFSSERVER
i
options NFS_ROOT
. Je-
śli nie zamierzamy montować partycji z serwe-
ra za pomocą TCP/IP opcje te stają się zbytecz-
ne. Podobnie jest w przypadku systemu plików
MS-DOS. Bez obaw możemy zablokować tę
linię, ponieważ zazwyczaj nie korzystamy z
partycji sformatowanych w tym systemie pli-
ków (wyjątkiem są dyskietki i pendrive). Oso-
by, które nie posiadają lub nie korzystają z na-
pędów CDROM mogą również zrezygnować z
parametru options CD9660. Nie oznacza to jed-
nak, że nie będzie możliwości np. odtwarzania
płyt CD-Audio, ponieważ nie wymagają one
tego systemu plików.
W dalszej części pliku napotkamy na
dwa bardzo ważne wpisy:
options PROCFS
i
options COMPAT_43
. Usunięcie ich prawie za-
wsze powoduje awarię systemu operacyjnego.
Dlaczego są tak istotne? Pierwszy z wymienio-
nych odpowiedzialny jest między innymi za
przechowywanie informacji o zachodzących
procesach (do działania niezbędny jest
PSEU-
DOFS
). Drugi natomiast zapewnia kompatybil-
ność z systemem 4.3BSD. Część oprogramo-
wania w dalszym ciągu jest od tego pakietu za-
leżna. Równie istotny jest parametr
GEOM_GPT
.
Odpowiada on za tworzenie dużej ilości party-
cji na pojedynczym dysku twardym. W dalszej
części pliku konfiguracyjnego napotkamy rów-
nież na opcję określającą tzw. opóźnienie przed
rozpoczęciem wykrywania urządzeń SCSI.
Warto skrócić domyślny czas, dzięki czemu
zyskamy kilka cennych sekund podczas uru-
chamiania systemu (np.
options SCSI_DE-
LAY=4000
). Jeżeli korzystamy z serwera X-ów,
konieczne będzie także dodanie takich opcji
jak
SYSVSHM
,
SYSVMSG
i
SYSVSEM
. Oczywi-
ście najistotniejszym z nich jest
SYSVSHM
, po-
nieważ odpowiada za współdzielenie pamię-
ci. Dzięki dodaniu tego parametru część pro-
gramów będzie pracować wydajniej. Nie moż-
na też zapomnieć o dodaniu do naszego pli-
ku
options _KPOSIXPRIORITY_SCHEDULING
,
ponieważ część oprogramowania wymaga te-
go mechanizmu.
W przypadku maszyn wieloprocesorowych
koniecznie należy dodać opcję
options SMP
oraz wymaganą w takim wypadku
options
APIC_IO
. Podczas budowania jądra przezna-
czonego do pracy z wieloma procesorami, na-
leży pamiętać o usunięciu wpisów dotyczących
typu procesora jak np.
I386_CPU, I486_CPU
itd. Jeśli korzystamy z komputera o jednym
procesorze, wspomniane wpisy są kompletnie
zbędne i można je skasować.
Ostatnim etapem jest konfiguracja urządzeń
(sekcja
Devices
). Na początku należy wska-
zać typ płyty głównej. Do wyboru mamy
devi-
ce pci
oraz
device eisa
. W przypadku now-
szych komputerów zazwyczaj wybór padnie na
PCI. Następny etap dotyczy urządzeń ATA. Za-
leca się pozostawienie wpisu
device ata
, po-
nieważ obsługuje on wszystkie urządzenia za-
równo ATA jak i ATAPI. Dzięki temu nowy ker-
nel nie będzie miał problemów z wykryciem
większości urządzeń we współczesnych kompu-
terach. W zależności z
device ata
występują
również takie parametry dodatkowe jak:
device
atadisk
(dla dysków ATA),
device ataraid
(dla dysków RAID) i
device atapicd
(dla na-
pędów CDROM). Dodatkowo gdybyśmy chcieli
aby liczba dyskowa była przydzielana statycznie
należy dopisać
options ATA_STATIC_ID
. Jeże-
li tego nie zrobimy zostanie ona przydzielona
w sposób dynamiczny. Ustawienie sekcji SCSI
przebiega w sposób analogiczny i sprowadza się
do pozostawienia tych urządzeń, które posiada-
my. Z dodatkowych opcji warto wspomnieć cho-
ciażby o konfiguracji sterowników karty video,
np.
device vga
, czy obrazu powitalnego (tzw.
splash). Niektóre wygaszacze ekranu również
wymagają wpisu
device splash
. Jeżeli chce-
my skonfigurować mysz podłączoną do portu
PS/2 wystarczy dodać
device psm
, natomiast za
klawiaturę odpowiadają
device atkbdc
,
devi-
ce atkbd
oraz
device kbdmux
(obsługa multi-
pleksji). Większość używanych kart graficznych
korzysta z portu AGP, lecz jego obsługa byłaby
niemożliwa bez zaznaczenia tego w jądrze sys-
temu. Należy wpisać linię
device agp
. Dzię-
ki temu zostanie obsłużony zarówno AGP jak i
AGP GART. Jeśli nowy kernel ma zostać uży-
ty na laptopie można uruchomić zaawansowa-
ne zarządzanie energią, czyli tzw. APM (
device
apm
). Wspominając o laptopach nie wolno zapo-
mnieć o obsłudze kart PCMCIA. Wystarczą trzy
parametry, aby zostało włączone pełne wsparcie
dla PCMCIA:
device cbb
,
device pccard
i
device cardbus
. Wśród dostępnych opcji moż-
na także znaleźć obsługę portów COM (
device
sio
), równoległych (
device ppbus
), drukarek
(
device lpt
) oraz wiele innych. Często moż-
na spotkać się z problemem związanym z sie-
ciami bezprzewodowymi. Warto dodać niezbęd-
ne moduły. Do wyboru mamy kolejno:
device
wlan
(802.11),
device an
(Aironet 4500/4800),
device awi
(BayStack),
device ral
(Ralink
Technology) i
device wi
(WaveLAN).
Na koniec pozostały wpisy dotyczące ob-
sługi USB, skanera itp. Najistotniejsze modu-
ły to
uhci
,
ohci
,
ehci
(USB 2.0),
usb
,
ukbd
(klawiatura),
ulpt
(drukarka),
ums
(mysz) oraz
uscanner
(skaner). Każdy z wymienionych pa-
rametrów musi być poprzedzony słowem
de-
vice
. Trudno byłoby zademonstrować kom-
pletne możliwości kernela, ponieważ twórcy
zadbali o ich mnogość. Ponadto każda kolej-
na wersja jądra dostarcza nowych możliwo-
ści, przez co staje się bardziej funkcjonalna. Ja-
ko bazę dla własnej wersji serca systemu war-
to wykorzystać najnowsze z dostępnych jądro.
Możliwości jakie oferuje i dostępne parametry
opisane są we wspomnianym już pliku /usr/src/
sys/conf/NOTES.
Kiedy odpowiednio zmodyfikujemy plik
konfiguracyjny, jądro należy ponownie skompi-
lować. Aktualnie istnieją dwie metody, którymi
można się posłużyć. Sposób tradycyjny polega
na wygenerowaniu kodu jądra za pomocą pole-
cenia
/usr/sbin/config NOWY_KERNEL
. Kolej-
nym krokiem jest przejście do katalogu, w któ-
rym budujemy nowy kernel i wydajemy kolej-
no polecenia
make depend
i
make
. Po zakończo-
nej kompilacji za pomocą
make install
doko-
nujemy instalacji nowego jądra. Jest to metoda
sprawdzona i szybka. Druga metoda polega na
przejściu do katalogu /usr/src i wydaniu polece-
nia
make buildkernel KERNCONF=NOWY_KER-
NEL
. Dzięki temu kod źródłowy naszego nowe-
go jądra zostanie skompilowany i będziemy mo-
gli go zainstalować w systemie (
make instal-
lkernel KERNCONF=NOWY_KERNEL
). Wadą tej
metody jest fakt, że wymaga ona do kompila-
cji wszystkich plików źródłowych (nie wystar-
czą jedynie źródła jądra). Nowy kernel zostanie
przeniesiony do katalogu /boot/kernel, natomiast
stare znajdzie się w katalogu /boot/kernel.old/
kernel. Po ponownym uruchomieniu systemu
okaże się, czy wszystko działa poprawnie. Jeże-
li pojawią się problemy z nowym jądrem nie na-
leży się martwić, ponieważ bez problemu moż-
na przywrócić poprzedni kernel. Wystarczy z
menu startowego wybrać pozycję numer sześć
– Escape to a loader prompt – wpisać
unload
kernel
, a następnie
boot /boot/kernel.old/
kernel
(lub inną ścieżkę do pliku jądra). Wła-
śnie dlatego tak ważne jest zrobienie kopii zapa-
sowej kernela. Ale skąd mamy wiedzieć, w któ-
rym miejscu popełniliśmy błąd? Najprościej jest
tuż po przywróceniu sprawności systemu zaj-
rzeć do pliku /var/log/messages i sprawdzić wy-
12
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
lipiec-sierpień 2009
13
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
www.lpmagazine.org
nik
dmesg
. Znajdziemy tam informacje o proble-
mach, które miały miejsce podczas uruchamia-
nia systemu, w tym także o jądrze.
Udało nam się przebrnąć przez proces re-
kompilacji systemowego kernela. Nie jest to
zadanie proste i wymaga pewnego doświadcze-
nia, opanowania i wiedzy. Wszelkie informa-
cje dotyczące modułów można znaleźć w kata-
logach i plikach systemowych, takich jak NO-
TES. FreeBSD jest doskonale udokumentowa-
nym systemem operacyjnym. Od użytkownika
wymaga jedynie umiejętności wyszukiwania
potrzebnych informacji. Doskonałe receptury
można także znaleźć w oficjalnym podręczniku
tego systemu. Niestety omówienie wszystkich
dostępnych opcji oferowanych przez systemo-
we jądro zdecydowanie wykracza poza ograni-
czone objętością ramy artykułu. Warto jednak
zapoznać się z tym rozległym zagadnieniem ja-
kim jest modyfikowanie kernel, ponieważ pro-
ces ten nie tylko uczy podstaw działania sys-
temu, ale umożliwia doskonałe dostosowanie
jądra do własnych potrzeb, a co za tym idzie
zwiększenie jego wydajności.
Pajęczyna plików
Każdy kto choć raz próbował skonfigurować
system według własnych upodobań wie, że nie
jest to zadanie łatwe. Ilość plików konfiguracyj-
nych jest przerażająco duża, jednak można okre-
ślić dla nich wspólne źródło – niemalże wszyst-
kie znajdują się w katalogu /etc lub /usr/local.
Poznanie tego katalogu powinno być jedną z
pierwszych czynności jaką wykona początkują-
cy administrator. Ilość zawartych tam informa-
cji może przyprawić o ból głowy, jednak znajo-
mość każdego istotnego pliku konfiguracyjnego
jest koniecznością. Plikiem, który zazwyczaj jest
edytowany jako pierwszy jest /etc/fstab. Znajdu-
ją się w nim wskazówki dla systemu o dostęp-
nych partycjach i urządzeniach (np. pendrive,
CDROM itp.) oraz sposobach ich montowania
i systemach plików. Domyślne ustawienia ogra-
niczają się do określenia napędów optycznych i
partycji, z których korzysta system. A co z karta-
mi pamięci i pamięciami przenośnymi? Oczywi-
ście trzeba samemu wskazać jak system ma re-
agować, kiedy wykryje tego typu sprzęt. Może-
my go zamontować w dwojaki sposób. Pierw-
szy polega na wpisaniu w konsoli odpowiednie-
go polecenia, każdorazowo jak będziemy chcie-
li przeprowadzić proces montowania. Istnie-
je pewna różnica pomiędzy Linuksem a Fre-
eBSD. Otóż w pierwszym przypadku partycje
FAT określamy jako
vfat
, natomiast we Fre-
eBSD jako
msdosfs
. Aby zamontować np. pen-
drive sformatowany standardowo jako FAT16
lub FAT32 wpisujemy polecenie
mount -t
msdosfs /dev/da0s1 /mnt/da0s1
(zakładając
oczywiście, że nasze urządzenie to da0s1 i stwo-
rzyliśmy wcześniej katalog /mnt/da0s1). Można
jednak uniknąć konieczności wpisywania tego
polecenia za każdym razem jak będziemy chcie-
li skorzystać z naszej pamięci flash. Wystarczy
edytować plik fstab i dopisać tam linię odpowia-
dającą za automatyczne montowanie. Powinna
ona wyglądać podobnie do montowanej partycji
dysku twardego. Najpierw określamy ścieżkę do
urządzenia, a następnie punkt montowania. Ja-
ko system plików podajemy auto, żeby system
sam zadecydował. W uprawnienia można wpi-
sać users (użytkownicy) i nadać im prawa od-
czytu i zapisu rw (prawa tylko do odczytu ozna-
czone są jako ro). Wpis kończymy dwoma zera-
mi. Całość powinna wyglądać analogicznie do
linii
/dev/da0s1 /mnt/da0s1 auto users,rw
0 0
. Dokładnie w ten sam sposób zamontujemy
każdy dysk, a właściwie dostępne na nim par-
tycje w tym również partycję
swap
. Do wyboru
mamy wszystkie dostępne dla systemu rodzaje
partycji jak np. ext2 , ext3, ReiserFS, XFS, vfat,
iso9660, nfs i swap. W przypadku tej ostatniej
wpis będzie wyglądał nieco inaczej. Prawidłowy
wpis powinien mieć postać
/dev/urządzenie
none swap sw 0 0
. Nie wskazujemy tu punktu
montowania uzupełniając to miejsce flagą
none
.
Wszystkie urządzenia wskazane w pliku fstab
(z wyjątkiem tych, które zostały opatrzone fla-
gą
noauto
) są automatycznie montowane pod-
czas startu systemu.
Ponieważ zawartość katalogu /etc zdaje się
być nieograniczona, twórcy pogrupowali jego
zawartość w taki sposób, aby każdy mógł odna-
leźć plik, którego potrzebuje. Oczywiście trudno
byłoby znać na pamięć zawartość każdego waż-
nego pliku, jednak warto pamiętać jego umiej-
scowienie. Szczegóły dotyczące zawartości za-
wsze można sprawdzić w obszernej dokumen-
tacji systemu, jednak jeżeli nie będziemy zna-
li położenia takiego pliku pojawi się problem.
Pierwszym katalogiem jest /etc/defaults. Znaj-
dują się w nim domyślne pliki konfiguracyjne.
Oznacza to, że jeżeli użytkownik nie wprowadzi
własnych ustawień, to najprawdopodobniej sys-
tem skorzysta z konfiguracji odnalezionej wła-
śnie w tym katalogu. Mniej istotny jest katalog
/etc/mail, ponieważ zawiera on dodatkowe pliki
konfiguracyjne dla serwerów poczty, np. progra-
mu sendmail. W katalogu /etc/ppp jak nietrud-
no się domyśleć znajdują się ustawienia regulu-
jące pracę oprogramowania ppp zarówno użyt-
kownika jak i jądra. Serwer DNS (Domain Na-
me System) – named – przechowuje swoje dane
w /etc/namedb/named.conf. Nie oznacza to jed-
nak, że znajdują się tam wszystkie dane dotyczą-
ce tego serwera. Często jest tak – w tym przy-
padku również – że informacje zawarte w pli-
ku named.conf wskazują na inne miejsca, w któ-
rych program powinien szukać potrzebnych in-
formacji np. /var/db. Jeśli ktoś korzystał już
z usług daemona cron, doskonale zna katalog
/etc/periodic. To właśnie tam znajdują się skryp-
ty uruchamiane w określonych odstępach cza-
su – raz dziennie, tygodniowo lub miesięcznie.
Mówiąc o cronie warto wspomnieć także o pli-
ku /etc/crontab.
Niezwykle istotnym plikiem konfiguracyj-
nym jest /etc/resolv.conf, który określa metody
tłumaczenia przez system FreeBSD domen DNS.
Jakie wpisy znajdują się wewnątrz tego tajemni-
czego pliku? Najczęściej są to adresy IP serwerów
nazw (nameserver) określające które z serwerów
mają być odbytywane i w jakiej kolejności. Mak-
symalnie mogą być podane 3 adresy, a ich chro-
nologia świadczy zarazem o kolejności w jakiej
FreeBSD będzie je pobierał. Czasem może poja-
wić się również wpis
search
lub
domain
. Pierw-
sza opcja najczęściej zostaje określona przez do-
menę lokalną i polega na szukaniu w nazwach
np. search nazwa.pl. Druga natomiast to nic in-
nego jak lokalna nazwa domeny. Jeśli korzysta-
my z DHCP (Dynamic Host Configuration Pro-
tocol) to zazwyczaj plik ten zostaje uzupełniony
automatycznie i znajdują się tam dwa adresy ser-
werów DNS. Nic jednak nie stoi na przeszkodzie
aby edytować plik samodzielnie i wpisać własne
adresy (jeżeli DHCP zawiedzie i posiadamy od-
powiednie dane). W połączeniu z DNS (a także
NIS) działa plik /etc/hosts. W rzeczywistości jest
on pozostałością po Internecie sprzed kilku (może
nawet kilkudziesięciu) lat. Jego głównym zada-
niem jest dostarczenie nazwy dla danego adresu
IP, np.
127.0.1.1host-89-228-xxx-xxx.na-
zwa.mm.pl host-89-228-xxx-xxx
. Nietrudno
zauważyć, że nazwa taka składa się z adresu, ofi-
cjalnej nazwy i aliasów. Właściwie pliku tego nie
trzeba zmieniać, jednak z całą pewnością dobrze
wiedzieć do czego służy.
Odkąd w Polsce pojawił się FreeBSD użyt-
kownicy zaczęli odczuwać pewien problem, a
mianowicie brak polskich znaków w konsoli.
Oczywiście szybko można to zmienić, jednak
aby tak się stało konieczna jest znajomość od-
powiednich wpisów. Tak naprawdę nie ma zna-
czenia, który zostanie edytowany jako pierw-
szy, ale ważne jest aby nie zapomnieć o którymś
wpisie, ponieważ cała polonizacja może okazać
się klęską. Najczęściej zaczynamy od pliku /etc/
rc.conf, w którym najpierw ustawiamy polską
czcionkę w trzech rozmiarach:
font8x14="i-
so02-8x14"
,
font8x16="iso02-8x16"
,
fon-
t8x16="iso02-8x8"
. Następnie należy określić
mapę klawiatury, aby system potrafił odpowied-
nio zareagować kiedy zostanie naciśnięty prawy
klawisz ALT. Wystarczy poniżej wpisać para-
metr
keymap="pl_PL.ISO8859-2"
. Teraz moż-
na już zapisać zmiany i przejść do kolejnego pli-
14
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
lipiec-sierpień 2009
15
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
www.lpmagazine.org
ku, jakim jest /etc/login.conf. Przed ostatnią li-
nią wpisujemy ustawienia tak jak pokazuje Li-
sting 1. Teraz wystarczy jedynie zaktualizować
bazę danych dotyczących logowania cap_mkdb
/etc/login.conf. Na koniec należy zmienić wpi-
sy w /etc/ttys, zmieniając w każdej linii
cons25
na
cons25l2
(w konsolach od jeden do siedem).
W ten sposób zostanie ustawione polskie kodo-
wanie, a dokładniej latin-2. Można poprzestać
na takiej konfiguracji, jednak czasami zachodzi
potrzeba ustawienia dodatkowej zmiennej śro-
dowiskowej. W tym celu w pliku /etc/csh nale-
ży wpisać
setenv LC_ALL pl_PL.ISO8859-2
czyli informację, aby system używał języka pol-
skiego. Wiele programów wymaga wykonania
przedstawionych czynności przed instalacja, po-
nieważ w przeciwnym razie mogą pojawić się
problemy z wykryciem ustawień mających na
celu polonizację.
Powyższe przykłady – pendrive, poloniza-
cja, DNS – doskonale ukazują, że każdy mniej
lub bardziej zaawansowany użytkownik Fre-
eBSD musi zaznajomić się z rozmieszczeniem
poszczególnych plików konfiguracyjnych. Moż-
na też określić to jako obowiązek przyszłych ad-
ministratorów. Oczywiście plików takich, któ-
re potrafią przesądzić o być lub nie być naszego
systemu jest znacznie więcej, a przykłady poda-
ne powyżej mają na celu zmobilizować (nie tylko
administratorów!) do rozpoczęcia własnych po-
szukiwań, odkryć i wprowadzania nowatorskich
rozwiązań. Choć pozornie wydaje się to oczywi-
ste, wielu użytkowników nie tylko FreeBSD za-
pomina o odpowiednich ustawieniach (niekiedy
z braku czasu), a w rzeczywistości jest to sprawa
priorytetowa. Pewne pliki zawierają informacje,
które mogą zagrażać bezpieczeństwu systemu.
Przykładem są takie pliki jak chociażby /etc/in-
etd.conf i /etc/passwd. Pierwszy wskazuje uru-
chomione w usługi i otwarte porty, natomiast z
drugiego dowiemy się jacy użytkownicy są zalo-
gowani w systemie oraz kilka innych ciekawych
(zwłaszcza dla hakera) informacji.
Wszystkie informacje i dane, które powsta-
ją na skutek pracy rozmaitych konfiguratorów
systemowych zapisywane są w odpowiednich
plikach konfiguracyjnych. W codziennej pracy
zazwyczaj korzystamy z tego oprogramowania
aby zaoszczędzić odrobinę czasu, jednak warto
wiedzieć gdzie przechowywane są poszczegól-
ne informacje, ponieważ w przypadku admini-
strowania systemem pozwoli nam to skutecz-
niej zabezpieczać jego najbardziej narażone na
atak z zewnątrz partie.
Społeczność komputera
Choć wydaje się to oczywistością, poruszając te-
mat administrowania nie można pominąć zarzą-
dzania kontami użytkowników oraz poszczegól-
nymi ich grupami. FreeBSD doskonale spraw-
dza się w roli systemu współdzielonego pomię-
dzy wieloma użytkownikami. Pomimo że fi-
zycznie przy komputerze może pracować w da-
nej chwili jednak osoba, dodatkowo wielu użyt-
kowników może korzystać z tego samego kom-
putera poprzez sieć. Konieczne jest odpowied-
nie zarządzanie kontem i uprawnieniami każde-
go użytkownika, aby nie doszło do zamiesza-
nia lub – co gorsze – chaosu. Pewnie zastana-
wiasz się jak to jest możliwe? Otóż konta po-
szczególnych użytkowników umożliwiają im
dostęp do komputera. Dzięki temu procesy sys-
temowe lub rozmaitych aplikacji, które są przez
nich uruchamiane mogą zagrozić stabilności ca-
łego systemu. W przypadku FreeBSD każde kon-
to powiązane jest z pewnymi danymi pozwalają-
cymi na identyfikację użytkownika. Najważniej-
sze to oczywiście login i hasło. Dobre hasło po-
winno składać się przynajmniej z ośmiu znaków,
zawierać cyfry oraz znaki takie jak:
#
,
$
,
!
,
@
itd.
Najskuteczniejsze są hasła składające się z loso-
wo wybieranych znaków, natomiast najsłabsze to
te, na które składa się jakieś słowo (można je ła-
two odgadnąć za pomocą np. programu John the
Ripper i odpowiedniego słownika). Identyfikacja
użytkownika w systemie odbywa się także dzię-
ki UIN (User Identification Number, identyfi-
kator użytkownika), który jest numerem z prze-
działu od 0 do 655352 i to właśnie on jest jed-
noznacznym potwierdzeniem tożsamości. Kiedy
FreeBSD korzysta z UIN? Zawsze gdy napotka
na polecenie przyjmujące nazwę użytkownika ja-
ko argument. Zostaje ona automatycznie zamie-
niona na numer UIN, zanim zostanie wykonane
polecenie. Podobnie wygląda sytuacja z grupami
użytkowników. Odpowiada im numer GID (Gro-
up IDentifier) wybrany z tego samego zakresu co
UIN. To właśnie dzięki wykorzystaniu GID uda-
ło się znacznie zmniejszyć objętość wielu plików
konfiguracyjnych. Najistotniejszą informacją jest
jednak fakt, że każdy użytkownik może przyna-
leżeć jednocześnie do kilku grup. Pewnym roz-
szerzeniem funkcjonalności grup są tzw. klasy lo-
gowania. Są one określane w pliku /etc/login.conf
i służą do narzucania na określonych użytkowni-
ków pewnych ograniczeń, np. wykorzystania
czasu procesora czy pamięci (o tym w dalszej
części tekstu). Można także spotkać kilka mniej
istotnych cech kont, jak chociażby czas zmia-
ny hasła, czy czas wygaśnięcia ważności dane-
go konta. Domyślnie opcje te są wyłączone, ale
jeżeli zachodzi taka konieczność nic nie stoi na
przeszkodzie, aby z nich skorzystać. Dodatkowo
można określić powłokę użytkownika. Pozwala
to na dostosowanie konta do konkretnych pre-
ferencji jego właściciela. Właściwie konta moż-
na podzielić na trzy kategorie: superużytkowni-
ka (root), systemowe oraz konta poszczególnych
użytkowników. Pierwsze z wymienionych służą
do zarządzania systemem, natomiast konta syste-
mowe odpowiadają za uruchamiane usługi. Zda-
rza się, że niedoświadczeni administratorzy wy-
korzystują w codziennej pracy konto roota, po-
nieważ uważają to za wygodne. Konto superu-
żytkownika najczęściej jest tak skonfigurowane,
aby ułatwić zarządzanie systemem. Zdecydowa-
nie odradza się korzystanie z tego konta jako do-
myślnego. Ponieważ związane są z nim niemal-
że nieograniczone uprawnienia, można w bardzo
krótkim czasie doprowadzić do zniszczenia sta-
bilności systemu (nawet nieodwracalnie). Przeci-
wieństwem jest konto użytkownika nie posiada-
jące uprawnień roota. Z jego poziomu zachwia-
nie stabilności systemu jest prawie niemożli-
we (wykluczając np. przeciążenie). Zakładamy
oczywiście, że osoba korzystająca z tego konta
nie zna hasła superużytkownika. W przeciwnym
wypadku może zrobić prawie wszystko to, co ad-
ministrator systemu. Drugim typem kont, są kon-
ta systemowe, np. deamon, www, news, bind, a
także nobody. Służą one do uruchamiania takich
usług jak serwer WWW, poczta czy DNS.
FreeBSD oferuje mnóstwo narzędzi stwo-
rzonych z myślą o zarządzaniu kontami użyt-
kowników (w większości działają one z wiersza
poleceń). Aby dodać nowego użytkownika nale-
ży posłużyć się programem adduser. Jego zada-
niem jest utworzenie odpowiednich wpisów w
plikach passwd i group, następnie tworzy katalog
domowy użytkownika i kopiuje pliki konfigura-
cyjne z katalogu /usr/share/skel. Dodanie nowe-
go użytkownika sprowadza się do udzielenia kil-
ku odpowiedzi, na podstawie których adduser
utworzy wpisy do poszczególnych plików. Jakie
informacje są wymagane? Na początku określa-
my login, następnie pełną nazwę użytkownika.
W miejscu z zapytaniem o UID zazwyczaj nic
nie podajemy, pozwalając tym samym aby pro-
gram wstawił ustawienia domyślne. Następnie
podajemy dane związane z określonymi grupami
nowego użytkownika. Można dodać go do gru-
py wheel dzięki czemu będzie mógł korzystać z
su i hasła administratora systemu. Program addu-
ser pozwala również na określenie domyślnej po-
włoki np.
sh
,
csh
,
tcsh
,
zsh
lub
nologin
. Zosta-
niemy także zapytani, czy chcemy ustawić hasło
dla nowego użytkownika. Oczywiście odpowia-
damy twierdząco i dwukrotnie powtarzamy na-
sze hasło. Na koniec program wyświetli podsu-
mowanie i poprosi o potwierdzenie poprawności
danych. Jeżeli ponownie odpowiemy twierdząco
informacje zostaną zapisane w bazie danych i od-
powiednich plikach.
Jeżeli uznamy, że konto jakiegoś użytkow-
nika jest zbędne można w prosty sposób całko-
wicie je usunąć za pomocą programu konsolo-
wego rmuser. Jest on niezwykle dokładny po-
14
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
lipiec-sierpień 2009
15
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
www.lpmagazine.org
nieważ oprócz usunięcia wpisów dotyczących
danego konta z crontab, prac at oraz zniszcze-
nia procesów użytkownika program ten usuwa
hasła z systemowego pliku haseł, katalog ma-
cierzysty, a nawet pocztę z /var/mail. Dodat-
kowo zostają skasowane wszelkie pliki tym-
czasowe, będące własnością tego użytkownika
i ostatecznie zostaje on usunięty z grup, do któ-
rych należy (w pliku /etc/group). Możliwości
rmuser są ogromne, ponieważ umożliwia na-
wet usunięcie konta superużytkownika, co jak
nietrudno się domyśleć zakończy się katastrofą
dla naszego systemu. Podobnie jak w przypad-
ku narzędzia adduser zostaniemy poproszeni o
dwukrotne potwierdzenie usuwanych danych.
Może się zdarzyć, że będziemy chcieli
zmienić pewne ustawienia, które wprowadzili-
śmy podczas tworzenia nowego konta, np. po-
włokę, hasło itd. W tym celu wystarczy posłużyć
się programem chpass. Jako ciekawostkę warto
wspomnieć, że chsh, chfn oraz ypchpass, ypchsh
i ypchfn są jedynie dowiązaniami do chpass. Je-
żeli uruchomimy program podając jedynie na-
zwę użytkownika (bez dodatkowych parame-
trów) zostaną edytowane informacje o nim, któ-
re można dowolnie zmieniać. Niezbędne będą
prawa roota, gdyż dostęp do tych informacji z
poziomu zwykłego użytkownika ogranicza się
do kilku pól (pełna nazwa użytkownika, powło-
ka i numer telefonu). Jedynie administrator mo-
że zmienić np. umiejscowienie katalogu domo-
wego danego użytkownika. Po wyjściu z edyto-
ra zostanie automatycznie zaktualizowana odpo-
wiednia baza danych. Chpass umożliwia zmianę
wielu różnych opcji. Czasem jednak chcemy tyl-
ko zmienić hasło. Specjalnie w tym celu powstał
program passwd. Działanie sprowadza się do
podania aktualnego hasła, a następnie nowego.
A co zrobić kiedy z systemu korzysta wielu
użytkowników, a każdy z nich pragnie prywatno-
ści i komfortu pracy? W takim wypadku zawsze
niezbędne okazują się pewne ograniczenia. Fre-
eBSD został doskonale dopracowany pod tym
względem i zapewnia kilka sposobów na ogra-
niczenie zasobów systemowych dla danej oso-
by. Zasadniczo można je podzielić na dwa ro-
dzaje. Pierwsze z nich ograniczają dostępną dla
użytkownika przestrzeń dysku twardego. Dzięki
temu możliwy jest szybki dostęp do przydzielo-
nego miejsca i możliwość sprawdzenia zajętości
miejsca bez zbędnego obciążania systemu. Po-
za przestrzenią dysku twardego, FreeBSD ofe-
ruje także możliwość ograniczenia zasobów pa-
mięci, procesora itp. Aby zdefiniować te warto-
ści wykorzystuje się tzw. klasy logowania i plik
/etc/login.conf. Domyślna klasa nazywa się po
prostu
default
. Do każdej z klas przypisane są
zestawy uprawnień w postaci
identyfikator =
przetwarzana wartość
. Poznaliśmy już to w
trakcie polonizacji systemu. Przykładem mo-
że być po raz kolejny Listing 1. Nie należy jed-
nak utożsamiać limitów systemowych z upraw-
nieniami logowania. No dobrze, ale jakie limity
zasobów są dostępne? Przede wszystkim
core-
dumpsize
, który jest powszechnie stosowany i
umożliwia kontrolę wykorzystania przestrzeni
dyskowej. Uogólniając ogranicza on rozmiar pli-
ku rdzenia tworzonego przez program. Limit ten
może uchronić użytkowników przed utratą prze-
strzeni dysku po awarii dużego programu. Dru-
gim limitem jest
cputime
służący do określenia
maksymalnego czasu jaki może zostać poświę-
cony na proces użytkownika. Każdy proces prze-
kraczający ten czas zostanie zniszczony. Nie na-
leży jednak mylić czasu wykorzystania proceso-
ra z procentowym wykorzystaniem jego możli-
wości. Czasami istnieje potrzeba ustalenia mak-
symalnego rozmiaru pliku jaki może posiadać
użytkownik. W tym celu stworzono opcję
file-
size
, która określa wielkość pojedynczego pli-
ku, a nie dostępny przydział dysku twardego. Dla
określenia dopuszczalnej ilości procesów, któ-
re mogą być wykonane wystarczy ustawić limit
maxproc
. Widzimy zatem, że FreeBSD oferuje
możliwość niezwykle precyzyjnego kontrolowa-
nia kont poszczególnych użytkowników. To jed-
nak nie wszystko! Jeżeli zachodzi taka koniecz-
ność można także ustalić maksymalną wielkość
pamięci wykorzystywanej przez proces, która bę-
dzie zablokowana w pamięci głownej (
memory-
locked
). Podobnie działa limit
memoryuse
, lecz
nie jest tak rygorystyczny jak
memorylocked
. Je-
śli administrator stwierdzi, że otwieranie zbyt
wielu plików jednocześnie przez danego użyt-
kownika jest niewskazane, to za pomocą parame-
tru
openfiles
ma możliwość określenia ich ak-
ceptowalnej liczby. Limitów gotowych do uży-
cia jest zdecydowanie więcej, jednakże opisanie
wszystkich byłoby trudne. Warto wiedzieć rów-
nież o
sbsize
(ograniczenie pamięci sieciowej
mogący uchronić przed atakami DoS) i
stack-
size
(maksymalny rozmiar stosu). O czym war-
to pamiętać? Przede wszystkim, że ustawienie
nieodpowiednich dla konkretnego systemu nie-
właściwych wartości (zbyt niskich lub wygó-
rowanych) może utrudnić codzienną pracę albo
spowodować, że system będzie podatny na wła-
mania i wszelkiego typu nadużycia. Ciekawostką
jest fakt, że procesy takie jak
openfile
nie odno-
szą się do użytkownika jako spójnej całości, ale
poszczególnych jego procesów. Jak zatem obli-
czyć ile tak naprawdę można otworzyć plików?
Łatwo to obliczyć mnożąc wartości limitu
open-
file
i
maxproc
.
Każdy użytkownik jest przypisany do ja-
kiejś grupy. Czym właściwie jest grupa? Moż-
na określić ją jako zbiór, czy listę użytkowników.
Poszczególne grupy posiadają dwa odróżniające
je od siebie elementy: indywidualną nazwę i nu-
mer GID (Group ID). Aby jądro systemu mogło
określić, czy dany proces może wykonać okre-
śloną czynność niezbędny jest lista grup oraz
identyfikator UID. Informacje dotyczące grup
zawarte są w pliku /etc/group. Na charakterysty-
kę grupy składają się cztery informacje: nazwa,
zaszyfrowane hasło, identyfikator i wypisani po
przecinku użytkownicy należący do danej grupy.
Zawartość pliku group można modyfikować po-
przez jego edycję, jednak znacznie wygodniej-
szym sposobem jest użycie programu pw. Zaletą
tej metody jest wykluczenie ewentualnych błę-
dów składniowych, które mogłyby powstać pod-
czas samodzielnego uzupełniania pliku. Jeżeli
chcemy dodać nową grupę, np. lucas wystarczy
wpisać w konsoli polecenie
pw groupadd lu-
cas
. Jeżeli chcielibyśmy upewnić się, że zosta-
ła dodana korzystamy z parametru
groupshow
(
pw groupshow lucas
). W ten sposób została
utworzona nowa grupa, jednak bez przypisania
do niej przynajmniej dwóch użytkowników, jej
istnienie jest pozbawione sensu. Jak dodać użyt-
kownika do grupy? Wystarczy wpisać
pw gro-
upmod nazwa_grupy -M nazwa_użytkownika
.
Jeśli chcemy dodać więcej kont oddzielamy je
przecinkami. W ten sposób każdy może dosto-
sować FreeBSD do wymagań nie tylko jednego,
lecz wielu użytkowników systemu. Zapewnia to
wygodną pracę, sprawiedliwy podział zasobów i
możliwość kontroli stabilności systemu.
Pusta kartka i LPR
FreeBSD posiada doskonałe wsparcie dla wie-
lu drukarek, począwszy od atramentowych po
laserowe. Niestety czasem zadowalające efek-
ty należy poprzedzić odpowiednią konfigura-
cją systemu. Dzięki niej będziemy mogli ro-
bić wydruki w wysokiej jakości. Do komuni-
kacji z drukarką FreeBSD wykorzystuje tzw.
LPD, który odpowiada za pakiety wychodzące
z drukarki i przychodzące (także od innych ho-
stów z sieci), umożliwia użytkownikom robie-
nie wydruków i tworzenie kolejek drukowania.
Ponadto LPD umożliwia dołączanie nagłów-
ków, odpowiada za komunikację z portem dru-
karki i zawiera wiele filtrów wspomagających
proces drukowania. Plikiem konfiguracyjnym
jest /etc/printcap. Z dukowaniem nieodzownie
wiąże się pojęcie tzw. spoolingu. Polega ono na
umieszczeniu danych w buforze, dzięki czemu
zostaje odciążony procesor, pamięć itd. Kiedy
dane przeznaczone do drukowania znajdują się
już w buforze, proces kontynuuje działanie.
Drukarka pobiera informacje z bufora i prze-
twarza je w czasie rzeczywistym. To właśnie
takie rozwiązanie umożliwia użytkownikowi
normalną pracę z komputerem podczas dru-
kowania dokumentów. Wyobraźmy sobie sy-
16
Dla początkujących
FreeBSD – chwila dla admina, cz. 1
lipiec-sierpień 2009
tuację, że podłączeni zdalnie do naszego syste-
mu użytkownicy próbują jednocześnie wydru-
kować pliki. Zakończyłoby się to fiaskiem gdy-
by nie odpowiednie zarządzanie systemu.
Większość współczesnych drukarek podłą-
czona jest przez port USB. Postaramy się skon-
figurować drukarkę w taki sposób, aby bez pro-
blemów działała zarówno w środowisku graficz-
nym jak i w konsoli. W przykładach posłużymy
się drukarką Hellwet Packard. Jest to popularny
producent sprzętu dostępnego w Polsce. Oczy-
wiście można spotkać również innych, jak np.
Brother czy Lexmar, jednak konfiguracja będzie
dla większości podobna, natomiast różnice poja-
wią się w związku ze sterownikami. Na począt-
ku należy sprawdzić, czy jądro systemu posiada
moduły odpowiedzialne za obsługę USB (device
usb), kontroler USB device uhci (tu zintegrowa-
ny z chipseten Intel, dla Via proponuje się moduł
ohci). Aby sprawdzić czy kontroler USB pasują-
cy do aktualnej konfiguracji wydajemy polece-
nie
dmesg | grep uhub
. Kolejnym krokiem jest
dodanie do pliku /etc/rc.conf wpisu
usbd_ena-
ble="YES"
i sprawdzenie czy istnieje w katalo-
gu /dev urządzenie ulpt0. Taki sam efekt otrzy-
mamy wpisując w konsoli polecenie
ls /dev/
ulpt*
. Jeżeli urządzenie takie nie istnieje należy
je utworzyć wpisując
cd /dev && ./MAKEDEV
ulpt0
, a następnie zatwierdzając to klawiszem
[Enter]. Aby system mógł rozpoznać nowe urzą-
dzenie musimy go ponownie uruchomić. Po
stworzeniu odpowiedniego urządzenia w kata-
logu /dev, nadszedł czas na instalację oprogra-
mowania. Ponieważ założyliśmy, że konfiguru-
jemy drukarkę HP niezbędny okaże się sterow-
nik hpijs. Najlepiej zainstalować go wykorzystu-
jąc w tym celu porty. Przechodzimy do katalogu
/usr/ports/print/hpijs, następnie kompilujemy go
i instalujemy w systemie (
make install cle-
an
). Choć mamy już odpowiedni sterownik dla
drukarki, niezbędne okażą się jeszcze trzy pakie-
ty, a mianowicie Ghostscript, CUPS i cups-lpr.
Instalacja z portów przebiega w ten sam sposób
co w przypadku hpijs. Pierwszy pakiet znajduje
się w katalogu /usr/ports/print/ghostscript-gnu,
CUPS w /usr/ports/print/cups, natomiast cups-
lpr w /usr/ports/print/cups-lpr.
Po uzupełnienu FreeBSD o odpowiednie
pakiety nadszedł czas na konfigurację. Pierw-
szym zadaniem będzie ustawienie CUPS-a.
Przechodzimy do katalogu /usr/local/etc/rc.d i
zmieniamy nazwę utworzonego tam podczas in-
stalacji pliku cupsd.sh.sample na cupsd.sh. Jak
łatwo zauważyć jest to plik zawierający skrypty
związane z pakietem CUPS. Uruchamiamy go
wpisując w konsoli
sh cupsd.sh start
. Te-
raz możemy już połączyć się z panelem admini-
stracyjnym CUPS-a. Niezbędna do tego będzie
przeglądarka internetowa. W polu adresu wpisu-
jemy http://127.0.0.1:631/admin/. Dodanie no-
wej drukarki sprowadza się do poprawnego wy-
pełnienia kilku pól. Najpierw w zakładce Strona
Główna wybieramy Dodaj drukarkę. Zostanie-
my przeniesieni do zakładki Administracja, w
której należy uzupełnić nazwę oraz opis drukar-
ki, a następnie przechodzimy do kolejnego eta-
pu posługując się przyciskiem Kontynuuj. Teraz
wybieramy odpowiedni typ urządzania, np. HP
Printer (HPLIP). Konieczne okaże się wpisa-
nie tzw. URI. Najlepiej uzupełnić wpisując war-
tość
lpd://hostname/queue
, choć automatycz-
nie generowane URI może mieć postać podob-
ną do takiej:
hp:/usb/Deskjet_F2200_serie-
s?serial=CN86J4S58W0534
. W kolejnym kro-
ku wybieramy odpowiedniego producenta dru-
karki i sterownik, którego chcemy użyć. Finalnie
klikamy na przycisk Dodaj drukarkę. Co praw-
da dodawanie nowych urządzeń, jak drukarki nie
jest skomplikowane jednak warto poświęcić te-
mu odrobinę czasu, aby dokładnie prześledzić
każdy kolejny krok. Jeśli nie pojawiły się błędy
oznacza to tylko jedno – Sukces! Pewnie jeste-
ście ciekawi, czy wszystko działa. Drukowanie
w środowisku graficznym można przetestować
w prosty sposób, ale jak to zrobić w środowi-
sku tekstowym? W rzeczywistości drukowanie
za pomocą konsoli jest tak samo proste jak przy
wykorzystaniu np. OpenOffice. Dla ułatwie-
nia należy przejść do katalogu /usr/local/bin/,
w którym zostało zainstalowane oprogramo-
wanie. Ewentualnie można sprawdzić położenie
programu lpr wpisując polecenie
whereis lpr
.
Będąc już w odpowiednim katalogu wystarczy
wydać polecenie
lpr -P Deskjet_F2200_se-
ries /home/lucas/plik.txt
. Składnia nie
jest skomplikowana. Po parametrze
-P
podaje-
my nazwę naszej nowej drukarki (wpisywaliśmy
ją w panelu administracyjnym CUPS), a następ-
nie plik lub tekst do druku.
Mając poprawnie skonfigurowaną drukar-
kę, nic nie stoi na przeszkodzie, aby udostęp-
nić ją innym użytkownikom , np. sieci lokalnej.
Niezbędny będzie pakiet SAMBA lub NFS.
Przyjmijmy jednak założenie, że wybraliśmy
pierwszy z wymienionych i chcemy umożli-
wić dostęp do drukarki wszystkim użytkow-
nikom (oczywiście nic nie stoi na przeszko-
dzie, żeby precyzyjnie określić pewną grupę).
Po zainstalowaniu SAMBY należy edytować
plik /usr/local/etc/smb.conf. Zawiera on infor-
macje dotyczące konfiguracji tego oprogramo-
wania. Na początek zajmijmy się sekcją prin-
ters. Należy ustawić w niej kilka zmiennych
tak jak zostało to pokazane w Listingu 2. Na-
stępnie w sekcji global wskazujemy na pakiet
CUPS poprzez dodanie wpisów
printcap na-
me = cups oraz printing = cups
. Kolejnym
krokiem jest edycja dwóch plików z katalogu
/usr/local/etc/cups. Zarówno z mime.types jak
i z mime.convs należy usunąć lub dodać znak
komentarza przed linią
application/octet-
stream
. Umożliwi to poprawne drukowanie za
pomocą sieci. Ostatnią czynnością jest ponow-
ne uruchomienie pakietu SAMBA. W tym ce-
lu przechodzimy do katalogu /usr/local/etc/rc.d
i wydajemy w konsoli polecenie
sh samba.sh
stop && sh samba.sh start
. Od tego mo-
mentu nasza nowa drukarka będzie widoczna
dla innych użytkowników lokalnej sieci.
Podsumowanie
Administrowanie systemem jest zadaniem nie-
zwykle złożonym, zwłaszcza jeżeli z danego
systemu korzysta wielu użytkowników. Nale-
ży zapewnić im komfort pracy przy utrzymaniu
odpowiedniego porządku w systemie i zacho-
waniu stabilności. Przedstawione w artykule
zagadnienia w żadnym wypadku nie stanowią
kompletnego kompendium wiedzy, a ich zada-
niem jest jedynie nakreślenie pewnego zakre-
su tematyki i wskazanie Czytelnikowi podsta-
wowych metod rozwiązania powszechnie wy-
stępujących problemów. Modyfikacja i kompi-
lacja jądra systemu jest rzeczą najważniejszą
dla osób pragnących maksymalnie dostosować
system do własnych potrzeb. Warto zagłębić
się w tej tematyce, ponieważ mozolna niekie-
dy lektura dokumentacji z pewnością zaowocu-
je w krótkim czasie.
Ktoś mógłby zarzucić, że w części po-
święconej katalogowi /etc nie zostały przed-
stawione wszystkie pliki konfiguracyjne, które
tam się znajdują. Biorąc jednak pod uwagę ich
mnogość – ponieważ jest tam kilkaset, a mo-
że kilka tysięcy plików – byłoby to zadaniem
niemożliwym (przynajmniej na łamach gaze-
ty). Zagadnienie to jest jednak na tyle istot-
nym, że pominięcie go stanowiłoby niewyba-
czalny błąd. Inaczej wygląda sytuacja w odnie-
sieniu do użytkowników, grup i drukarek. Tu z
pewnością nikt nie ma wątpliwości co do wagi
tych informacji.
W kolejnej części artykułu znajdą się wia-
domości pozwalające na sprawniejsze zarzą-
dzanie FreeBSD. Dowiemy się także jak zabez-
pieczyć nie tylko nasz system ale także cenne
dane przed utratą. Zapraszam do lektury!
Autor jest dziennikarzem, którego pasją
stało się programowanie (C/C++, Java,
Pascal, Qt, Gtk+) oraz systemy spod zna-
ku pingwina (Slackware, Debian).
Kontakt z autorem:
lucas.ciesielski@gmail.com
O autorze