piątek, 21 grudnia 2012

Archlinux - konfiguracja


Po zainstalowaniu "czystego" Archa, co opisałem w poprzednim poście, czas na dostosowanie go do własnych potrzeb. Poniżej pokazuję, jak doinstalować i skonfigurować środowisko graficzne i programy użytkowe potrzebne w codziennej pracy. Wszystko wykonujemy po zalogowaniu się na konto roota.

Instalacja

Uwaga: znak ";" oznacza zatwierdzenie komendy, czyli naciśnięcie Enter; po znakach "#" umieszczono komentarze do poleceń.
  1. pacman -S sudo; visudo; #odkomentowujemy wpis %wheel ALL=(ALL) NOPASSWD: ALL, dzięki czemu zwykły użytkownik dodany do grupy wheel będzie mógł wykonywać polecenia administracyjne z użyciem sudo 
  2. pacman -S xorg-server xorg-xinit xorg-server-utils xterm mesa xf86-video-vesa xf86-video-... #instalacja serwera X, biblioteki grafiki 3D oraz sterownika karty graficznej, zamiast kropek trzeba wpisać: intel, nouveau lub ati; jeżeli ktoś ma wątpliwości lub starszy sprzęt powinien zajrzeć do podręcznika instalacji
  3. pacman -S alsa-utils lxdm xfce4 xfce4-goodies gvfs-smb xdg-user-dirs gksu #instalacja grfaicznego menedżera logowania (lxdm) oraz środowiska xfce4 i kilku narzędzi
  4. pacman -S ttf-dejavu ttf-liberation cantarell-fonts ttf-droid #podstawowe czcionki
  5. pacman -S mc p7zip zip unzip unrar file-roller #menedżer plików i archiwów
  6. pacman -S gtk-engine-murrine gtk-engine-unico #silniki tematów graficznych
  7. pacman -S leafpad evince gpicview vlc gimp gstreamer0.10-plugins audacious #instalacja edytora tekstów, przeglądarki pdf i plików graficznych oraz obsługi multimediów
  8. pacman -S chromium jre7-openjdk icedtea-web-java7 flashplugin #przeglądarka, obsługa javy i flasha 
  9. pacman -S libreoffice mythes mythes-pl hunspell hunspell-pl hyphen hyphen-pl #instalacja pakietu biurowego, podczas wyboru składników można pominąć pakiety numer 7,9,10 i 11, polski pakiet lokalizacji ma numer 73
  10. pacman -S geany #jeżeli ktoś programuje...
  11. pacman -S networkmanager network-manager-applet #menedżer połączeń sieciowych

Konfiguracja

  1. usermod -a -G wheel alek #dodanie konta zwykłego użytkownika do grupy wheel
  2. systemctl enable graphical.target #ustawienie graficznego trybu uruchamiania systemu jako domyślnego
  3. systemctl enable lxdm.service #ustawienie automatycznego uruchamiania graficznego menedżera logowania
  4. systemctl enable NetworkManager #automatyczne zarządzanie połączeniami sieciowymi
  5. nano /etc/skel/.xinitrc #odkomentować linię: exec startxfce4
  6. nano /etc/X11/xorg.conf.d/10-keyboard-layout.conf:
       Section "InputClass"
            Identifier "keyboard-layout"
            Driver "evdev"
            MatchIsKeyboard "yes"
            Option "XkbLayout" "pl, us"
       EndSection
    
  7. nano /etc/lxdm/lxdm.conf #ustawiamy w sekcji [base] session=/usr/bin/startxfce4 i sekcji [userlist] disable=1
  8. nano /etc/xdg/user-dirs.defaults #wpisujemy domyślne nazwy folderów użytkownika, np. Pulpit, Pobrane, Szablony, Publiczny, Dokumenty, Muzyka, Obrazy, Wideo

Uwagi

Zanim zrestartujemy system warto przetestować poprawność uruchamiania się serwera X, graficznego menedżera logowania i środowiska Xfce. W tym celu na drugiej konsoli logujemy się jako zwykły użytkownik, którego konto założyliśmy podczas instalacji, a następnie uruchamiamy usługę graficznego menedżera logowania: sudo systemctl start lxdm.
Jeżeli uda się nam zalogować, Xfce zaoferuje utworzenie panelu, wybieramy opcję "domyślny". Jeżeli nie, błędów szukamy w plikach: /var/log/Xorg.0.log oraz ~/.xsession-errors.

niedziela, 16 grudnia 2012

Archlinux - instalacja

Przygodę z Archlinuksem można zacząć od jakiejś dystrybucji opartej na nim, ale prostszej w instalacji i zazwyczaj już skonfigurowanej. Przykładami takich dystrybucji są Bridge Linux lub Cinnarch, które warto oczywiście wypróbować. Są o wiele lepiej przemyślane niż popularne Ubuntu. Jednak różnice pomiędzy "łatwiejszymi" dystrybucjami a "czystym" Archiem sprowadzają się w gruncie rzeczy do graficznego opakowania instalacji i (ewentualnie) konfiguracji.
Jeżeli chcemy poznać podstawy dystrybucji linuksowych, warto spróbować instalacji i konfiguracji Archa od podstaw. Dodatkową korzyścią takiego podejścia jest także szybciej i zazwyczaj stabilniej działający system, ponieważ znajdą się w nim tylko pakiety wymagane przez nasz sprzęt. Proces ten dla średniozaawansowanego lub po prostu chcącego się czegoś nauczyć użytkownika nie jest bardzo trudny ze względu na świetną dokumentację zapewnianą przez Wiki Archa. Na początku warto przejrzeć następujące strony:


Ponieważ powyższe zasoby są dosyć rozbudowane, uwzględniają wiele potencjalnych konfiguracji i omawiają różne możliwości, przygotowałem skróconą, podręczną wersję.

Najpierw pobieramy obraz aktualnego medium instalacyjnego, wypalamy go na CD lub przenosimy na pendrive'a, a następnie uruchamiamy z niego komputer. Po uruchomieniu systemu trafimy do konsoli tekstowej, w której przeprowadzamy właściwą instalację.

Instalacja

Uwaga: znak ";" oznacza zatwierdzenie komendy, czyli naciśnięcie Enter; po znakach "#" umieszczono komentarze do poleceń.
  1. loadkeys pl; setfont Lat2-Terminus16; #wczytanie polskiej klawiatury i ustawienie czcionki konsoli (można też użyć Lat2-Terminus16)
  2. nano /etc/locale.gen; #określamy język, w którym będziemy porozumiewali się z systemem; w pliku odkomentowujemy (tj. usuwamy znak #) linie zawierające wpisy: en_US.UTF-8 i pl_PL.UTF-8
  3. locale-gen; export LANG=PL_PL.UTF-8; #tworzymy bazę zlokalizowanych komunikatów systemowych i ustawiamy zmienną systemową określającą nasz język
  4. cfdisk /dev/sda #uruchamiamy narzędzie pozwalające przygotować partycje potrzebne do instalacji systemu, na początek wystarczą dwie, jedna o wielkości ok. 8-10 GB i druga, której wielkość jest dwa razy większa niż ilość pamięci RAM w naszym komputerze
  5. mkfs.reiserfs /dev/sda2; mount /dev/sda2 /mnt; #tworzymy system plików na przygotowanej partycji (można też użyć mkfs.ext4) i montujemy partycję instalacyjną
  6. mkswap /dev/sda3; swapon /dev/sda3; # tworzymy i montujemy partycję wymiany
  7. nano /etc/pacman.d/mirrorlist; #opcjonalnie wybieramy repozytorium
  8. pacstrap -i /mnt base base-devel; #instalujemy podstawowe grupy pakietów
  9. genfstab -U -p /mnt >> /mnt/etc/fstab; nano /mnt/etc/fstab; # generujemy plik fstab
  10. arch-chroot /mnt; #zmiana katalogu root na /mnt
  11. powtarzamy punkty 1-3
  12. echo LANG=pl_PL.UTF-8 > /etc/locale.conf #ustawiamy polski język w konsoli
  13. nano /etc/vconsole.conf; #spolszczamy konsolę: KEYMAP=pl; FONT=lat2-16; FONT_MAP=;
  14. ln -s /usr/share/zoneinfo/Europe/Warsaw /etc/localtime #ustawienie strefy czasowej
  15. hwclock --set --date="2012-12-14 14:12:05" --utc; hwclock --hctosys --utc #ustawienie zegara RTC (sprzętowego) na czas UTC i zsynchronizowanie go z zegarem systemowym
  16. timedatectl set-time "2012-12-14 14:12:05 ; timedatectl set-local-rtc 0 #tych poleceń można użyć po(!) instalacji do ustawienia zegara;
  17. echo archie > /etc/hostname; #ustawienie nazwy komputera (archie)
  18. systemctl enable dhcpcd@eth0.service; #uruchomienie automatycznej konfiguracji sieci. Uwaga: nazwa interfejsu może być inna, sprawdzamy ją, wydając polecenie: ip link.
  19. nano /etc/pacman.d/mirrorlist; #opcjonalne sprawdzenie repozytoriów
  20. mkinitcpio -p linux; #wygenerowanie obrazu initrd (initial ramdisk environment)
  21. passwd; #ustawienie hasła roota
  22. useradd -m -g users -G wheel,lp,optical,power,storage -s /bin/bash alek; passwd alek; #dodanie konta użytkownika i ustawienie hasła
  23. pacman -S grub-bios os-prober; grub-install --target=i386-pc --recheck --force /dev/sda; grub-mkconfig -o /boot/grub/grub.cfg; #instalacja bootmenedżera GRUB w MBR i wygenerowanie jego pliku konfiguracyjnego
  24. exit; umount /mnt; reboot; #wyjście ze środowiska chroot, odmontowanie i restart

  25. Uwagi

  • Relatywnie najtrudniejszym elementem jest tworzenie partycji. Jeżeli mamy na dysku jakiś system, a także (zazwyczaj) jakieś partycje, lepiej skorzystać z graficznego edytora partycji i z jego pomocą wygospodarować miejsce na instalację. Można użyć np. środowiska GParted Live lub CloneZilla. Oczywiście oznaczenia partycji (np. /dev/sda2), należy dostosować.
  • Menadżer pakietów w Archu, czyli pacman, używa repozytoriów zgodnie z kolejnością ich wystąpienia w pliku /etc/pacman.d/mirrorlist. Na początek warto skopiować jakieś europejskie repo, np. bardzo szybkie i często aktualizowane:
    Server = http://mir1.archlinux.fr/archlinux/$repo/os/$arch.
  • Uwaga: z doświadczenia wynika, że od czasu do czasu repozytorium trzeba zmienić ze względu na błędy podczas aktualizacji systemu.
  • Powyższa instrukcja pomija konfigurację sieci, zwłaszcza wifi, i zakłada automatyczne nawiązanie połączenia z internetem za pomocą łącza kablowego. Połączenie kablowe jest zalecane podczas instalacji.
  • W razie problemów zajrzeć trzeba do wspomnianych wyżej stron wiki.
W następnym wpisie przedstawię przykładową konfigurację Archa.

wtorek, 13 listopada 2012

Systemd i journal - polecenia

Archlinux przeszedł na nowy menedżer uruchamiania systemd, o czym pisałem poprzednio. W związku z tym zmienia się również domyślny sposób zarządzania usługami, jak i mechanizm logowania zdarzeń systemowych. Poniżej lista przydatnych poleceń.

Systemctl

  • $ systemctl start/stop/retsart vftpd.service - uruchomienie/zatrzymanie/restart usługi
  • $ systemctl enable/disable vftpd.service - włączenie/wyłączenie uruchamiania usługi podczas startu systemu
  • $ systemctl enable/disable sshd.socket - włączenie/wyłączenie uruchamiania usługi na żądanie
  • $ systemctl list-units --type=target - pokaż "usługi" typu target
  • $ systemctl isolate multi-user.target - uruchom podany "stan", zatrzymując inne; odpowiednik zmieniania poziomów (runlevel)
Szczegóły w manualu i na stronie projektu.

Journalctl

  • $ journalctl --b - log z bieżącego uruchomienia systemu
  • $ journalctl -n100 - pokaż ostatnie 100 wpisów
  • $ journalctl -u NetworkManager - pokaż logi dotyczące podanej "usługi"
Szczegóły w manualu i na stronie projektu.

Problemy z uruchomieniem

Po uruchomieniu się Gruba wciskamy "e" i w linii rozpoczynającej się od "linux" dodajemy jako parametr startowy jądra: systemd.unit=recovery.target lub w ostateczności: systemd.unit=emergency.target.

wtorek, 6 listopada 2012

Czysty systemd

Od 4.11.2012 domyślnym mechanizmem uruchamiania Archa jest systemd, a to oznacza, że podczas aktualizacji pakietów, np. w Bridge'u, należy pamiętać o kilku rzeczach. Przypomnijmy.

1) Ustawienia systemowe w plikach:
  • /etc/locale.conf
  • /etc/locale.gen
  • /etc/hostname
  • /etc/hosts
  • /etc/adjtime
  • /etc/vconsole.conf
  • /etc/environment
2) Usunięcie wsparcia dla initscripts, instalacja pakietu kompatybilności, usunięcie poprzedniego pliku konfiguracji systemu, pełna aktualizacja systemu:
  • pacman -R sysvinit initscripts
  • pacman -S systemd-sysvcompat
  • rm /etc/rc.conf
  • pacman -Syu
3) Ustawienie domyślnego poziomu (targetu) uruchamiania oraz domyślnie uruchamianych usług, np.:
  • systemctl enable graphical.target
  • systemctl enable lxdm.service
  • systemctl enable NetworkManager.service
4) Zmiana sposobu uruchamiania środowiska graficznego, np. XFCE w Bridge'u, co wymaga nowej zawartości pliku ~/.xinitrc:

#!/bin/sh

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

exec startxfce4

Po wykonaniu tych czynności wykonujemy restart, a system powinien wykorzystać już czysty systemd.

wtorek, 23 października 2012

Aktualizacja do Ubuntu 12.10 w linii poleceń

Po pierwsze należy zrobić standardową aktualizację systemu:
sudo apt-get update && sudo apt-get dist-upgrade

Jeżeli podczas aktualizacji zostanie zainstalowane nowe jądro, dobrze jest zrestartować system.
Następnie instalujemy menadżer aktualizacji:
sudo apt-get install update-manager-core

Sprawdzamy, czy w pliku /etc/update-manager/release-upgrades mamy wpis Prompt=normal, w razie potrzeby zmieniamy na podany.
Pozostaje uruchomić aktualizację:
sudo do-release-upgrade -d

Po potwierdzeniu kilku zapytań pobrane zostaną nowe pakiety (co w zależności od szybkości połączenia może trwać długo) i nastąpi aktualizacja wydania.

piątek, 28 września 2012

Bridge Linux - Grub - konsola

Ostatnio po odtworzeniu obrazu dysku, na którym zainstalowany był Bridge Linux, używający Gruba2 zainstalowanego w MBR (startowy sektor dysku), powitała mnie konsola Gruba... 1. Wszystko przez ClonZillę, która obraz zrobiła poprawnie, ale podczas jego odtwarzania instalowała Gruba 1 zamiast 2.
Reanimacja systemu możliwa jest oczywiście z płyty instalacyjnej Bridge Linux Live, ale można prościej. Należy wykorzystać możliwości konsoli Gruba:

  • root (hd0,0) - wskazanie partycji, na której zainstalowany był Bridge (/dev/sda1);
  • kernel /boot/vmlinuz-linux ro - wskazanie jądra
  • initrd /boot/initramfs-linux.img - wskazanie obrazu startowego systemu plików
  • boot - uruchomienie

Po wydaniu powyższych komend, zgłosi się konsola awaryjna Bridge'a (Archa), czyli rootfs. Zakładając, że używamy systemd do uruchamiania systemu, wykonujemy następujące polecenia:

  • mkdir /boot - jeżeli mamy osobną partycję dla tego katalogu
  • mount /dev/sda1 /new_root - montujemy partycję, na której zainstalowaliśmy Bridge'a
  • cd /new_root
  • exec init=/bin/systemd

Po wydaniu ostatniego polecenia system powinien wystartować. Pozostaje wtedy zainstalować Gruba2:

  • sudo grub-install --target=i386-pc --recheck --force /dev/sda - instalacja w MBR
  • sudo grub-mkconfig -o /boot/grub/grub.cfg


Po restarcie powinniśmy zobaczyć menu startowe Gruba.

Bridge Linux - serwer SSH

Instalacja

sudo pacman -S openssh

Konfiguracja

Edytujemy plik /etc/ssh/sshd_config, w którym można dodać następujące opcje:
AllowUsers user1 user2
PermitRootLogin no

Pierwsza wskazuje użytkowników, którzy będą mogli logować się przez ssh; druga opcja zabrania logowania na konto roota.

Uruchomienie serwera

Mamy dwie możliwości:

  • sudo systemctl enable sshd.service - uruchomienie serwera ssh podczas startu systemu
  • sudo systemctl enable sshd.socket - uruchamianie serwera ssh po próbie połączenia


Proponuję wybrać drugie.

środa, 12 września 2012

Apache2 + PHP5 na Ubuntu 12.04 i Archlinux

Chodzi o zainstalowanie serwera www z obsługą php w katalogach domowych użytkownika.

Ubuntu 12.04


Instalujemy pakiety:
sudo apt-get install apache2 php5 php5-gd php5-sqlite

Po instalacji edytujemy /etc/apache2/mods-available/php5.conf, aby odkomentować wspracie dla php w katalogach użytkownika. Następnie uaktywniamy odpowiednie moduły apache'a:
sudo a2enmod userdir rewrite
sudo service apache2 restart - restart usługi


Archlinux, Bridge Linux


Instalujemy pakiety:
sudo pacman -S apache php php-gd php-sqlite
sudo pacman -S systemd-httpd-units
- pliki konfiguracyjne usługi dla systemd
sudo packer -S php-apache

Do pliku /etc/httpd/conf/httpd.conf dodajemy:
  • LoadModule php5_module modules/libphp5.so - na końcu sekcji LoadModule,
  • Include conf/extra/php5_module.conf - na końcu sekcji Include, pod koniec pliku.

W tym samym pliku odkomentowujemy:
  • TypesConfig conf/mime.types - powinno być odkomentowane domyślnie,
  • MIMEMagicFile conf/magic - opcjonalnie.

Do pliku /etc/httpd/conf/mime.types dodajemy na końcu listy "application":
application/x-httpd-php5 php php5

sudo systemctl start httpd.service - uruchomienie
systemctl status httpd.service - status


Błędy


W obydwu systemach zaglądamy do logów:
  • cat /var/log/apache2/error.log - Ubuntu
  • cat /var/log/httpd/error.log - Arch

Katalogi użytkownika


Tworzymy katalog na strony www:
mkdir public_html

Tworzymy plik testowy index.php z zawartością:
<?php
    phpinfo();
?>
- i zapisujemy w public_html. W przeglądarce wpisujemy localhost/~nazwa_użytk i powinniśmy zobaczyć informacje o środowisku php i serwerze.

niedziela, 2 września 2012

Bridge Linux i Systemd

W poprzednim poście nt. instalacji najnowszego Bridge'a poruszyłem temat migracji na nowy mechanizm startowy systemd. Wypada rozszerzyć i uporządkować uwagi dotyczące wdrażania tego rozwiązania.

Pliki konfiguracyjne

Pierwszym, nieodzownym warunkiem przejścia na systemd jest zastąpienie dotychczasowego pliku konfiguracyjnego Archa, tj. rc.conf, plikami charakterystycznymi dla nowego systemu, co opisałem wcześniej:

  • /etc/hostname
  • /etc/vconsole.conf
  • /etc/locale.conf
  • /etc/timezone
  • /etc/adjtime
  • /etc/environment

Obsługa modułów ładowanych podczas uruchamiania systemu realizowana jest przez pliki z katalogu /etc/modules-load.d/ [więcej], moduły blokowane konfigurujemy w katalogu /etc/modprobe.d/ [więcej].

Próbne użycie systemd

Pierwsze użycie systemd wiąże się z czynnościami opisanymi w poprzednim poście:
  • w /etc/environment wstawiamy: LANG=pl_PL.utf8
  • w /etc/default/grub dopisujemy: GRUB_CMDLINE_LINUX_DEAFAULT="quiet init=/bin/systemd"
  • sudo grub-mkconfig -o /boot/grub/grub.cfg - aktualizujemy Gruba
  • sudo systemctl enable graphical.target - ustawiamy domyślny target (runlevel, poziom) uruchamiania
  • sudo systemctl enable lxdm.service - uruchamiamy podczas startu systemu menedżer logowania
Restart i... wszystko powinno działać.

Tylko systemd

Jeżeli po restarcie wszystko (lub prawie) działa, należy spróbować całkowitego zastąpienia dotychczasowych skryptów startowych nowym mechanizmem:
  • sudo pacman -R sysvinit initscripts - usuwamy stare skrypty startowe
  • sudo pacman -S systemd-sysvcompat - instalujemy pakiet kompatybilności systemd z sysvinit
  • sudo systemclt enable NetworkManager.service - jeżeli wykorzystujemy NetworkManagera do zarządzania połączeniami sieciowymi uruchamiamy go podczas startu systemu
Restart i... wszystko powinno działać.
Jeżeli wszystko (lub prawie) działa, z domyślnej konfiguracji Gruba można usunąć parametr "init=/bin/systemd", pamiętając o zaktualizowaniu potem pliku koniguracyjnego.

Journal zamiast syslog-ng

Systemd zawiera własną usługę logowania, journal. Syslog-ng można odinstalować lub skonfigurować do używania razem z journalem. Domyślnie logi journala są tracone po restarcie, aby tak nie było należy utworzyć klatalog: sudo mkdir /var/log/journal. Rozmiar logu ustawiamy w pliku /etc/ssytemd/journald.conf, np. na 20 MB:
SystemMaxUse=20M
Użyteczne polecenia:
  • journalctl - wyświetlenie logów
  • journalctl _SYSTEMD_UNIT=alsa.service - przykładowe filtrowanie logów

sobota, 1 września 2012

Bridge Linux 2012.8 i systemd

Jak zainteresowanym wiadomo, dostępna jest następna kompilacja Bridge Linux, oznaczona 2012.8. Instalacja przebiega tak samo, jak w wersji 2012.5, ale domyślnie instalowany jest GRUB2. W moim przypadku po restarcie okazało się, że bootmenedżer poprawnie się nie zainstalował. Musiałem więc jeszcze raz uruchomić komputer z wypalonej instalki Bridge'a i wklepać trochę kodu:

sudo mount /dev/sda2 /mnt -o rw
cd /mnt
sudo mount -t proc proc proc/
sudo mount -t sysfs sys sys/
sudo mount -o bind /dev dev/
sudo mount -t devpts pts dev/pts/
chroot . /bin/bash
- po tych operacjach można zainstalować GRUBA2 tak jak potrzeba, np.:
grub-install --target=i386-pc --recheck --force /dev/sda[2]
grub-mkconfig -o /boot/grub/grub.cfg
exit
- powyższe polecenia instalują GRUBa na dysku /dev/sda albo w MBR (/dev/sda), albo na wybranej partycji (/dev/sda2). Po restarcie wszystko powinno działać.

Po udanej instalacji, jak zwykle uruchomi się skrypt konfiguracyjny, który ustawia m.in. repozytoria i uruchamia procedurę aktualizacji. Tym razem przebiega ona bez większych problemów, ale jak się okazuje Bridge nadal używa "starego" pliku konfiguracyjnego /etc/rc.conf. Ponieważ ArchLinux stopniowo rezygnuje ze skryptów startowych sysvinit na rzecz systemd, należy je jednak utworzyć. W poście Bridge Linux 2012.5 - konfiguracja opisałem, które pliki są potrzebne. Po ich utworzeniu plik /etc/rc.conf można ograniczyć do wpisu:
DAEMONS=(dbus networkmanager syslog-ng @alsa)
- czyli określenia usług uruchamianych podczas startu systemu.

Systemd

Przejście Archa na mechanizm startowy systemd niesie ze sobą przede wszytskim przyśpieszenie uruchamiania i wyłączania systemu (w moim przypadku system uruchamia się w trybie GUI 10 sekund). Jednak żeby tak się stało, trzeba skonfigurować kilka rzeczy. Na początek w pliku /etc/environment dopisujemy:
LANG=pl_PL.utf8
- następnie w pliku /etc/default/grub jedną linię uzupełniamy:
GRUB_CMDLINE_LINUX_DEFAULT="quiet init=/bin/systemd"

Trzeba jeszcze zaktualizować plik konfiguracyjny GRUBa, czyli: sudo grub-mkconfig -o /boot/grub/grub.cfg.
Teraz można skonfigurować domyślny poziom (ang. target) uruchamiania się systemu i start graficznego menedżera logowania:
systemctl enable graphical.target
systemctl enable lxdm.service

Pozostaje restart i... obserwowanie szybszego startu systemu... Na koniec warto dodać, że powyższe zmiany nie porzucają jeszcze całkowicie mechanizmu sysvinit i jego skryptów konfiguracyjnych. Jak całkowicie przejść na systemd, napiszę niedługo.

Aktualizacja: Czysty systemd w Bridge Linux 2012.8.

czwartek, 9 sierpnia 2012

Ubuntu Server 12.04 LTS - Dnsmasq

Usługi DHCP i DNS są zazwyczaj realizowane przez wyspecjalizowane oprogramowanie, takie jak odpowiednio ISC DHCP i ISC Bind, niemniej w małych sieciach, gdzie ta sama maszyna pełni funkcję routera, serwera DHCP i DNS etc. można pomyśleć o alternatywnym rozwiązaniu, czyli Dnsmasq.

Instalacja

sudo apt-get install dnsmasq

Konfiguracja

Wszystkie ustawienia znajdują się w pliku /etc/dnsmasq.conf, chociaż moglibyśmy umieścić je w osobnych plikach w katalogu /etc/dnsmasq.d. Konfiguracja funkcjonalności serwera DHCP i DNS (cache) dla sieci lokalnej na interfejsie 192.168.19.1 (zobacz post nt. konfiguracji Ubuntu Server 12.04 LTS) przedstawia się następująco:
domain-needed
bogus-priv
filterwin2k
# nie korzystaj z pliku /etc/resolv.conf
no-resolv
# serwery DNS, np. naszego ISP
server=208.67.222.222
server=208.67.220.220
# nasza domena
local=/mojadomena.org/
# nasłuchuj na interfejsie
interface=eth1
expand-hosts
domain=mojadomena.org
# zakres adresów
dhcp-range=192.168.19.100,192.168.19.200,255.255.255.0,12h
# przykład rezerwacji adresów stałych
dhcp-host=00:1E:33:49:0E:C2,hostwlanie,192.168.19.14,1h
#
dhcp-option=3,192.168.19.1 # adres routera
# Opcje dla Samby w roli PDC
dhcp-option=19,0           # opcja ip-forwarding off
dhcp-option=44,0.0.0.0     # WINS server(s)
dhcp-option=45,0.0.0.0     # netbios datagram distribution server
dhcp-option=46,8           # netbios node type (hybrid)
dhcp-option=vendor:MSFT,2,1i # zwalnianie przydzielonego adresu DHCP
# serwer autorytatywny
dhcp-authoritative
cache-size=200
W opcjach server podajemy adresy naszych serwerów DNS, w przykładzie powyżej mamy serwery Open DNS, pozostałe opcje są bardzo dobrze opisane w oryginalnym pliku konfiguracyjnym (warto zrobić jego kopię).

Aby wszystko działało, trzeba jeszcze pamiętać o dwóch rzeczach. W pliku /etc/dhcp/dhclient.conf opcja prepend domain-name-servers 127.0.0.1; powinna być odkomentowana. Natomiast w pliku /etc/hosts, który dnsmasq propaguje do wszystkich klientów, powinna znaleźć się linia definiująca adres naszego routera i serwera Samby (bardzo ważne, jeżeli Samba jest serwerem PDC i korzystamy z profili wędrujących):
#127.0.1.1 mojserwer.mojadomena.org mojserwer//to zakomentowujemy
192.168.19.1 mojserwer.mojadomena.org mojserwer
Dnsmasq zużywa o wiele mniej zasobów niż tandem ISC DHCP + ISC Bind, jest też, jak widać prostszy w konfiguracji. Przydzielone adresy zapisywane są w pliku:
cat /var/lib/misc/dnsmasq.leases

Usługę uruchamiamy standardowo, tzn. sudo service dnsmasq start, oczywiście jeżeli wcześniej skonfigurowaliśmy ISC Dhcp i Binda, trzeba je wyłączyć: sudo service isc-dhcp-server stop && sudo service bind9 stop. Żeby ISC Dhcp i Bind nie były uruchamiane podczas startu systemu (załóżmy, że chcemy wypróbować Dnsmasq nie odinstalowując niczego), można zrobić tak:
# poniższe da błędy podczas startu, które można pominąć
sudo chmod a-x /etc/init.d/bind9
# przenosimy linki uruchamiajce isc-dhcp do swojego katalogu domowego
sudo mv /etc/init.d/isc-dhcp-* ./
Po restarcie powinien uruchomić się Dnsmasq.

środa, 1 sierpnia 2012

Ubuntu Server 12.04 LTS - dynamiczna aktualizacja DNS przez DHCP

Chodzi nam o to, aby serwer DHCP na bieżąco aktualizował bazę usługi DNS. Obydwie usługi zainstalowane są na tej samej maszynie i obsługują sieć lokalną (zobacz poprzedni post).
Sieć LAN: 192.168.19.0/24
Adres serwera: 192.168.19.1

Ponieważ serwer Bind9 musi mieć prawo zapisu do plików definiujących naszą strefę lokalną, przenosimy pliki konfiguracyjne i nadajemy odpowiednie uprawnienia, następnie generujemy klucz zabezpieczający dla usługi DHCP:

sudo cp /etc/bind/db.* /var/lib/bind
sudo chown bind:bind /var/lib/bind/*
sudo dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
sudo cat Kdhcp_updater.*.private|grep Key

Ostatnie polecenie wyświetli wygenerowany klucz na ekranie, np. Key: 5FROo2v0qrs5qS3pKL8pS2==, to co po dwukropku, należy skopiować do schowka.
Zmieniamy plik /etc/bind/named.conf.local:

key DHCP_UPDATER {
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  # Poniżej wklej skopiowany wcześniej klucz
  secret "5FROo2v0qrs5qS3pKL8pS2==";
};
# W definicjach stref zmieniamy opcje file oraz dodajemy
# opcje allow-update
zone "lo1cg.org" {
  type master;
  file "/var/lib/bind/db.lo1cg.org";
  allow-update { key DHCP_UPDATER; };
};

zone "19.168.192.in-addr.arpa" {
  type master;
  notify no;
  file "/var/lib/bind/db.192";
  allow-update { key DHCP_UPDATER; };
};

Trzeba jeszcze skonfigurować usługę DHCP. Modyfikujemy plik /etc/dhcp/dhcpd.conf:
# Na początku pliku dodajemy:
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
ddns-domainname "mojadomena.org.";
ddns-rev-domainname "in-addr.arpa.";

# Przed definicją podsieci dodajemy:
key DHCP_UPDATER {
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  # Poniżej wklej skopiowany wcześniej klucz
  secret "5FROo2v0qrs5qS3pKL8pS2==";
};

zone lo1cg.org. {
  primary 127.0.0.1;
  key DHCP_UPDATER;
}

zone 19.168.192.in-addr.arpa. {
  primary 127.0.0.1;
  key DHCP_UPDATER;
}

Reszta bez zmian. Na uwagę zasługuje opcja update-static-leases, którą powyżej włączyliśmy. Odpowiada ona za dopisanie do bazy DNS rekordów dla wszystkich hostów, którym przypisujemy statyczne adresy IP poprzez usługę DHCP. Manual dhcpd.conf ostrzega, że może to generować dużo ruchu wewnątrz sieci, więc trzeba zwrócić uwagę na opcje min-lease-time i max-lease-time oraz przeglądać log systemowy.
Na koniec restartujemy obie usługi i sprawdzamy, czy poprawnie się uruchomiły:
sudo service bind9 restart
sudo service isc-dhcp-server restart
sudo tail -n 50 /var/log/syslog

Po uruchomieniu jakiejś maszyny w sieci LAN (mojhost), możemy sprawdzić, czy baza DNS została zaktualizowana:
host 192.168.19.100 #adres IP mojegohosta
100.19.168.192.in-addr.arpa domain name pointer mojhost.mojadomena.org.

wtorek, 31 lipca 2012

Ubuntu 12.04 - różne błędy

Jeżeli podczas próby aktualizacji systemu otrzymujesz komunikat typu: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key ..., możesz spróbować następującej metody:
  • sudo apt-get clean
  • cd /var/lib/apt
  • sudo mv lists lists.old
  • sudo mkdir -p lists/partial
  • sudo apt-get clean
  • sudo apt-get update
  • sudo rm -r lists.old
  • sudo apt-get dist-upgrade

piątek, 27 lipca 2012

Ubuntu Server 12.04 LTS - monitoring

Narzędzia

Większość poniższych narzędzi wymaga uprawnień roota, a więc albo logujemy się na to konto, co w domyślnej konfiguracji Ubuntu jest niemożliwe (konto roota nie ma hasła), albo korzystamy z sudo.
  • cat /var/lib/dhcp/dhcpd.leases | less - lista dzierżaw serwera dhcp;
  • tail -f /var/log/syslog - bieżący przegląd logu systemowego, gdzie widać m.in. komunikaty firewalla;
  • apt-get install iptraf - narzędzie pokazujące ruch i statystyki na wybranych interfejsach;

Tcpdump

  • apt-get install tcpdump - instalacja
  • tcpdump -D - lista interfejsów
  • tcpdump [-A] -i eth1 tcp port 80 [-w plik] - nasłuchiwanie na wskazanym interfejsie pakietów http, opcja -A pokaże zawartość pakietów, opcja -w plik zapisuje pakiety do pliku, z którego można je później wczytać (-r), plik taki może być również analizowany w programie Wireshark.
  • tcpdump -i eth1 host mojhost and mojserwer - śledzenie ruchu między wskazanymi hostami
  • tcpdump -i eth1 src 192.168.1.2 and tcp dst port 80 - logowanie pakietów z podanego hosta kierowanych na port 80
  • tcpdump -i eth1 src 192.168.1.2 and dst port 80 and tcp\[13\] == 2
  • sudo tcpdump -i eth1 src 192.168.1.2 and dst port 80 and tcp\[tcpflags\]=tcp-syn - przechwytywanie pakietów z ustawioną flagą SYN, poprzedni przykład prezentuje możliwość badania wskazanych bitów w nagłówkach warstwy tcp
  • tcpdump -i eth1 -w zrzut.dmp \(tcp or udp\) and \(dst port 137 or dst port 138 or dst port 139\) - logowanie, tym razem do pliku (-w plik) pakietów NetBIOS
  • tcpdump -i eth1 icmp - logowanie komunikacji protokołu icmp
  • tcpdump -i eth1 icmp[0]=0 - logowanie tylko komunikatów echo replay
  • -v, -vv, -vvv - przełączniki zwiększające szczegółowość informacji logowanych przez tcpdump
  • -xX - pokazywanie zawartości pakietu w formacie heksadecymalnym

TShark

TShark - czyli konsolowa wersja programu Wireshark.
  • apt-get install tshark - instalacja
  • tshark -D - lista interfejsów
  • tshark -i eth1 tcp port 80 and host 192.168.1.4 - nasłuchiwanie na wskazanym interfejsie pakietów http od wskazanego hosta

Po instalacji TSharka warto umożliwić uruchamianie go z konta zwykłego użytkownika. W tym celu wydajemy następujące polecenia:
sudo groupadd wireshark
sudo usermod -a -G wireshark nasz_user
sudo dpkg-statoverride --add root wireshark 750 /usr/bin/dumpcap
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 750 /usr/bin/dumpcap #ewentualnie
sudo setcap CAP_NET_RAW,CAP_NET_ADMIN,CAP_DAC_OVERRIDE+eip /usr/bin/dumpcap
Po przelogowaniu się nasz_user może uruchamiać TSharka bez sudo.

Logowanie komunikatów firewalla

Domyślnie wszystkie komunikaty wg konfiguracji iptables przedstawionej w poprzednim poście trafiają do pliku /var/log/syslog. Jeżeli chcemy, aby logi firewalla znalazły się w osobnym pliku, modyfikujemy skrypt uruchamiający firewalla:
# Utworzenie łańcucha DROP.
iptables -N drop-and-log-it
iptables -A drop-and-log-it -j LOG --log-level debug --log-prefix "droplog: "
iptables -A drop-and-log-it -j REJECT

- najważniejsza jest linia druga, która każe poprzedzać każdy komunikat prefiksem "droplog: ", dzięki czemu łatwo stworzymy regułę filtrującą komunikaty zapory. Za logi odpowiedzialna jest usługa rsyslog, tworzymy więc plik /etc/rsyslog.d/20-iptables.conf:
:msg, contains, "droplog: " -/var/log/iptables.log
& ~

- nakazuje ona, przekierowanie wszystkich komunikatów zawierających wyrażenie "droplog: " do pliku /var/log/iptables.log. Pozostaje restart usługi: sudo service rsyslog restart.

Nmap

  • nmap -v -sT localhost [192.168.1.0/24] - wykrywanie otwartych portów na lokalnym hoście albo w całej sieci
  • Inne opcje: -v -sS - skanowanie TCP SYN; -v -sF - skanowanie TCP FIN; -v -O - skanowanie UDP; -v -sR - skanowanie TCP RPC

Procesy i inne

  • ps -ef [-eF, axf] - wyświetlenie procesów w różnych formatach
  • lsof -i -n -P - wyświetlenie połączeń sieciowych
  • netstat -tuap - wyświetlenie połączeń sieciowych
  • vmstat 5 - wyświetlanie statystyk użycia pamięci, przestrzeni wymiany itd. w odstępach 5-sekundowych

czwartek, 26 lipca 2012

Ubuntu Server 12.04 LTS - dokumentacja

Oto lista zasobów, z których warto skorzystać podczas konfigurowania i zarządzania Ubuntu Server 12.04 LTS przeznaczonym do obsługi średniej sieci lokalnej:

Różne

Linux - polecenia

Operacje na użytkownikach

Dodawanie/usuwanie użytkownika "jacek":
  • useradd -d /home/jacek -g users -G audio,video,optical -s /bin/bash - dodanie konta użytkownika
  • userdel -r jacek - usunięcie konta
Modyfikowanie grup użytkownika "jacek":
usermod -a -G wheel jacek
Dodawanie/usuwanie grupy "www-users":
groupadd www-users
groupdel www-users


Uprawnienia specjalne

  • chmod 1xyz /path/plik[katalog] - ustawienie bitu lepkości (ang. sticky bit), program po zakończeniu będzie przechowywany w pamięci, plik lub katalog będzie możliwy do usunięcia tylko przez właściciela.
  • chmod 2xyz /path/plik[katalog] - ustawienie sgid (ang. set group id) - ustawienie bitu grupy, program będzie wykonywany z uprawnieniami grupy, w katalogu z bitem sgid tworzone pliki i katalogi będą własnością grupy.
  • chmod 4xyz /path/plik[katalog] - ustawienie suid (ang. set user id) - ustawienie bitu użytkownika, program będzie wykonywany z uprawnieniami właściciela (często roota), w katalogu z bitem suid tworzone pliki i katalogi będą własnością właściciela.
  • chmod 6xyz /path/plik[katalog] - ustawienie bitów sgid i suid, program będzie wykonywany z uprawnieniami grupy i właściciela, w katalogu z bitem sgid i suid tworzone pliki i katalogi będą własnością grupy i właściciela.

Domyślne uprawnienia plików/katalogów:
umask - wyświetla domyślne uprawnienia, zazwyczaj 0002. Wartość umask łączona jest (koniunkcja logiczna AND) z domyślnymi wartościami dla plików (0666) i katalogów (0777), w wyniku odejmowania nadawane są uprawnienia do pliku/katalogu. Np. umask = 0002 oznacza domyślne uprawnienia 0664 dla plików i i 0775 dla katalogów.


Wyświetl listę użytkowników:
cat /etc/passwd | grep '/home' | cut -d : -f 1

Zmiana uprawnień
chmod 644 /path/plik
chmod 755 /path/katalog

Zmiana uprawnień wszystkich katalogów w katalogu /path/katalog:
find /path/katalog -type d -exec chmod 2775 {} \;

Zmiana uprawnień wszystkich plików w katalogu /path/katalog:
find /path/katalog -type f -exec chmod 0664 {} \;

Zmiana właściciela
chown jacek:users /path/plik
chown -R jacek:users /path/katalog


Sieć

  • cat /etc/services - lista standardowych usług sieciowych
  • lsof -i - lista otwartych połączeń sieciowych
  • lsof -i -n -P - lista otwartych i ustanowionych połączeń sieciowych
  • netstat 192.168.1.0/24 - podstawowe skanowanie sieci
  • netstat -lnptu - lista połączeń sieciowych
  • netstat -tuap - lista połączeń sieciowych
  • netstat -an|grep LISTEN [grep -v ^unix] - lista połączeń sieciowych
  • netstat -platune | grep 80 - lista uruchomionych usług na portach 80, 8080
  • nmap -v -A ip_address - skanowanie hosta
  • nmap -v -A -PN ip_address - skanowanie opornego hosta
  • nmap -sU [-sT,-sS] ip_adress - skanowanie przy użyciu protokołu UDP, TC
  • ss -ltp - lista nasłuchujących usług

Logi

  • dmesg [| grep ata] - przeglądanie logu systemowego
  • tail -n 100 /var/log/syslog - śledzenie logu systemowego

wtorek, 24 lipca 2012

Ubuntu Serwer 12.04 LTS - konfiguracja

Założenia wstępne

Serwer pełnił będzie funkcję routera, posiada dwa interfejsy sieciowe: eth0 (WAN, połączenie z internetem) adresowany przez DHCP, oraz eth1 (LAN, połączenie z siecią lokalną), adresowany statycznie. Na interfejsie WAN uruchomiona zostanie usługa NAT (translacja adresów). Na interfejsie LAN uruchomione zostaną następujące usługi: serwer DHCP, serwer DNS, Samba jako PDC (Primary Domain Controller), transparentne proxy z filtracją treści WWW (Squid + Dansguardian). Konfiguracja taka może zostać zastosowana np. w szkolnych pracowniach, czy po modyfikacjach uwzględniających w większym stopniu zagadnienia bezpieczeństwa w małych firmach.

Konfiguracja interfejsów

Zmian dokonujemy w pliku /etc/network/interfaces:
auto lo
iface lo inet loopback

# WAN interface
auto eth0
iface eth0 inet dhcp

# LAN interface
auto eth1
iface eth1 inet static
  address 192.168.19.1
  network 192.168.19.0
  netmask 255.255.255.0
  broadcast 192.168.19.255
  dns-nameservers 192.168.19.1
  dns-search mojadomena.org
  dns-domain mojadomena.org

Adres zewnętrzny (WAN, połączenie z Internetem) przyznawany będzie więc dynamicznie, natomiast wewnętrzny (LAN, połączenie z siecią lokalną) ustawiony został na 192.168.19.1. Użyteczne polecenia:
  • sudo nohup sh -c "ifdown eth0 && ifup eth0" - restart interfejsu eth0 ("sudo service networking restart" zostało odrzucone);
  • sudo ip addr - informacja o wszystkich interfejsach
  • sudo ifconfig - informacja o wszystkich interfejsach (obszerniejsza)


Konfiguracja routera i firewalla

Routing, a zarazem firewall zrealizowane zostanie za pomocą iptables. Ponieważ będziemy korzystać z usługi NAT, w pliku /etc/sysctl.conf trzeba odkomentować opcję: net.ipv4.ip_forward=1

W pliku /etc/mojserwer/firewall.sh (nazwa katalogu i pliku dowolna) tworzymy skrypt ładujący odpowiednie reguły:
#!/bin/bash
echo -e "Ładowanie reguł iptables...\n\n"
#Nazwa interfejsu LAN
INTIF="eth1"
# Adres sieci LAN
INTNET="192.168.19.0/24"
# Adres IP interfejsu LAN
INTIP="192.168.19.1"

# Nazwa interfejsu WAN
EXTIF="eth0"
# Adres IP interfejsu WAN (wykryty)
EXTIP="`/sbin/ifconfig $EXTIF | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"

UNIVERSE="0.0.0.0/0"

# Odkomentowana opcja w /etc/sysctl.conf, więc tu może być zakomentowane
#echo 1 > /proc/sys/net/ipv4/ip_forward

# Wyczyszczenie wszystkich łańcuchów i reguł, określenie domyślnej polityki odrzucania pakietów (DROP).
iptables -P INPUT DROP
iptables -F INPUT
iptables -P OUTPUT DROP
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -F -t nat
if [ "`iptables -L | grep drop-and-log-it`" ]; then
   iptables -F drop-and-log-it
fi
iptables -X
iptables -Z

# Utworzenie łańcucha DROP.
iptables -N drop-and-log-it
iptables -A drop-and-log-it -j LOG --log-level info
iptables -A drop-and-log-it -j REJECT

# Reguły INPUT
# Wszystkie połączenia z localhost
 iptables -A INPUT -i lo -j ACCEPT
# Odrzucenie połączeń podszywających się pod lokalne
 iptables -A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j drop-and-log-it
# Protokół ICMP
 iptables -A INPUT -i $INTIF -p icmp -s $INTNET -d $UNIVERSE -j ACCEPT
 iptables -A INPUT -i $EXTIF -p icmp -s $UNIVERSE -d $EXTIP -j ACCEPT
# Połączeń zwrotne do serwera maskarady na interfejsie LAN
 iptables -A INPUT -i $INTIF -s $INTNET -d $INTIP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Komunikaty ICMP: ping i echo
 iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 7 -j ACCEPT
 iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 7 -j ACCEPT
# Zapytania DNS
 iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 53 -j ACCEPT
 iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 53 -j ACCEPT
# Usługi Samby
 iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 135 -j ACCEPT
 iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 139 -j ACCEPT
 iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 445 -j ACCEPT
 iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 137 -j ACCEPT
 iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 138 -j ACCEPT
# Protokół SSH
 iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 22 -j ACCEPT
# Serwer proxy Squid na interfejsie LAN, port 3128
 iptables -A INPUT -i $INTIF -p tcp --dport 3128 -j ACCEPT
# Squid3 transparent bez Dansguardiana - trzeba wtedy odkomentować
#iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 3128
# Dansguardian + Squid3 transparent proxy
 iptables -A INPUT -i $INTIF -p tcp --dport 8080 -j ACCEPT
 iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 8080

# Połączenia przychodzące na interfejs WAN
# Połączenia zwrotne do serwera maskarady na interfejsie WAN
 iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Komunikaty ICMP: ping i echo.
 iptables -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --dport 7 -j ACCEPT
 iptables -A INPUT -i $EXTIF -p udp -s $UNIVERSE -d $EXTIP --dport 7 -j ACCEPT

# Odrzucanie i logowanie wszystkich innych połączeń przychodzących
 iptables -A INPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it

# Reguły OUTPUT
# Odrzucanie połączeń do sieci LAN z WAN
 iptables -A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j drop-and-log-it
# Wszystkie połączenia localhost
 iptables -A OUTPUT -o lo -j ACCEPT
# Zezwolenie dla LAN
 iptables -A OUTPUT -o $INTIF -d $INTNET -j ACCEPT
# Zezwolenie na DHCP reply typu broadcast - dla MS Visty
iptables -A OUTPUT -o $INTIF -p udp -s $INTIP --sport 67 -d $UNIVERSE --dport 68 -j ACCEPT
# Zezwolenie dla WAN
 iptables -A OUTPUT -o $EXTIF -j ACCEPT

# Odrzucanie i logowanie wszystkie innych połączeń wychodzących
 iptables -A OUTPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it

# FORWARD: Włączenie routowania, tj. usługi NAT, zwanej maskaradą, czyli IMPASQ.
# Routing na interfejsie WAN
 iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
# Routowanie ustanowionych połączeń
 iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Odblokowanie poszczególnych usług
# Protokół ICMP
 iptables -A FORWARD -i $INTIF -p icmp -j ACCEPT
# Porty wysokie
 iptables -A FORWARD -i $INTIF -p tcp --dport 1024:65535 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 1024:65535 -j ACCEPT
# Komunikaty ICMP: ping, echo
 iptables -A FORWARD -i $INTIF -p tcp --dport 7 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 7 -j ACCEPT
# Usługa DNS
 iptables -A FORWARD -i $INTIF -p tcp --dport 53 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 53 -j ACCEPT
# Protokół SSH
 iptables -A FORWARD -i $INTIF -p tcp --dport 22 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 22 -j ACCEPT
# HTTP-FORWARD-OK
# HTTP -- jeśli wyłączony jest squid i dansguardian, poniższe trzeba odkomentować
# iptables -A FORWARD -i $INTIF -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -i $INTIF -p udp --dport 80 -j ACCEPT
# HTTPS
 iptables -A FORWARD -i $INTIF -p tcp --dport 443 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 443 -j ACCEPT
# FTP
 iptables -A FORWARD -i $INTIF -p tcp --dport 20:21 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 21 -j ACCEPT
# Poczta
 iptables -A FORWARD -i $INTIF -p tcp --dport 25 -j ACCEPT # smtp
 iptables -A FORWARD -i $INTIF -p tcp --dport 110 -j ACCEPT # pop3
 iptables -A FORWARD -i $INTIF -p tcp --dport 143 -j ACCEPT # imap
 iptables -A FORWARD -i $INTIF -p tcp --dport 465 -j ACCEPT # legacy secure SMTP
 iptables -A FORWARD -i $INTIF -p tcp --dport 587 -j ACCEPT # smtp Submission
 iptables -A FORWARD -i $INTIF -p tcp --dport 993 -j ACCEPT # imap ssl
 iptables -A FORWARD -i $INTIF -p tcp --dport 995 -j ACCEPT # pop3s
# Odrzucanie i logowanie wszystkich pozostałych połączeń. 
 iptables -A FORWARD -j drop-and-log-it
echo -e "Ładowanie reguł iptables zakończone!\n\n"


Plikowi należy nadać prawa do wykonywania: chmod a+x /etc/mojserwer/firewall.sh. Aby reguły były wczytywane podczas startu systemu w pliku /etc/rc.local umieszczamy wywołanie skryptu:

# Start firewalla
cd /etc/mojserwer/
./init_firewall.sh
#


Użyteczne polecenia:
  • sh /etc/rc.local - uruchomienie (restart) firewalla i routingu;

Serwer DHCP

Uzupełnienie: tandem isc-dhcp-server + bind można zastąpić usługą Dnsmasq.
Instalacja (wersja 4.1): apt-get install isc-dhcp3-server

Konfiguracja

W pliku /etc/default/isc-dhcp-server ustawiamy interfejs, na którym ma działać serwer: INTERFACES="eth1"

W pliku /etc/dhcp/dhcpd.conf definiujemy ustawienia globalne i podsieci:
ddns-update-style none;
option domain-name "mojadomena.org";
option domain-name-servers mojserwer.mojadomena.org;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.19.0 netmask 255.255.255.0 {
  range 192.168.19.100 192.168.19.200;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.19.255;
  option routers 192.168.19.1;
# DNS server
  option domain-name-servers 192.168.19.1;
  option domain-name "mojadomena.org";
# WINS server
  option netbios-name-servers 192.168.19.1;
}


Jak widać zdefiniowano podsieć LAN 192.168.19.0/24, w której serwer będzie przyznawał adresy w zakresie 192.168.19.100-192.168.19.200. Określono też domyślny adres naszego serwera, czyli 192.168.19.1, udostępniającego usługi routera, DNS i WINS. Uwaga: dopóki nie skonfigurujemy usługi DNS na serwerze, stacje nie będą mogły łączyć się z Internetem przy użyciu nazw domenowych. Na czas konfiguracji usługi DNS można podać adresy zewnętrznych serwerów DNS (np. swojego ISP lub open DNS), np.:

option domain-name-servers 208.67.222.222,208.67.220.220;

Użyteczne polecenia:
  • sudo service isc-dhcp-server start (restart) - uruchomienie (restart) serwera dhcp

Squid

Instalacja: sudo apt-get install squid3

Konfiguracja

Przed utworzeniem pliku konfiguracyjnego warto zmienić nazwę oryginalnego pliku, który zawiera opis wszystkich opcji, natomiast właściwy plik utworzyć od początku:

sudo mv /etc/squid3/squid.conf /etc/squid3/squid.conf.org
sudo touch /etc/squid3/squid.conf


Zawartość pliku:

acl all src
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 192.168.19.0/24 #Opis sieci LAN
acl LAN src 192.168.19.0/24 #Opis sieci LAN
acl safeports port 21 70 80 210 280 443 488 563 591 631 777 873 901 81 3128 1025-65535
acl sslports port 443 563 81 873 2087 10000
acl purge method PURGE
acl connect method CONNECT

follow_x_forwarded_for allow localhost

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !safeports
http_access deny CONNECT !sslports
http_access allow localhost
http_access allow localnet
http_access allow LAN
http_access deny all

icp_access allow localnet
icp_access deny all

# Normalny proxy
# http_port 3128
# Transparent proxy
http_port 3128 intercept

# Rozmiar cache'u
cache_mem 8 MB
maximum_object_size_in_memory 512 KB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_dir aufs /home/cache 8000 14 256
maximum_object_size 16 MB
cache_swap_low 93
cache_swap_high 97

# Logi
access_log /var/log/squid3/access.log
cache_log  /var/log/squid3/cache.log
cache_store_log none
logfile_rotate 5
log_icp_queries off

# TIMEOUTS
forward_timeout 240 second
connect_timeout 30 second
peer_connect_timeout 5 second
read_timeout 600 second
request_timeout 60 second
shutdown_lifetime 10 second

Przygotowanie katalogu cache:
sudo mkdir /home/cache
sudo chmod 777 /home/cache
sudo chown proxy:proxy /home/cache


Utworzenie katalogu cache: sudo squid3 -z - nie powinno być żadnych błędów.

Użyteczne polecenia:
  • sudo service squid3 start (restart) - uruchomienie (restart) squida;

Dansguardian

Instalacja: sudo apt-get install dansguardian

Konfiguracja

W pliku /etc/dansguardian/dansguardian.conf zmieniamy niewiele:
language = 'polish'
filterip =192.168.19.1 #ip, na którym ma nasłuchiwać dansguardian
#accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'
forwardedfor = on

Jak widać, linię accessdeniedaddress zakomentowujemy, ostatnia opcja umożliwia wgląd w źródłowe IP klienta. W pliku /etc/dansguardian/dansguardianf1.conf opisującym domyślną grupę użytkowników (czyli wszystkich) ustalamy reguły filtrowania:

naughtynesslimit = 150 #ustawienie wrażliwości filtra

Dansguardian domyślnie nasłuchuje na porcie 8080, proxy możemy więc konfigurować ręcznie w przeglądarkach wybranych klientów. Jeżeli jednak cały ruch ma przechodzić przez filtr automatycznie (bez wiedzy użytkoników), w skrypcie firewalla (patrz wyżej) muszą znaleźć się wpisy:

 iptables -A INPUT -i $INTIF -p tcp --dport 8080 -j ACCEPT
 iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 8080

- które przekierowują cały ruch http do Dansguardiana. Dodatkowo można zablokować port 3128, na którym nasłuchuje Squid, żeby uniemożliwić użytkownikom obchodzenie filtra.

Użyteczne polecenia:
  • sudo service dansguardian start (restart) - uruchomienie (restart) usługi;
  • sudo dansguardian -g - polecenie ponownego wczytania konfiguracji, np. po dokonaniu poprawek w listach;

Bind - serwer DNS

Instalacja i konfiguracja Binda jako lokalnego serwera DNS jest opcjonalna. Jeżeli ją pominiemy, pamiętać trzeba o umieszczeniu poprawnych adresów zewnętrznych serwerów DNS w konfiguracji usługi DHCP. Minusem będzie brak możliwości odwoływania się do innych komputerów w sieci lokalnej za pomocą ich nazw. Warto więc rozważyć ewentualne zastąpienie tandemu Bind + ISC DHCP alternatywą, czyli usługą Dnsmasq.

Instalacja: sudo apt-get install bind9

Konfiguracja

Ustawień dokonujemy w plikach zawartych w katalogu /etc/bind. Podstawowe opcje ustawiamy w /etc/bind/named.conf.options:

options {
 directory "/var/cache/bind";
 forwarders {
  208.67.222.222;
  208.67.220.220;
 };
 dnssec-validation yes;
 auth-nxdomain no;
 listen-on { 192.168.19.1; 127.0.0.1; };
 listen-on-v6 { any; };
};


W pliku /etc/bind/named.conf.local definiujemy naszą domenę lokalną:

zone "mojadomena.org" {
  type master;
  file "/etc/bind/db.mojadomena.org";
};

zone "19.168.192.in-addr.arpa" {
  type master;
  notify no;
  file "/etc/bind/db.192";
};


W zdefiniowanych powyżej plikach konfiguracyjnych trzeba wprowadzić odpowiednie rekordy DNS. W pliku /etc/bind/db.mojadomena.org opisujemy naszą domenę:

$TTL 604800
@    IN     SOA     mojserwer.mojadomena.org.    admin.mojadomena.org. (
                    3 ; Serial
                    604800 ; Refresh
                    86400 ; Retry
                    2419200 ; Expire
                    604800 ); Negative Cache TTL 

@           IN      NS    mojserwer.mojadomena.org.
localhost   IN      A     127.0.0.1
mojserwer   IN      A     192.168.19.1
dns1        IN      CNAME mojserwer


W pliku /etc/bind/db.192 konfigurujemy domenę odwrotną:

$TTL 604800
@    IN     SOA     mojserwer.mojadomena.org.    admin.mojadomena.org. (
                    3 ; Serial
                    604800 ; Refresh
                    86400 ; Retry
                    2419200 ; Expire
                    604800 ); Negative Cache TTL 

@    IN     NS      mojserwer.
1    IN     PTR     mojserwer.mojadomena.org.


Powyższa konfiguracja ma zapewniać serwer autorytatywny dla domeny lokalnej z funkcją buforowania zapytań, dlatego trzeba jeszcze zadbać, aby wszystkie zapytania DNS na serwerze kierowane były do serwera lokalnego (buforującego). W pliku /etc/dhcp/dhclient.conf powinniśmy mieć wpisy:
supersede domain-name "mojadomena.org";
prepend domain-name-servers 127.0.0.1;
- dzięki czemu w pliku /etc/resolv.conf znajdzie się właściwy wpis: nameserver 127.0.0.1 oraz search mojadomena.org.

Użyteczne polecenia:
  • sudo service bind9 start (restart) - uruchomienie (restart) serwera DNS;
  • named-checkzone example.com /etc/bind/db.mojadomena.org - sprawdzenie poprawności konfiguracji domeny lokalnej;
  • named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192 - sprawdzenie poprawności konfiguracji domeny odwrotnej;
  • dig -x 127.0.0.1 - sprawdzenie działania serwera na interfejsie lokalnym;
  • dig google.pl - testowanie serwera, należy powtórzyć co najniej dwa razy, aby sprawdzić czas odpowiedzi, czyli działanie funkcji buforowania;
  • tail -f /var/log/syslog - śledzenie ewentualnych błędów;

Samba

Instalacja: sudo apt-get install samba

Przed edycją pliku konfiguracyjnego warto zrobić jego kopię: sudo cp /etc/samba/smb.conf.master /etc/samba/smb.conf.org. Edytujemy plik /etc/samba/smb.conf.master:

[global]
 workgroup = mojadomena.org
 server string = %h server (Samba, Ubuntu)
 interfaces = eth1
 bind interfaces only = Yes
 map to guest = Bad User
 pam password change = Yes
 passwd program = /usr/bin/passwd %u
 passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
 unix password sync = Yes
 syslog = 0
 log file = /var/log/samba/log.%m
 max log size = 100
 add machine script = /usr/sbin/useradd -N -g machines -c Machine -s /bin/false -d /dev/null %u
 logon script = scripts\logon.cmd
 logon path = \\%L\profiles\%U
 logon drive = H:
 logon home = \\%L\%U
 domain logons = Yes
 os level = 35
 preferred master = Yes
 domain master = Yes
 dns proxy = No
 usershare allow guests = Yes
 panic action = /usr/share/samba/panic-action %d
 idmap config * : backend = tdb

[homes]
 comment = Katalogi domowe
 valid users = %S
 read only = No
 create mask = 0700
 directory mask = 0700
 browseable = No

[netlogon]
 comment = Network Logon Service
 path = /srv/samba/netlogon
 guest ok = Yes
 browseable = No

[profiles]
 comment = Users profiles
 path = /srv/samba/profiles
 read only = No
 create mask = 0600
 directory mask = 0700
 profile acls = Yes
 browseable = No

[printers]
 comment = All Printers
 path = /var/spool/samba
 create mask = 0600
 guest ok = Yes
 printable = Yes
 print ok = Yes
 browseable = No

[print$]
 comment = Printer Drivers
 path = /var/lib/samba/printers

[public]
 comment = Katalog publiczny
 path = /home/public
 read only = No
 guest ok = Yes

[materialy]
 comment = Zasoby dla uczniow
 path = /home/materialy
 guest ok = Yes

Tworzymy katalogi na profile mobilne oraz katalogi udostępniane:
sudo mkdir -m 1777 -p /srv/samba/netlogon
sudo mkdir -m 1777 -p /srv/samba/profiles
sudo mkdir -m 777 -p /srv/samba/public
sudo mkdir -m 755 -p /srv/samba/materialy


Dla każdego użytkownika i każdej maszyny, którą chcemy podłączyć do PDC (kontrolera domeny) musimy utworzyć konta. Ale najpierw utworzymy i zmapujemy w domenie przydatne grupy:
sudo addgroup -gid 200 ntadmins
sudo addgroup -gid 201 machines

sudo addgroup -gid 202 designers
sudo addgroup -gid 203 nobody
net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d
net groupmap add ntgroup="Domain Users"  unixgroup=users rid=513 type=d
net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d
net groupmap add ntgroup="Designers" unixgroup=designers type=d


Dodanie konta dla maszyny:
/usr/bin/useradd -g machines -d /dev/null -c "machine nickname" -s /bin/false test$
passwd -l test$
smbpasswd -a -m test


Dodanie konta dla użytkownika, dodanie użytkownika do przykładowych grup, dodanie użytkownika do kont samby:
sudo adduser juzio
sudo groupmod -a -G users,designers juzio
sudo smbpasswd -a juzio


Logi samby znajdziemy w /var/log/samba.

Podręczne polecenia:
  • sudo service smbd start (restart) - start (restart) podstawowej usługi
  • sudo service nmbd start (restart) - start (restart) usługi przeglądania
  • sudo pdbedit -L -v - podgląd użytkowników Samby

Vnstat

Instalacja i konfiguracja: sudo apt-get install vnstat
sudo vnstat -u -i eth0
sudo vnstat -u -i eth1

Przeglądanie statystyk:
sudo vnstat przełącznik
  • -q - ogólne
  • -s - krótkie
  • -h - ostatnie 12 godzin
  • -d - ostatnie dni
  • -m - miesiące
  • -l - statystyki w czasie rzeczywistym

Optymalizacja

Przede wszystkim podana wyżej konfiguracja Squida i Dansguardiana działa, ale należy dostosować ją do konkretnych warunków, czyli warto obserwować logi:
tail -f /var/log/squid3/access.log oraz tail -f /var/log/dansguardian/access.log
Warto zastanowić się, które strony są zaufane/potrzebna, a które należy blokować i dopisać je do plików odpowiednio /etc/dansguardian/lists/exceptionsitelist oraz /etc/dansguardian/lists/bannedsitelist.

Na serwerze nie powinny działać żadne usługi, które nie są na nim niezbędne, więc co można usunąć?
  • sudo apt-get purge whoopsie - usunięcie narzędzia raportowania błędów (instalowane automatycznie)
  • sudo apt-get purge update-notifier-common - usunięcie zbędnych na serwerze powiadomień o aktualizacjach
  • sudo apt-get purge apport apport-symptoms python-apport python-problem-report - usunięcie usługi tworzącej raporty awarii

Aktualizacja: powyższa konfiguracja działa również na Debianie (Wheezy), przy czym ISC DHCP Server + Bind zastąpiono pakietem Dnsmasq.

Zobacz: Dokumentacja

wtorek, 17 lipca 2012

Ubuntu 12.04 LTS - sieć

Polecenia sieciowe

ip addr - wyświetla dostępne interfejsy

Konfiguracja interfejsów

Przechowywana jest w pliku/etc/network/interfaces. Dla jednej karty sieciowej eth0 otrzymującej adres z serwera DHCP wpisy powinny wyglądać następująco:
# definicja pętli zwrotnej
auto lo
iface lo inet loopback
#definicja karty sieciowej
auto eth0
iface eth0 inet dhcp


Zmiana nazwy interfejsu

Lista interfejsów zapisana jest w pliku /etc/udev/rules.d/70-persistent-net.rules. Na końcu każdego wpisu znajduje się wyrażenie NAME="eth1", w którym definiujemy nazwę interfejsu.

Serwer DHCP

sudo apt-get install dhcp3-server - instalacja
W pliku /etc/default/isc-dhcp-server określamy na jakim interfejsie ma działać serwer, np. INTERFACES="eth1". W pliku /etc/dhcp/dhcpd.conf definiujemy konfigurację serwera:
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.254;
option domain-name "mojadomena.org";

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;
}

- pierwsze dwie linie określają minimalny i maksymalny okres dzierżawy adresu IP, pozostałe opcje ustalają parametry sieci, wpisy range definiują dostępne pule adresów.

piątek, 13 lipca 2012

Rezpozytoria Ubuntu 12.04

Podstawowe

W pliku /etc/apt/sources.list:
deb http://pl.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
deb http://pl.archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://pl.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse
deb http://pl.archive.ubuntu.com/ubuntu precise-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse
deb http://archive.canonical.com/ubuntu precise partner
deb http://extras.ubuntu.com/ubuntu precise main


Dodatkowe

Można dopisać do pliku /etc/apt/sources.list:
deb http://packages.medibuntu.org/ precise free non-free
deb http://linux.dropbox.com/ubuntu precise main
deb http://deb.opera.com/opera/ stable non-free


Po wydaniu komendy sudo apt-get update wyświetlą się błędy GPG, należy dodać klucze publiczne poszczególnych repozytoriów:
sudo apt-get install medibuntu-keyring
wget -O - http://deb.opera.com/archive.key | sudo apt-key add -
sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 5044912E


Aktualizacja i instalacja oprogramowania

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install opera dropbox

Błędy

Po zainstalowaniu dropboksa podczas kolejnej próby zaktualizowania reopozytoriów może pojawić się błąd W: Duplicate sources.list.... Należy usunąć wpis wyświetlonego repozytorium z pliku /etc/apt/sources.list, ponieważ został on dodany w osobnym pliku w katalogu /etc/apt/sources.list.d.

poniedziałek, 9 lipca 2012

Nginx + php5 + php5-fpm

Instalacja na Debianie (testing)/Ubuntu

sudo apt-get install nginx php5 php5-gd php5-sqlite php5-fpm

Instalacja na Bridge Linux/Archlinux

sudo pacman -S nginx php php-gd php-sqlite php-fpm

W /etc/php5/fpm/php.ini ustawiamy opcje dla php, np. włączamy wyświetlanie błędów itp. W Bridge Linux edytujemy plik /etc/php/php.ini i wyłączamy jedną opcję, aby otrzymać: #open_basedir = /srv/http/...

W /etc/php5/fpm/pool.d/www.conf:
listen = /var/run/php5-fpm.sock
- w Ubuntu 12.04 jest domyślnie listen = 127.0.0.1:9000, czyli ustawienie dla php5-cgi, a nie php5-fpm, dlatego trzeba zmienić. W Ubuntu 13.04 nic nie trzeba zmieniać. W Bridge'u/Archu cała konfiguracja zawarta jest w /etc/php/php-fpm.conf i nic nie trzeba zmieniać, ale ścieżka gniazda ma inną postać: listen = /run/php-fpm/php-fpm.sock.

W /etc/nginx/sites-available tworzymy plik (wpis) definiujący nasz serwer i zapisujemy go (w Debianie, Ubuntu) pod dowolną nazwą, np. local.org. W Bridge'u/Archu edytujemy plik /etc/nginx/nginx.conf. Przykładowa zawartość:
server {
   listen 80;
   server_name localhost;
   charset utf-8;
   access_log off;
   root /home/lolek/public_html;
   index index.php;

   location / {
      try_files       $uri $uri/ /index.php;
#lub: try_files       $uri $uri/ /index.php?id=$uri&amp;$args
   }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    location ~ /\.ht { deny all; }
    location ~ /\. { deny all; }
}
- przy czym najważniejszy jest parametr root, który zawiera ścieżkę do katalogu z plikami serwisu, oraz sekcja location ~.\.php$ definiująca sposób przetwarzania wywołań php.
W przypadku Bridge'a/Archa pamiętamy o wprowadzeniu poprawnej ścieżki do gniazda (!), czyli unix:/run/php-fpm/php-fpm.sock. Zmieniamy też fastcgi_params na fastcgi.conf.

Usuwamy dowiązanie /etc/nginx/sites-enabled/default i tworzymy nowe:
ln -s /etc/nginx/sites-available/lolcal.org /etc/nginx/sites-enabled/default

Na koniec restartujemy usługi:
invoke-rc.d php5-fpm restart; invoke-rc.d nginx restart - w Debianie
service php5-fpm restart; service nginx restart - w Ubuntu
rc.d restart php-fpm; rc.d restart nginx - w Bridge Linux

Uwaga: powyższa konfiguracja jest bardzo podstawowa i służyć ma do lokalnych testów, nie uwzględnia więc zagadnień bezpieczeństwa, zwłaszcza związanych z możliwością wykonywania skryptów php.
Ponieważ sporo sieciowych tutoriali zawiera błędy i/lub uproszczenia, poprawnych (czyt. bezpiecznych) konfiguracji trzeba szukać u źródła, czyli na stronie wiki projektu Nginx.

Ubuntu 12.04 LTS - konfiguracja

Wszystkie usługi w oknie "Programy startowe"

sudo sed -i 's/NoDisplay=true/NoDisplay=false/g' /etc/xdg/autostart/*.desktop

Wyłączenie Apport

Apport to system raportowania błędów w działaniu aplikacji.
W /etc/default/apport enabled="0" i ew.: sudo service apport stop

Na dobrą sprawę można odinstalować (zobacz niżej).

Wyłączenie Avahi

Avahi to mechanizm automatycznej konfiguracji sieci i usług sieciowych.
W /etc/default/avahi-daemon: AVAHI_DAEMON_DETECT_LOCAL=0
W /etc/init/avahi-daemon.conf: start on (never and filesystem and started dbus)

Wyłączenie listy użytkowników na ekranie logowania

W /etc/lightdm/lightdm.conf: greeter-hide-users=true

Automatyczne montowanie partycji

sudo blkid - wyświetla unikalne identyfikatory partycji (UUID)
W /etc/fstab:
UUID=3E4B8D313D841927 /media/Dane ntfs-3g defaults,allow-other,locale=pl_PL.UTF-8 0 0
UUID=BD26-FD52 /media/Dane2 vfat defaults,rw,nosuid,nodev,uid=1000,fmask=0000,dmask=0000,codepage=437,iocharset=iso8859-2,shortname=mixed,utf8=1,showexec,flush,uhelper=udisks 0 0

- linia pierwsza dla partycji ntfs, druga dla partycji fat32. W przypadku tej ostatniej pełny dostęp przyznajemy pierwszemu utworzonemu użytkownikowi w systemie o identyfikatorze 1000.

Usuwanie zbędnych pakietów

  • sudo apt-get purge fonts-kacst fonts-kacst-one fonts-khmeros-core fonts-lao fonts-nanum fonts-tlwg-* ttf-indic-fonts-core ttf-punjabi-fonts - zbędne czcionki;
  • sudo apt-get purge whoopsie apport apport-symptoms - usuwamy narzędzie zgłaszające błędy oraz usługę tworzącą raporty awarii;
  • sudo apt-get purge brltty


wtorek, 3 lipca 2012

Pacman

Podstawy

Pacman to menedżer pakietów w dystrybucjach opartych na Archu.

W /etc/pacman.d/mirrorlist:
Server = http://archlinux.limun.org/$repo/os/$arch
Server = http://mirror.chmuri.net/archmirror/$repo/os/$arch
Server = ftp://ftp5.gwdg.de/pub/linux/archlinux/$repo/os/$arch
Server = http://archlinux.mirror.dkm.cz/pub/archlinux/$repo/os/$arch
Server = http://mirror.datacenter.by/pub/archlinux/$repo/os/$arch


Aktualizacja: szczerze mówiąc status repozytoriów najlepiej sprawdzać na tej stronie. Niestety, od czasu do czasu potrzebna jest zmiana repo.

Typowe polecenia

  • pacman -Syu - synchronizacja bazy i upgrade systemu
  • pacman -Ss [-Qs] nazwa - wyszukiwanie pakietu [zainstalowanego]
  • pacman -Si [-Qi] nawza - informacje o pakiecie [zainstalowanym]
  • pacman -Qdt nazwa - lista osieroconych pakietów
  • pacman -S nazwa - instalacja pakietu
  • pacman -Sd nazwa - instalacja pakietu bez sprawdzania zależności
  • pacman -Rns - usunięcie pakietu wraz z zależnościami i plikami konfiguracyjnymi
  • pacman -Sg - lista grup pakietów
  • pacman -Sg grupa - zawartość grupy pakietów


Bridge Linux 2012.5 - konfiguracja

Po instalacji

Ponieważ w Archu następuje migracja do systemu zarządzania systemd, poniższa konfiguracja rc.conf uznana została za przestarzałą, ale jeszcze działa.
W /etc/rc.conf:
HARDWARECLOCK="UTC"
TIMEZONE="Europe/Warsaw"
KEYMAP="pl"
CONSOLEMAP="pl"
LOCALE="pl_PL.UTF8"
DAEMON_LOCALE="yes"
HOSTNAME=nazwa_maszyny

- w przypadku, gdy mamy oprócz Linuksa mamy zainstalowany Windows XP, UTC trzeba zmienić na localtime (jeżeli mamy Windows Vista lub 7 pozostawiamy UTC).

Nowy rc.conf (po upgradzie powinien znajdować się w pliku /etc/rc.conf.pacnew)zawiera tylko ustawienia usług, które mają uruchamiać się podczas startu systemu, np.: DAEMONS=(dbus networkmanager syslog-ng @alsa), a także ustawienia podsystemu RAID, LVM  oraz sieci (adresowanie statyczne). Zgodne z systemd ustawienia zostały przeniesione do osobnych plików. Ustawień zegara dokonujemy w pliku /etc/adjtime:
0.000000 0 0.000000
0
LOCAL # lub UTC

Po utworzeniu pustego pliku warto wydać polecenie: sudo hwclock --set --date="2012-08-01 16:00:00" --localtime [--utc], która ustawi odpowiednie wartości.
Strefa czasowa definiowana jest przez plik /etc/localtime, który jest dowiązaniem do pliku odpowiedniej strefy: /usr/share/zoneinfo/Europe/Warsaw.
Ustawień języka, klawiatury konsoli dokonujemy w pliku /etc/vconsole.conf:
KEYMAP=pl
FONT=lat2-16
FONT_MAP=

Ustawienia języka przechowywane są w pliku /etc/locale.conf:
LANG=pl_PL.UTF-8

Dodatkowo w pliku /etc/locale.gen należy odkomentować odpowiednie wpisy:
en_US.UTF-8 UTF-8
pl_PL.UTF-8 UTF-8

Nazwę komputera umieszczamy w pliku /etc/hostname:
mojkomputer
i pliku /etc/hosts:
127.0.0.1 localhost.localdomain localhost mojhost
::1  localhost.localdomain localhost mojhost

Jeżeli jakiś plik nie istnieje, tworzymy go np. za pomocą polecenia sudo nano /etc/nazwapliku, wpisujemy zawartość i zapisujemy na dysku (CTRL+O, CTRL+X).

W /etc/pacman.conf:
SigLevel=Never //brak sprawdzania autentyczności pakietów
- i dodanie repozytorium dla mate-desktop:
[mate]
Server = http://packages.mate-desktop.org/repo/archlinux/$arch


Upgrade systemu

Aktualizacja systemu zainstalowanego w odległym czasie od daty wydania wersji Bridge Linux 2012.5 nastręcza kilka problemów. Ich rozwiązanie publikowane jest na stronie http://www.archlinux.org/news/. Ostatnio zadziałała następująca procedura:
sudo pacman -Sy
sudo pacman -S pacman
sudo pacman -Syu --ignore glibc filesystem #(to da błędy)
sudo rm /usr/lib/python3.2/site-packages/__pycache__/Reflector.cpython-32.pyc
sudo pacmn -Sd binutils gcc gcc-libs libtool
sudo pacman -S --force filesystem
sudo pacman -Syu --ignore glibc
sudo pacman -Su

Po zainstalowaniu nowego pacmana zaleca się utworzenie odpowiednich kluczy weryfikujących instalowane pakiety:
sudo pacman-key init
sudo --populate archlinux

Jeżeli podczas pierwszej z tych operacji generowanie klucza głównego trwa bardzo długo, w innej konsoli warto wydać polecenie ls -alR /, w miarę potrzeby kilkakrotnie. Po wydaniu drugiego z poleceń trzeba zaakceptować 5 kluczy naciskając "t" + ENTER. Pamiętać należy, że podana wyżej globalna opcja SigLevel=Never w pliku /etc/pacman.conf wyłącza weryfikowanie autentyczności pakietów.

Obsługa drukowania

sudo pacman -S cups cups-pdf ghostscript gsfonts hpoj gutenprint hplip splix

LibreOffice

sudo pacman -S libreoffice-base libreoffice-calc libreoffice-common libreoffice-draw libreoffice-gnome libreoffice-impress libreoffice-math libreoffice-writer hyphen hyphen-pl libmythes mythes-pl hunspell hunspell-pl

Mate-desktop

sudo pacman -S mate mate-extras [1 4 5 6 12]

Kodeki i flash

sudo pacman -S gstreamer0.10-plugins flashplugin

Katalogi użytkownika

sudo pacman -S xdg-user-dirs
- modyfikacja domyślnych nazw w /etc/xdg/user-dirs.default:
DESKTOP=Pulpit
DOWNLOAD=Pobrane
TEMPLATES=Szablony
PUBLICSHARE=Publiczne
DOCUMENTS=Dokumenty
MUSIC=Muzyka
PICTURES=Obrazy
VIDEOS=Wideo

Wydać należy jeszcze polecenie: xdg-user-dirs-update.
Generalnie w katalogu ~/.config powinny znaleźć się dwa pliki: user-dirs.dirs o zawartości:
XDG_DESKTOP_DIR="$HOME/Pulpit"
XDG_DOWNLOAD_DIR="$HOME/Pobrane"
XDG_TEMPLATES_DIR="$HOME/Szablony"
XDG_PUBLICSHARE_DIR="$HOME/Publiczny"
XDG_DOCUMENTS_DIR="$HOME/Dokumenty"
XDG_MUSIC_DIR="$HOME/Muzyka"
XDG_PICTURES_DIR="$HOME/Obrazy"
XDG_VIDEOS_DIR="$HOME/Wideo"
- oraz user-dirs.locale: pl_PL. Podczas pierwszego logowania do systemu Bridge kopiuje do katalogu domowego użytkownika zawartość /etc/skel. Zarówno w tym ostatnim folderze, jak i w katalogu domowym użytkownika utworzonego podczas instalacji można zmienić nazwy folderów ręcznie, np. mv Desktop Pulpit. Przed dokonaniem takich zmian wyloguj się ze środowiska graficznego.

Przeglądarka dokumentów pdf

sudo pacman -S evince
sudo pacman -S cairo

- na pytanie czy usunąć pakiet cairo-ubuntu odpowiadamy twierdząco.

Instalacja Gruba 2

sudo mv /boot/grub /boot/grub-legacy
sudo pacman -R grub sudo pacman -S grub-bios os-prober
sudo grub-install --directory=/usr/lib/grub/i386-pc --target=i386-pc --boot-directory=/boot --recheck --force /dev/sdaX
sudo grub-mkconfig -o /boot/grub/grub.cfg

- oczywiście parametr /dev/sdaX trzeba zastąpić wpisem /dev/sda - jeżeli instalujemy Gruba w MBR (master boot sector) pierwszego dysku, lub /dev/sda6 - jeżeli chcemy zainstalować w sektorze startowym partycji, na której zainstalowaliśmy Bridge'a, np. sda6.

Problemy

Jeżeli po instalacji i restarcie widzimy "nic", być może mamy trefną kartę Intela, ATI lub Nvidii, po naciśnięciu CTRL+ALT+DEL (restart) w menu Gruba naciskamy "e", aby przejść do edycji polecenia wczytującego jądro. Na końcu dodajemy parametr nomodeset. Po uruchomieniu i skonfigurowaniu systemu.


INIT: Id "x" respawning too fast: disabled for 5 minutes

W /etc/inittab:
x:5:respawn:/usr/sbin/lxdm >& /dev/nul ->
Uwaga: ta zmiana powoduje również automatyczne uruchamianie się graficznego menedżera logowania lxdm. Nota bene w tym samym pliku warto zmienić linię definiującą pierwszą konsolę:
c1:2345:respawn:/sbin/agetty --noclear -8 38400 tty1 linux
- dzięki czemu komunikaty pojawiające się podczas startu systemu nie zostaną wyczyszczone i po przełączeniu się ze środowiska graficznego do konsoli (CTRL+ALT+F1) będzie można je podejrzeć.

W /etc/lxdm/lxdm.conf:
session=/usr/bin/startxfce4
- w tym samym pliku można też ustawić temat, tło i inne opcje graficznego menedżera logowania lxdm.

W przypadku długiego uruchamiania się Thunara (domyślny menedżer plików w XFCE) w pliku /usr/share/gvfs/mounts/network.mount ustawiamy:
AutoMount=false
- dzięki czemu start programu nie będzie opóźniany przez sprawdzanie zasobów sieciowych.

Przydatne polecenia

  • mkinitcpio -p [nazwa_jądra] - tworzenie startowego obrazu jądra