background image

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-

background image

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

background image

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

 

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

 

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

 

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-

background image

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 
/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-

background image

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. deamonwwwnewsbind, 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-

background image

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 chshchfn oraz ypchpass, ypchsh 
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

 

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-

background image

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