LMS - LAN Management System 1.2

LMS Developers


Spis treści
1. Wstęp
1.1. Czym jest LMS
1.2. Autorzy
1.3. Licencja
1.4. Informacje dodatkowe
2. Instalacja i konfiguracja
2.1. Wstęp
2.2. Wymagania
2.3. Instalacja LMS
2.4. Instalacja serwera baz danych
2.5. Konfiguracja podstawowa
2.6. Prawa dostępu
2.7. Upgrade
3. Interfejs Użytkownika (LMS-UI)
3.1. Logowanie
3.2. Praca z LMS-UI
3.3. Dodatki
4. Skrypty
4.1. Instalacja
4.2. Lista dostępnych skryptów
4.3. Opis i konfiguracja
5. Generator plików konfiguracyjnych (lms-mgc)
5.1. Instalacja
5.2. Konfiguracja
5.3. Przykład zastosowania lms-mgc
6. A.L.E.C's LMS Daemon
6.1. Informacje podstawowe
6.2. Moduły
7. Dla dociekliwych
7.1. Drzewo katalogów
7.2. Struktura bazy danych
7.3. Format pliku konfiguracyjnego
7.4. Generowanie danych losowych
7.5. Poziomy dostępu
7.6. Ograniczenia
Spis tabel
4-1. Lista skryptów wykonywalnych
6-1. Lista modułów demona almsd
7-1. Drzewo katalogów LMS
Spis przykładów
4-1. Lms-notify: Przykładowy wyciąg 10 ostatnich operacji kasowych
4-2. Lms-notify: Przykład szablonu
5-1. Lms-mgc: Przykład instancji
7-1. Format opcji konfiguracyjnych

Rozdział 1. Wstęp

1.1. Czym jest LMS

"LMS" jest skrótem od "LAN Management System". Jest to zestaw aplikacji w PHP, C i Perlu, ułatwiających zarządzanie sieciami osiedlowymi (popularnie zwanymi Amatorskimi Sieciami Komputerowymi), korzystających z bazy danych MySQL lub PostgreSQL. Główne założenia to uzyskanie jakości usług oraz obsługi użytkowników na poziomie providera z prawdziwego zdarzenia. Najbardziej podstawowe cechy LMS to:

  • baza danych użytkowników (imię, nazwisko, adres, numer telefonu, uwagi i inne),

  • baza danych komputerów (adres IP, adres MAC),

  • baza danych sprzętu sieciowego (nazwa, ilość portów),

  • prowadzenie prostego rachunku operacji finansowych oraz stanu funduszów sieci,

  • różne taryfy abonamentowe,

  • wysyłanie pocztą elektroniczną upomnień do użytkowników,

  • automatyczne naliczanie opłat miesięcznych,

  • generowanie praktycznie jakiegokolwiek konfiga na podstawie danych o komputerach w bazie (przykładowe konfigi obejmują rc.masq na iptables, dhcpd.conf, oidentd_masq.conf, /etc/ethers, dns prosty i odwrotny, htb),

  • wizualizacja statystyk wykorzystania łącza.

Całość została wymyślona w ramach administracji ASK NetX i tam jest nieustannie rozwijana i poddawana testom.

LMS nie zastąpi Ci umiejętności jakie powinien mieć administrator. Jeśli nie potrafisz wykonać tak prostych czynność jak instalacja czy konfiguracja, prawdopodobnie nie będziesz umiał dostroić LMS do swojego systemu. Tak więc bez znajomości systemów U*IX się nie obejdzie.


1.2. Autorzy


1.2.2. Inni

LMS zawiera fragmenty następującego oprogramowania: phpMyAdmin, phpsysinfo, NewsPortal, procedury konwersji liczb na postać słowną autorstwa Piotra Klebana oraz przykłady kodu zawarte w Podręczniku PHP.


1.3. Licencja

Niniejszy program jest oprogramowaniem wolnodostępnym; możesz go rozprowadzać dalej i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez Fundację Wolnodostępnego Oprogramowania - według wersji 2-giej tej Licencji lub którejś z późniejszych wersji.

Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania bliższych informacji - Powszechna Licencja Publiczna GNU.

Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz Powszechnej Licencji Publicznej GNU; jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Angielski tekst tej licencji znajduje się tutaj.


1.4. Informacje dodatkowe

1.4.1. Kontakt z autorami

Najlepiej poprzez listę mailingową, na którą można się zapisać wysyłając pustego maila o temacie "subscribe lms" na adres ecartis@lists.rulez.pl, a maile wysyła się na adres lms@lists.rulez.pl.


1.4.2. Zgłaszanie błędów i pomysłów

Aby efektywnie zgłosić błąd lub nowy pomysł, najlepiej jest zapisać się na listę mailingową gdzie ktoś z autorów bądź użytkowników będzie miał szansę odpowiedzieć na pytania Cię nurtujące. Dostępny jest także dla testów BTS, gdzie można zgłaszać błędy po uprzedniej rejestracji. Raporty z BTS idą także na listę mailingową, więc najlepiej się zapisać, zgłosić błąd poprzez BTS, wysłać linka na listę i czekać na rozwój wydarzeń. Adres BTS to http://bts.rulez.pl.


1.4.3. Najnowsza wersja

Zawsze aktualną werjsę LMS można pobrać z repozytorium CVS za pomocą interfejsu www tutaj, lub klasycznie (dostęp anonimowy, puste hasło):

cvs -d :pserver:cvs@cvs.rulez.pl:/home/cvsroot login
cvs -d :pserver:cvs@cvs.rulez.pl:/home/cvsroot co lms
cvs -d :pserver:cvs@cvs.rulez.pl:/home/cvsroot logout

Repozytorium CVS można także przeglądać przy pomocy interfejsu WWW pod adresem http://cvs.rulez.pl.


1.4.4. Historia zmian

Informacje o zmianach jakie zaszły w kolejnych wersjach LMS zawarte są w pliku ChangeLog.


Rozdział 2. Instalacja i konfiguracja

2.1. Wstęp

LMS składa się z kilku modułów, podstawowym modułem jest LMS-UI (interfejs użytkownika). Jest on w całości napisany w PHP i do pracy wymaga bazy danych (właściwie to każdy moduł wymaga bazy danych). To właśnie w LMS-UI wykonujemy wszystkie czynności, reszta modułów ma tylko za zadanie zautomatyzować pracę LMS.

LMS to także zestaw skryptów w języku PERL, i to właśnie te skrypty wymagają abyś posiadał interpreter tego języka. Jeśli będziesz chciał używać tych skryptów, musisz mieć PERLa. Skrypty pozwalają m.in. na comiesięczne naliczanie opłat abonamentowych bądź wysyłanie upomnień. Jest jeszcze LMS-MGC, który też jest skryptem ale na tyle uniwersalnym że potrafi wygenerować praktycznie dowolny plik konfiguracyjny i zrestartować usługę na twoim serwerze.

Jest jeszcze A.L.E.C's LMS Daemon, napisany w języku C. Jest on przeznaczony (a właściwie jego wtyczki) do generowania plików konfiguracyjnych i restartowania usług. Można go stosować jako zamiennik lub uzupełnienie skryptów perlowych. Odpowiada on za to, aby to co zostało zmienione w LMS-UI zostało zmienione także w rzeczywistości.


2.2. Wymagania

2.2.1. Serwer WWW

Ponieważ LMS-UI jest napisane w PHP, niezbędny jest serwer WWW z interpreterem tego języka. Preferowanym serwerem jest Apache (www.apache.org).


2.2.2. Interpreter PHP

Interpreter powinien być w wersji 4.2.x lub nowszej, chociaż działa też poprawnie na 4.1.x (ale ponieważ developerzy pracują na 4.2.3, nie można zagwarantować poprawnej pracy na starszych wersjach. PHP można ściągnąć ze strony www.php.net.


2.2.3. Serwer baz danych

LMS nie będzie działał prawidłowo na wersjach MySQL starszych od 3.23.xx

LMS współpracuje także z PostgreSQL w wersji 7.3.x lub nowszych.


2.2.4. Biblioteka Smarty

LMS-UI do pracy wymaga jeszcze biblioteki Smarty (http://smarty.php.net) w wersji 2.5.0 lub wyższej.


2.2.5. Perl

O ile dla LMS-UI wystarczy to co powyżej, to żeby mieć działający LMS-MGC i resztę skryptów potrzebujemy także Perla i moduły do niego czyli:

  • perl właściwy i jego podstawowe moduły (POSIX, GetOpt::Long);

  • Net::SMTP;

  • Config::IniFiles;

  • DBI;

  • DBD-mysql (Jeśli masz zamiar używać mysql'a);

  • DBD-pg (Jeśli masz zamiar używać postgres'a);


2.2.6. Kompilator języka C

Jeśli chcesz uruchomić A.L.E.C's LMS Daemon będziesz potrzebował działający kompilator języka C, gdyż jest on dostarczany wyłącznie w postaci kodu źródłowego.


2.3. Instalacja LMS

LMS w postaci archiwum tar.gz można pobrać ze strony domowej projektu (www.lms.rulez.pl), a następnie rozpakować i umieścić w wybranym katalogu (np. /var/www/lms ) dostępnym dla serwera www:

$ cd /var/www
$ wget http://lms.rulez.pl/download/lms-x.x.x.tar.gz
$ tar zxf lms-x.x.x.tar.gz

Dostępne są dwa rodzaje paczek z LMS - zawierające bibliotekę Smarty (lms-x.x.x+libs.tar.gz) i bez niej. Jeżeli nie skorzystałeś z wersji archiwum zawierającej biblioteki, pobierz ją i umieść w katalogu lib.

$ cd /var/www/lms/lib
$ wget http://smarty.php.net/distributions/Smarty-2.6.0.tar.gz
$ tar zxf Smarty-2.6.0.tar.gz
$ mv Smarty-2.6.0/libs Smarty

Notatka

Położenie wszystkich katalogów możesz zmienić w sekcji [directories] pliku lms.ini.

Pliki z konfiguracją (sample/lms.ini i sample/lms-mgc.ini) umieść w katalogu /etc/lms.

Skrypty wykonywalne z katalogu bin najlepiej przenieść do katalogu /usr/sbin.

Ostrzeżenie

Serwer www musi mieć prawo odczytu pliku lms.ini oraz prawa odczytu i zapisu do katalogu backup. Stanowi to potencjalne obniżenie poziomu bezpieczeństwa systemu.


2.4. Instalacja serwera baz danych

2.4.1. MySQL

2.4.1.1. Wstęp

Ta bardzo popularna baza jest dostępna z większością dystrybucji Linuksa. Jeżeli jednak będziesz musiał ją zainstalować samodzielnie, zacznij od ściągnięcia źródeł z www.mysql.org.


2.4.1.2. Instalacja serwera MySQL

Po rozpakowaniu, wejdź do katalogu z naszym MySQL i wydaj kolejno polecenia:

$ ./configure --prefix=/usr/local/mysql
$ make
$ make install
$ /usr/local/mysql/bin/mysql_install_db
$ chown mysql -R /usr/local/mysql/var
$ /usr/local/mysql/bin/safe_mysqld &
$ /usr/local/mysql/bin/mysqladmin -u root password nowe_hasło


2.4.1.3. Utworzenie bazy danych

Konieczne to jest jeżeli uruchamiasz LMS po raz PIERWSZY. Jeżeli uaktualniasz LMS z poprzedniej wersji, odpowiednie adnotacje co należy zrobić z bazą danych są w pliku ChangeLog. Tak więc, wejdź do katalogu w którym masz LMS'a i uruchom shell mysql'a:

mysql -u[tutaj wpisz użytkownika z pełnym dostępem do bazy] -p
Enter password:[podaj hasło]
mysql> create database lms;
mysql> grant usage on lms.* to lms@localhost;
mysql> grant select,insert,update,delete,create on lms.* to lms@localhost identified by 'haslo';
mysql> flush privileges;
mysql> use lms;
mysql> source doc/lms.mysql;


2.4.1.4. Konfiguracja LMS (lms.ini)

Ponieważ MySQL jest domyślną bazą dla LMS'u, konfiguracja ogranicza się do podania w sekcji [database] pliku /etc/lms/lms.ini hasła i użytkownika:

user     = lms
password = hasło_z_pkt.3

Po takim zabiegu, o ile LMS'owi uda się nawiązać połączenie do bazy danych, można już bez problemu dostać się do systemu. Jeżeli jednak w bazie danych nie ma żadnego konta administratora, jedyną rzeczą jaką zobaczysz będzie formularz dodania administratora. Jeżeli podasz prawidłowe dane administratora, LMS przeniesie Cię na stronę logowania gdzie od razu będziesz mógł użyć nowo utworzonego konta.

Zatrzymaj się tutaj i dodaj coś do crona, tak dla świętego spokoju:

12 4 3,10,17,21,28 * * /usr/bin/mysqldump -u lms --password=Twoje-super-tajne-hasło \
		    --add-drop-table --add-locks lms > backups/lms-auto-"$(date +%s)".sql

Spowoduje to wykonywanie o 4:12 rano, każdego 3, 10, 17, 21 i 28 dnia miesiąca automagicznie zrzutu danych z mysqla.


2.4.2. PostgreSQL

2.4.2.1. Wstęp

LMS jest testowany na PostgreSQL 7.3.4 i nowszych, ale ponieważ żadne skomplikowane właściwości tej bazy nie są wykorzystywane, nie powinno być problemów z innymi wersjami. Jeżeli nie masz zainstalowanego serwera PostgreSQL, najlepszym rozwiązaniem będzie własnoręczna kompilacja ze źródeł dostępnych na stronie www.postgresql.org.


2.4.2.2. Instalacja

Jest to wersja skrócona instalacji, więcej informacji znajdziesz w dokumentacji postgresa. Po ściągnięciu i rozpakowaniu wejdź do katalogu głównego i wpisz kolejno poniższe polecenia.

$ ./configure --enable-locale
$ gmake
$ su
$ gmake install
$ adduser postgres
$ mkdir /usr/local/pgsql/data
$ chown postgres /usr/local/pgsql/data
$ su - postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &


2.4.2.3. Utworzenie bazy danych

Mając uruchomiony serwer możesz przystąpić do tworzenia bazy o nazwie 'lms', której właścicielem będzie użytkownik z loginem 'lms'.

$ /usr/local/pgsql/bin/createuser -d -A -P lms
$ /usr/local/pgsql/bin/createdb -E LATIN2 -U lms lms
$ /usr/local/pgsql/bin/psql -d lms -U lms -f /lms/doc/lms.pgsql


2.4.2.4. Konfiguracja LMS (lms.ini)

Dla systemu LMS domyślnym serwerem baz danych jest MySQL, dlatego w sekcji [database] pliku /etc/lms/lms.ini należy ustawić następujące opcje:

type     = postgres
user     = lms
password = hasło_podane_przy_tworzeniu_użytkownika_lms

Notatka

Hasło jest wymagane w zależności od konfiguracji autentykacji użytkowników postgresa w /usr/local/pgsql/data/pg_hba.conf. Domyślnie hasło nie jest wymagane.

Po takim zabiegu, o ile LMS'owi uda się nawiązać połączenie do bazy danych, można już bez problemu dostać się do systemu. Jeżeli jednak w bazie danych nie ma żadnego konta administratora, jedyną rzeczą jaką zobaczysz będzie formularz dodania administratora. Jeżeli podasz prawidłowe dane administratora, LMS przeniesie Cię na stronę logowania gdzie od razu będziesz mógł użyć nowo utworzonego konta.


2.5. Konfiguracja podstawowa

Głównym plikiem konfiguracyjnym LMS jest lms.ini, który należy umieścić w katalogu /etc/lms lub w katalogu głównym LMS'a. Zawiera on zmienne konfiguracyjne LMS-UI oraz wszystkich skryptów wykonywalnych z wyjątkiem LMS-MGC.

Notatka

Pamiętaj o usunięciu średników na początku linii z ustawianym parametrem konfiguracyjnym.


2.5.1. Sekcja [database] - ustawienia bazy danych

  • type

    Typ bazy danych. Aktualnie w 100% supportowany jest 'mysql', ale jak na razie nie widać większych problemów z 'postgres'. Domyślnie: mysql

    Przykład: type = mysql

  • host

    Host gdzie zainstalowana jest baza danych. Najczęściej, localhost, ale można tutaj wstawić cokolwiek (ip, domena, ścieżka do gniazda w formacie 'localhost:/path/to/socket'). Domyślnie: localhost

    Przykład: host = localhost

  • user

    Użytkownik do bazy danych. W wielu wypadkach (jeżeli postępowałeś zgodnie ze wskazówkami w dokumentacji) będzie to 'lms'. Jeżeli chcesz używać konta uprzywilejowanego, prawdopodobnie wpiszesz 'root' (MySQL na większości *nixów), 'mysql' (na PLD) bądź 'postgres' (PostgreSQL). Domyślnie: mysql

    Przykład: user = lms

  • password

    Hasło do bazy danych. Domyślnie puste.

    Przykład: password = password

  • database

    Nazwa bazy danych, domyślnie lms.

    Przykład: database = lms


2.5.2. Sekcja [directories] - ustawienia katalogów

  • sys_dir

    Katalog systemowy. Jest to miejsce gdzie jest cała zawartość UI LMS'a, czyli index.php, grafiki, templejty i reszta. Domyślnie, index.php stara się sam odnaleźć w filesystemie używając getcwd(), ale lepiej by było gdyby mu powiedzieć gdzie jest:

    Przykład: sys_dir = /var/www/htdocs/lms/

  • modules_dir

    Katalog z "modułami" LMS'a. Czyli zawartość katalogu modules. Domyślnie jest to podkatalog modules w sys_dir.

    Przykład: modules_dir = /usr/share/lms/modules/

  • lib_dir

    Katalog z "bibliotekami" LMS'a. Czyli zawartość katalogu lib. Domyślnie to podkatalog lib w sys_dir.

    Przykład: lib_dir = /usr/share/lms/lib/

  • backup_dir

    Katalog z kopiami zapasowymi bazy danych - miejsce gdzie LMS zapisuje zrzuty z bazy. Domyślnie jest to podkatalog 'backups'.

    Przykład: backup_dir = /var/backup/lms/

    Ostrzeżenie

    Jeśli katalog z kopiami zapasowymi będzie osiągalny z poziomu WWW, to każdy bez autoryzacji będzie miał do nich dostęp.

  • smarty_dir

    Katalog z biblioteką Smarty - domyślnie podkatalog Smarty w lib_dir.

    Przykład: smarty_dir = /usr/lib/php/Smarty

  • smarty_compile_dir

    Katalog kompilacji Smartyego. Miejsce gdzie Smarty kompiluje szablony. Domyślnie to templates_c w katalogu sysdir.

    Przykład: smarty_compile_dir = /var/smarty/compile/lms

  • smarty_templates_dir

    Katalog z szablonami którymi Smartiego. Domyślnie to podkatalog templates z sys_dir'a.

    Przykład: smarty_templates_dir = /usr/share/lms/templates


2.5.3. Sekcja [phpui] - ustawienia interfejsu

  • allow_from (opcjonalny)

    Lista sieci i adresów IP które mają dostęp do LMS. Jeżeli puste, każdy adres IP ma dostęp do LMS'a, jeżeli wpiszemy tutaj listę adresów bądź klas adresowych, LMS odrzuci błędem HTTP 403 każdego niechcianego użytkownika.

    Przykład: allow_from = 192.168.0.0/16, 213.25.209.224/27, 213.241.77.29

  • timeout

    Timeout sesji www. Po tym czasie (w sekundach) użytkownik zostanie wylogowany jeżeli nie podejmie żadnej akcji. Domyślnie 600 sekund.

    Przykład: timeout = 900

    Ostrzeżenie

    Nie ma możliwości ustawienia braku timeoutu. Jeżeli ustawisz tą wartość na zero, nie będziesz mógł korzystać z LMS!

  • userlist_pagelimit

    Limit wyświetlanych pozycji na stronie w liście użytkowników. Domyślnie brak limitu.

    Przykład: userlist_pagelimit = 10

  • nodelist_pagelimit

    Limit wyświetlanych pozycji na stronie w liście komputerów. Domyślnie brak limitu.

    Przykład: nodelist_pagelimit = 10

  • balancelist_pagelimit

    Limit wyświetlanych pozycji na stronie na rachunku użytkownika. Domyślnie: 100.

    Przykład: balancelist_pagelimit = 50

  • invoicelist_pagelimit

    Limit wyświetlanych pozycji na stronie w liście faktur. Domyślnie: 100

    Przykład: invoicelist_pagelimit = 50

  • reload_type

    Typ reloadu. Dozwolone wartości:

    exec - wywoływanie jakiejś komendy (najczęściej coś przez sudo, jakiś skrypt lub coś, konfigurowalny poniżej)

    sql - zrobienie wpisów w SQL'u (też można ustawić konkretne query SQL'a)

    Domyślna wartość to 'sql'.

    Przykład: reload_type = exec

  • reload_execcmd

    Komenda do wykonania podczas reloadu jeżeli reload_type jest ustawione na 'exec'. Domyślnie /bin/true. String ten puszczany do komendy system() więc proponuję rozwagę i pomyślenie co się robi i jak :) Generalnie średniki powinny być parsowane przez bash'a, ale z paru względów LMS sam dzieli poniższy ciąg pod względem średników i wykonuje komendy pojedynczo.

    Przykład: reload_execcmd = "sudo /usr/bin/reload_lms.sh"

  • reload_sqlquery

    Zapytanie SQL wykonywane podczas reloadu, jeśli reload_type = sql. Domyślnie zapytanie wrzuca do tabeli timestamps wartość '_force'. W zapytaniu można użyć '%TIME%' jako podstawki pod aktualny timestamp unixowy. UWAGA! Znak średnika jest traktowany jako separator kwerend, tzn. oddzielając znakiem średnika możesz wpisać kilka zapytań SQL.

    Przykład: reload_sqlquery = "INSERT INTO reload VALUES ('1','%TIME%')"

  • force_ssl

    Wymuszanie SSL'a. Ustawienie tej zmiennej na 1 spowoduje że LMS będzie wymuszał połączenie SSL powodując redirect do 'https://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI] przy każdej próbie dostępu bez SSL. Domyślnie wyłączone.

    Przykład: force_ssl = 0

  • allow_mac_sharing

    Przyzwolenie na dodawanie rekordów komputerów z adresami MAC już istniejącymi (nie sprawdza czy jakiś inny komputer posiada taki adres MAC). Domyślnie wyłączone

    Przykład: allow_mac_sharing = 1

  • smarty_debug

    Włączenie konsoli debugowej Smartyego, przydatne do śledzenia wartości przekazywanych z PHP do Smartyego. Domyślnie wyłączone.

    Przykład: smarty_debug = 1

  • debug_email

    Adres e-mail do debugowania - pod ten adres będą szły wiadomości wysyłane z sekcji 'Mailing' LMS'a, zamiast do właściwych użytkowników.

    Przykład: debug_email = root@localhost

  • default_zip, default_city, default_address

    Domyślny kod pocztowy, miasto, ulica, stosowane podczas wstawiania nowego użytkownika. Przydatne gdy mamy do wpisania wielu użytkowników z tej samej ulicy.

    Przykład: default_zip = 39-300

  • use_current_payday

    Określa, czy ma być użyty aktualny dzień miesiąca jako dzień zapłaty zamiast najczęściej używanego. Domyślnie wyłączone.

    Przykład: use_current_payday = 1


2.6. Prawa dostępu

2.6.1. Idea

LMS ma możliwość zdefiniowania do 256 reguł dostępu do systemu. Każda z nich może zabraniać, bądź pozwalać na dostęp do konkretnych modułów. Każdemu administratorowi można przydzielić dowolną kombinację reguł dostępu.

Domyślnie zdefiniowanych jest osiem reguł dostępu.

  • pełen dostęp

  • odczyt wszystkich danych

  • podłączanie i odłączanie komputerów

  • manipulowanie finansami

  • przeładowywanie konfiguracji

  • manipulowanie danymi użytkowników

  • manipulowanie danymi komputerów

  • dostęp do statystyk

  • dostęp do korespondencji seryjnej

  • brak dostępu do modyfikacji i zakładania kont administratorów

  • brak dostępu

Siedem z nich zezwala na dostęp do modułów oraz jedna zabrania. Moduły do których administrator ma zawsze dostęp to: welcome, copyrights, logout, chpasswd (przy czym chpasswd umożliwia tylko zmianę własnego hasła), dostęp do reszty jest zdefiniowany regułami.

Notatka

Jeśli nie ustawimy administratorowi żadnej reguły dostępu, to LMS domyślnie przydzieli mu regułkę 0, czyli pełen dostęp.


2.6.2. Jak to działa?

Decyzja czy użytkownik ma prawo dostępu do modułu czy nie przebiega następująco:
- najpierw sprawdzana jest lista modułów, do których zawsze ma się dostęp,
- potem następuje sprawdzenie czy moduł pasuje do reguł w poszczególnych poziomach, do których administrator ma dostęp,
- na końcu podejmowana jest decyzja czy użytkownik ma uprawnienia by do modułu się dobrać. Jeżeli moduł się załapał na którykolwiek poziom, który zabrania dostępu, dostęp zostanie zabroniony nawet jeżeli administrator ma ustawiony poziom, który pozwala na dostęp do modułu (np. ktoś ma pełny dostęp oraz brak dostępu do modułu dodawania komputerów, nie będzie on mógł się odwołać do tego modułu). Jeżeli moduł pasuje do poziomu, który pozwala na dostęp do danego modułu LMS zezwala na dalszą pracę. Jeżeli natomiast moduł się nie "załapał" na żaden poziom również zostanie mu wyświetlony komunikat o braku dostępu.


2.7. Upgrade

Uaktualnienie LMS'a z wersji 1.0.X do bieżącej przebiega w dwóch etapach. Najpierw utwórz katalog z plikami nowej wersji (nie nadpisuj starej wersji), następnie trzeba dokonać zmian w bazie.

Dla ułatwienia migracji danych przygotowano pliki UPGRADE.mysql i UPGRADE.pgsql, które umieszczono w katalogu z dokumentacją. W nich znajdziesz krótki opis jak przeprowadzić aktualizację w zależności od stosowanej bazy danych.

Notatka

W wersjach wyższych od 1.0.x biblioteka ADOdb nie jest wymagana, można skasować odpowiedni katalog


Rozdział 3. Interfejs Użytkownika (LMS-UI)

LMS'owy Interfejs Użytkownika to panel administracyjny do tworzenia i zarządzania bazą użytkowników i komputerów dostępny za pomocą przeglądarki internetowej. Umożliwia wprowadzanie danych komputerów, przypisanie ich do użytkowników i sieci. Definiowanie opłat i zarządzanie finansami sieci, Szybkie wyszukiwanie danych o użytkownikach i ich sprzęcie. Sporządzanie korespondencji seryjnej do użytkowników, definiowanie praw dostępu dla administratorów i ich haseł. Ponadto daje możliwość przeglądania statystyk wykorzystania łącza, a także tworzenia kopii bazy danych oraz zarządzania konfiguracją usług na serwerze . LMS-UI posiada także wiele innych możliwości, które w tym rozdziale zostaną opisane.


3.1. Logowanie

Po wpisaniu w przeglądarce adresu do strony z lms'em, powita cię ekran logowania. Musisz podać właściwy login oraz hasło. Hasła w bazie danych przechowywane są w formie zaszyfrowanej.

Jeżeli jest to twoje pierwsze logowanie i nie masz jeszcze założonego konta, zostaniesz przekierowany do modułu tworzenia kont administratorów. W tym momencie będziesz miał tylko dostęp do tego jednego modułu.


3.2. Praca z LMS-UI

Po zalogowaniu do LMS'a zobaczysz panel powitalny, na którym znajdują się podstawowe informacje na temat naszego systemu: wersję LMS i jego składników, wersję jądra i uptime serwera, ilość użytkowników i komputerów w bazie oraz ich stan (podłączony/odłączony), liczbę zadłużonych i kwota oraz przydatne lms'owe linki.

Z menu po lewej stronie wybierasz interesujący cię moduł. Możesz również dokonać zmiany hasła, wylogować się lub szybko przejść do informacji o użytkowniku i komputerze podając ich numery.


3.2.1. Użytkownicy

Po wejściu do panelu 'Użytkownicy' ukaże się lista użytkowników, którą możesz filtrować według wybranych kryteriów lub sortować klikając na nazwie kolumny.

Kliknięcie na wybranym użytkowniku spowoduje przejście do panelu z informacjami szczegółowymi o nim i przypisanych mu komputerach, taryfach oraz operacjach finansowych. Tam też możesz modyfikować dane użytkownika, definiować opłaty abonamentowe i zaksięgować wpłatę lub obciążenie jego rachunku.

W menu znajdującym się u góry okna masz do wyboru opcje:

  • Lista - Wyświetlenie listy użytkowników, tej która pokazuje się po wejściu do panelu 'Użytkownicy'.

  • Odłączeni - Wyświetlenie listy użytkowników odłączonych.

  • Zadłużeni - Wyświetlenie listy użytkowników zadłużonych.

  • Nowy - Dodawanie nowego użytkownika.

  • Szukaj - Wyszukiwanie użytkowników wg zadanych kryteriów.

  • Wersja do druku - Wyświetlenie listy użytkowników, w formacie przyjaznym dla drukarki.

  • Wydruk zadłużonych - Wyświetlenie listy użytkowników zadłużonych, w formacie przyjaznym dla drukarki.

Ikona żarówki służy do zmiany statusu (podłączony/odłączony) wszystkich komputerów przypisanych danemu użytkownikowi.

Notatka

Do automatycznego odłączania komputerów użytkowników, których bilans jest poniżej zadanej wartości służy skrypt lms-cutoff.


3.2.2. Komputery

Panel ten służy do zarządzania komputerami i umożliwia: przeglądanie listy komputerów, wyszukiwania komputerów o danej nazwie, IP lub MAC'u, dodawanie nowych lub usuwanie już wpisanych do bazy komputerów, a także podgląd i zmianę informacji o nich. Zmiany statusu komputera 'włączony/wyłączony' dokonuje się kliknięciem na ikonę żarówki w odpowiedniej linii.

Górne menu udostępnia następujące moduły:

  • Lista - Wyświetlenie listy komputerów, tej która pokazuje się po wejściu do panelu 'Komputery'. Listę można sortować klikając na nazwie kolumny.

  • Nowy - Dodawanie nowego komputera.

    Notatka

    Aby wyszukać komputery w swojej sieci możesz skorzystać z programu nbtscan. Jeśli jest on zainstalowany w systemie, po naciśnięciu 'Skanuj' zobaczysz listę znalezionych komputerów.

    Notatka

    Aby dodać komputer musisz mieć sieć i użytkownika, którym go przypiszesz.

  • Szukaj - Wyszukiwanie komputerów według zadanych kryteriów.

  • Wersja do druku - Wyświetlenie listy komputerów, w formacie przyjaznym dla drukarki.


3.2.3. Osprzęt sieciowy

W panelu przeznaczonym do ewidencji sprzętu można przeglądać listę urządzeń sieciowych, zawierającą ich nazwy i symbole, położenie i opis, a ponadto ilość dostępnych portów. Kliknięcie na wybranym urządzeniu spowoduje wyświetlenie informacji szczegółowych o nim. Możliwe jest definiowanie połączeń urządzeń i komputerów oraz generowanie graficznej mapy całej sieci.

W tym panelu możesz skorzystać z menu:

  • Lista - Wyświetlenie listy urządzeń, tej która pokazuje się po wejściu do panelu 'Urządzenia sieciowe'. Listę można sortować klikając na nazwie kolumny.

  • Nowe - Dodawanie nowego urządzenia.

  • Mapa - Generowanie mapy sieci (połączeń sieciowych). Możesz zdefiniować które urządzenie jest nadrzędne w stosunku do pozostałych.


3.2.4. Sieci IP

Tutaj definiujesz dane swojej sieci tj. klasę adresową, domenę, DNS'y, bramę, zakres DHCP. Na liście dostępna jest również ilość zajętych i dostępnych adresów. Jeżeli LMS służy ci do zarządzania wieloma sieciami lub dzielisz jedną sieć na podsieci, albo korzystasz z różnych klas adresowych tutaj jest to możliwe.

Modyfikowanie właściwości sieci następuje w module dostępnym po wybraniu sieci z listy lub bezpośrednio po kliknięciu ikony 'Edytuj'. Menu udostępnia dwie opcje:

  • Lista - Wyświetlenie listy sieci. tej która pokazuje się po wejściu do panelu 'Sieci IP'.

  • Nowa sieć - Dodawanie sieci.


3.2.5. Taryfy i Finanse

Jest to właściwie wiele modułów umożliwiających zarządzanie finansami sieci.

Masz możliwość definiowania taryf abonamentowych, opłat (zleceń) stałych, księgowania operacji finansowych, przeglądanie bilansu i historii rachunku oraz sporządzanie faktur. A oto wszystkie dostępne moduły:

  • Lista taryf - Wyświetlenie listy taryf. tej która pokazuje się po wejściu do panelu 'Taryfy i finanse'. Klikając wybraną taryfę na liście zostaniesz przeniesiony do modułu 'Informacje o taryfie', gdzie możesz edytować jej parametry lub zamieniać użytkownikom taryfy.

  • Nowa taryfa - Definiowanie nowej taryfy.

  • Lista opłat - Wyświetlenie listy opłat. Klikając wybraną opłatę na liście zostaniesz przeniesiony do modułu 'Informacje o opłacie', gdzie możesz edytować jej parametry lub zaksięgować daną opłatę w bazie operacji finansowych.

  • Nowa opłata - Definiowanie nowej opłaty stałej.

  • Bilans finansowy - Historia operacji finansowych z podsumowaniem przychodu, rozchodu, wpłat i zobowiązań użytkowników.

  • Nowa operacja - Wprowadzanie nowych operacji finansowych. Możliwe jest zaksięgowanie tej samej wpłaty lub obciążenia wielu użytkownikom równocześnie.

    Notatka

    Do naliczania stałych opłat abonamentowych najlepiej wykorzystywać skrypt lms-payments lub demona almsd, które potrafią równocześnie wystawiać faktury.

  • Lista faktur - lista wystawionych faktur z możliwością wydruku wybranych faktur oraz rejestru sprzedaży za dany okres.

  • Nowa faktura - Ręczne wystawianie faktur dla wybranego użytkownika.


3.2.6. Mailing

Mailing, czyli Korespondencja Seryjna umożliwia wysyłanie wiadomości do grupy użytkowników twojej sieci. Podajesz dane nadawcy, treść wiadomości oraz wybierasz grupę do której zostanie wysłany e-mail.

Notatka

Serwer musi być odpowiednio skonfigurowany do użycia funkcji mail().

Notatka

Do automatycznego wysyłania upomnień do użytkowników zalegających z opłatami można wykorzystać skrypt lms-notify lub moduły notify i ggnotify demona almsd.


3.2.7. Przeładowanie

Kliknięcie na menu 'Przeładowanie' spowoduje przeładowanie konfiguracji i usług zdefiniowanych dla generatora plików konfiguracyjnych LMS-MGC lub demona almsd. Więcej informacji znajdziesz w rozdziałach dotyczących LMS-MGC oraz demona.


3.2.8. Bazy danych

Z panelu 'Bazy danych' możesz zarządzać kopiami awaryjnymi danych z bazy lms'a. Kopia bazy to plik tekstowy z zawartością wszystkich tabel w bazie, zapisywany w katalogu zdefiniowanym w sekcji [directories] lms.ini zmienną backup_dir.

Notatka

Domyślnie kopie zapisywane są w katalogu lms/backups dostępnym przez przeglądarkę, dlatego dobrze było by przenieść go w inne miejsce.

Sporządzone kopie można w każdej chwili przeglądać, usuwać lub zapisywać na lokalnym dysku.


3.2.9. Administratorzy

Panel 'Administratorzy' służy do zarządzania kontami administratorów, zmiany haseł oraz definiowania praw dostępu. Na pierwszym widoku jest lista administratorów z datami ostatniego logowania. Kliknięcie na pozycji z listy spowoduje wyświetlenie informacji szczegółowych o danym koncie, w tym o zdefiniowanych prawach dostępu. W każdej chwili możliwa jest zmiana danych i uprawnień za pomocą przycisku 'Edytuj'. Aby założyć nowe konto administratora skorzystaj z górnego menu 'Nowy'.


3.2.10. Statystyki

Interfejs do przeglądania statystyk wykorzystania łącza w postaci prostych wykresów jest dostępny w menu 'Statystyki'. Przed wygenerowaniem wykresu możesz zdefiniować parametry określające okres jaki ma być brany pod uwagę, ograniczyć do jednej sieci (jeśli masz ich więcej), ilości komputerów oraz posortować odpowiednio wyniki (na przykład według downloadu). Korzystając z górnego menu możesz szybko wygenerować statystyki z ostatniej godziny, ostatniego dnia, ostatnich 30 dni lub ostatniego roku.

Notatka

Zapisem danych do bazy zajmuje się skrypt lms-traffic, albo demon almsd.

W zależności od wybranej przez użytkownika częstotliwości zapisu, może nastąpić szybki przyrost danych w bazie, co spowoduje zwiększenie czasu oczekiwania na rysowanie wykresów. Z tego powodu w oknie 'Kompaktowanie bazy danych' udostępniono możliwość zmniejszenia rozmiarów bazy bez utraty danych. Wybierając poziom dokładności danych, dane zostaną uśrednione w następujący sposób:

  • Poziom Niski: dane z poprzedniego dnia i starsze, zostaną uśrednione do jednego dnia, czyli jeśli do bazy zapisywane były z częstotliwością 10 minut, to 6*24 wpisów zostanie zastąpione jednym.

  • Poziom Średni: dane starsze niż miesiąc zostaną uśrednione do jednego dnia.

  • Poziom Wysoki: dane starsze niż miesiąc zostaną uśrednione do jednej godziny.

Ostrzeżenie

Kompaktowanie bazy danych jest procesem nieodwracalnym.

Menu panelu 'Statystyki' obejmuje:

  • Filtr - główne okno do wprowadzania parametrów wykresów oraz do kompaktowania bazy danych.

  • Ostatnia godzina - statystyki z ostatniej godziny dla wszystkich sieci.

  • Ostatni dzień - statystyki z ostatniego dnia dla wszystkich sieci.

  • Ostatnie 30 dni - statystyki z ostatnich 30 dni dla wszystkich sieci.

  • Ostatni rok - statystyki z ostatnich 365 dni dla wszystkich sieci.


3.3. Dodatki

3.3.1. Faktury

LMS umożliwia wystawianie faktur automatycznie i ręcznie. Ręczne wystawienie dowolnej faktury jest możliwe z menu 'Nowa faktura' w panelu 'Taryfy i finanse'. Automatyczne wystawianie faktur wymaga włączenia tej opcji podczas przypisywania taryf użytkownikom. W takim wypadku zapisem faktur do bazy zajmuje się skrypt lms-payments lub demon almsd

Do poprawnego działania i tworzenia wydruków wymagane jest ustawienie podstawowych opcji w sekcji [invoices] lms.ini:

  • number_template

    Wzorzec numeru faktury. Dostępne zmienne wzorca to: '%N' - numer kolejny w roku, '%M' - miesiąc wystawienia, '%Y' - rok wystawienia. Domyślnie: %N/LMS/%Y

    Przykład: number_template = %N/%Y

  • header

    Dane sprzedawcy. Domyślnie: pusty. Można użyć ciągu "\n" aby oddzielić linie od siebie.

    Przykład: header = "SuperNet ISP\nul.Nowa 15\n12-000 Wąchock\n"

  • footer

    Stopka faktury - np. dane sprzedawcy. Domyślnie: pusta. Stopka zostanie umieszczona na dole faktury, małą czcionką. Podobnie jak i w przypadku opcji header, można użyć ciągu "\n" aby oddzielić linie od siebie.

    Przykład: footer = "Blokowa Sieć Komputerowa K-27 w Mielcu, tel.555-23-23, bla bla"

  • default_author

    Domyślna osoba wystawiająca fakturę. Domyślnie: puste

    Przykład: default_author = "specjalista d/s fakturowania"

Ponadto dostępne są zmienne:
  • cplace

    Miejsce wystawienia faktury. Domyślnie: puste.

    Przykład: cplace = Warszawa

  • template_file

    Szablon faktury, który powinien znajdować się w katalogu templates. Domyślnie: invoice.html.

    Przykład: template_file = invoice-mynet.html

  • content_type

    Content-type dla faktury. Jeżeli wpiszesz tutaj 'application/octet-stream' to przeglądarka zechce wysłać plik do zapisania na dysku, zamiast go wyświetlić. Przydatne jeśli używasz własnego templejta, który wygeneruje np.rtf'a lub xls'a. Domyślnie: 'text/html; charset=iso-8859-2'

    Przykład: content_type = application/octet-stream

  • attachment_name

    Można podać nazwę pliku, jako który ma zostać zapisany gotowy wydruk. Domyślnie: pusta.

    Przykład: attachment_name = faktura.xls

Wygenerowane faktury można obejrzeć w dwojaki sposób: albo poprzez ikonkę drukarki na wykazie bilansu finansowego (ogólnego bądź pojedynczego użytkownika), albo poprzez 'Lista faktur' z menu 'Taryfy i finanse'. W przypadku listy faktur, możliwe jest także filtrowanie faktur do wydruku. Wynikowy dokument HTML zawiera oryginały i kopie, które są oddzielone znacznikami podziału strony poprzez CSS. Tak więc każda nowoczesna przeglądarka zgodna z CSS powinna bezproblemowo drukować faktury ładnie podzielone na strony. Funkcja ta była testowana na przeglądarkach Microsoft Internet Explorer 6.0, Opera 7.02 oraz Mozilla 1.3.

Notatka

Praktycznie każda przeglądarka internetowa ma możliwość konfiguracji wydruku, gdzie można wyłączyć funkcje takie jak drukowanie stopki i nagłówka, czy też adresu na wydruku.

Ostrzeżenie

W bazie danych zapisywane są kwoty brutto.


3.3.2. "Moje konto"

W katalogu contrib/customer znajduje się przykład rozwiązania, dzięki któremu każdy użytkownik twojej sieci może sprawdzić własny bilans finansowy.

Skrypt sprawdza spod jakiego adresu jest żądanie i wyświetla bilans i informacje o użytkowniku, który jest właścicielem komputera o tym adresie. Pliki należy skopiować w dowolne miejsce i wystawić pod adresem dostępnym dla każdego użytkownika, a następnie ustawić poprawną ścieżkę do lms.ini w pliku index.php.


Rozdział 4. Skrypty

4.1. Instalacja

Jeśli chcesz ustawić konfigurację któregoś ze skryptów, robi się to w odpowiedniej sekcji lms.ini. Same skrypty przenieś z katalogu /lms/bin/ do katalogu /usr/sbin. Po przeniesieniu musisz je jeszcze dopisać do crontaba tak, aby były uruchamiane automatycznie, właśnie wtedy kiedy tego chcesz.

Przykładowo, wpis w crontabie dla skryptu lms-payments (wykonywanego codziennie o godzinie 00:01) powinien wyglądać następująco:

1 0 * * *       /usr/sbin/lms-payments 1 > /dev/null

Po więcej informacji możesz sięgnąć do man crontab

Większość lms'owych skryptów posiada dodatkowe opcje uruchomieniowe:

-C plik     położenie i nazwa alternatywnego pliku lms.ini, domyślnie /etc/lms/lms.ini
-q          wykonanie skryptu bez wyświetlania komunikatów               
-h          pomoc (a w zasadzie to tylko listing opcji)
-v          informacja o wersji skryptu

4.2. Lista dostępnych skryptów

Tabela 4-1. Lista skryptów wykonywalnych

NazwaOpis
lms-notifyKorespondencja seryjna do użytkowników sieci
lms-notify-smsPowiadamianie o zaległościach sms'em
lms-cutoffOdłączanie użytkowników zadłużonych
lms-etherdescGenerowanie pliku dla iptraf zawierającego pary MAC adres - nazwa hosta
lms-paymentsNaliczanie opłat okresowych (abonamentowych)
lms-trafficZapis statystyk wykorzystania łącza
lms-traffic-logiptablesWspółpraca lms-traffic z iptables
lms-makearpTworzenie tablicy ARP (/etc/ethers)
lms-makedhcpconfKonfiguracja serwera DHCP(/etc/dhcpd.conf)
lms-makeiptablesKonfiguracja firewalla iptables
lms-makeipchainsKonfiguracja firewalla ipchains
lms-makeiodenconfKonfiguracja oident
lms-makeopenbsdpfKonfiguracja firewalla dla systemu OpenBSD


4.3. Opis i konfiguracja

4.3.1. lms-notify

lms-notify jest dobrym sposobem przypominania ludziom o tym że do pracy sieci i łącz konieczne są ich pieniążki. Pozwala on na napisanie kilku[-nastu] plików tekstowych (w iso-8859-2) i traktowania ich jako szablonów do mailingu.


4.3.1.1. Szablony

W szablonach można używać następujących zmiennych:

  • %date-m - zostanie zastąpione aktualnym miesiącem, licząc od 1 poprzedzone 0, np. 02

  • %date-y - zostanie zastąpione aktualnym rokiem, np 2003

  • %saldo - zostanie zastąpione aktualnym saldem użytkownika, np. 535

  • %abonament - zostanie zastąpione kwotą abonamentu jaka jest do danego użytkownika przypisana, np. 107

  • %b - saldo z zanegowanym znakiem, np. 107

  • %B - saldo z prawdziwym znakiem, np. -107

  • %last_10_in_a_table - wyciąg ostatnich 10 operacji kasowych na koncie użytkownika, np:

Przykład 4-1. Lms-notify: Przykładowy wyciąg 10 ostatnich operacji kasowych

Data       | Opis                                                 | Wartość
-----------+------------------------------------------------------+---------
2003-02-02 | Abonament za miesiąc 2003/02                         |  107.00
2003-02-01 | Wpłata                                               | -107.00
2003-02-01 | Abonament za miesiąc 2003/02                         |  107.00
2003-02-01 | Wpłata                                               | -321.00
2003-01-31 | Abonament za miesiąc 2003/01                         |  107.00
2003-01-31 | Abonament za miesiąc 2003/01                         |  107.00
2003-01-31 | Abonament za miesiąc 2003/01                         |  107.00
-----------+------------------------------------------------------+---------

Przykład 4-2. Lms-notify: Przykład szablonu

UWAGA! Ta wiadomość została wygenerowana automatycznie.

Uprzejmie informujemy iż na Pani/Pana koncie figuruje zaległość w opłatach za
internet w wysokości %B zł.

Jeżeli porozumieli się już Państwo z administratorami w kwestii opłaty za
bieżący miesiąc czyli %date-m %date-y roku, prosimy o
zignorowanie tej wiadomości.

W wypadku gdy uważają Państwo iż zaległość ta jest nieporozumieniem prosimy o
jak najszybszy kontakt.

Wszelkie informacje na temat Państwa rozliczeń mogą Państwo znaleźć pod
adresem http://www.naszasiec.pl/mojekonto/

Jeżeli chcieliby Państwo uregulować zaległości prosimy o kontakt:

Dział Rozliczeń ASK NaszaSiec

Gerwazy Reguła
telefon: 0-509031337
e-mail: gerwazy@staff.naszasiec.pl

Gwidon Mniejważny
telefon: 0-606666666
e-mail: gwidonm@naszasiec.pl

ps. załączamy ostatnie 10 operacji jakie zostało zarejestrowane przez nasz
system bilingowy na Państwa koncie:

kwota operacji | typ operacji | data

%last_10_in_a_table

--
Amatorska Sieć Komputerowa NaszaSiec
http://www.naszasiec.pl/

4.3.1.2. Konfiguracja

Konfigurację dla lms-notify można ustalić w pliku lms.ini w sekcji [notify]. Możesz tam ustawić następujące parametry:

  • limit (opcjonalny)

    Pozwala na ustalenie limitu bilansu, poniżej którego do użytkownika zostanie wysłany e-mail z upomnieniem. Domyślnie limit = 0

    Przykład: limit = -20

  • mailsubject (wymagany)

    Pozwala na ustalenie tematu e-maila wysyłanego do użytkownika. Można używać podstawień znanych z szablonów (%B, %b, %date-y, %date-m, %last_10_in_a_table). Domyślnie: nie ustawione.

    Przykład: mailsubject = Informacje o zaległościach w opłatach za internet

  • mailtemplate (wymagany)

    Pozwala na wskazanie szablonu wiadomości, która zostanie wysłana do użytkownika. Więcej o szablonach tutaj. Domyślnie: nie ustawione.

    Przykład: mailtemplate = /etc/lms/notifytemplate.txt

  • mailfrom

    Adres e-mail z którego zostanie wysłany e-mail. Proszę pamiętać, że na niektórych MTA (np. exim) konto to musi istnieć w systemie. Domyślnie nieustawione

    Przykład: mailfrom = staff@domain.pl

  • mailfname

    Nazwa nadawcy maila

    Przykład: mailfname = Administratorzy

  • smtp_server

    Serwer SMTP, przez który ma zostać wysłana wiadomość. Domyślnie: 127.0.0.1

    Przykład: smtp_server = smtp.mydomain.pl

  • debug_email (opcjonalny)

    Adres e-mail do debugowania. Gdy ustawiony, cała poczta zostaje wysłana na dany email zamiast do użytkowników. Przydatne do debugowania i sprawdzania czy wszystko działa OK. Domyślnie: nie ustawiony.

    Przykład: debug_email = lexx@domain.pl


4.3.2. lms-notify-sms

lms-notify-sms to odpowiednik lms-notify, służący do wysyłania smsów. Do wysyłania wiadomości potrzebna jest komórka Nokii oraz oprogramowanie, które należy pobrać z (www.gnokii.org) i zainstalować w systemie.

Konfigurację dla lms-notify-sms można ustalić w pliku lms.ini w sekcji [notify-sms], a masz do dyspozycji następujące opcje:

  • limit (opcjonalny)

    Pozwala na ustalenie limitu bilansu poniżej którego do użytkownika zostanie wysłany sms z upomnieniem. Domyślnie: 0

    Przykład: limit = -20

  • smstemplate (wymagany)

    Szablon wiadomości. Domyślnie: nie ustawione.

    Przykład: smstemplate = /etc/lms/smstemplate.txt


4.3.3. lms-cutoff

Skrypt pozwala na odłączenie (a raczej zmianę w bazie danych stanu komputerów na wyłączony) użytkowników których bilans jest poniżej zadanej wartości. Właściwe odłączanie powinno być realizowane przez generator plików konfiguracyjnych.

Konfigurację dla lms-cutoff możemy ustalić w pliku lms.ini w sekcji [cutoff]. Możemy tam ustawić następujące parametry:

  • limit (opcjonalny)

    Pozwala na ustalenie limitu bilansu poniżej którego do bazy danych zostanie zapisany stan odłączony. Domyślnie: 0

    Przykład: limit = -20


4.3.4. lms-payments

Skrypt służący do naliczania opłat abonamentowych przypisanych użytkownikom oraz opłat stałych. Aby działał poprawnie powinien być uruchamiany codziennie.

Skrypt ten nie posiada żadnych opcji konfiguracyjnych.


4.3.5. lms-traffic

Skrypt służy do logowania informacji o ilości danych pobranych i wysłanych przez każdy komputer w sieci lokalnej. W bazie danych zapisywana jest ilość danych w bajtach, numer komputera z bazy lms i znacznik czasu. Od użytkownika zależy w jakich odstępach dane będą odczytywane. Ponieważ dane odczytywane są z pliku utworzonego przez użytkownika, nie ma znaczenia z jakiego źródła pochodzą, może to być iptables, ipchains lub program zewnętrzny np. ipfm.

Przeglądanie wykresów wykorzystania łącza oraz definiowanie filtrów dostępne jest z głównego menu 'Statystyki'.


4.3.5.1. Instalacja

Przed uruchomieniem lms-traffic należy zadbać o utworzenie pliku z danymi. Zawartość pliku powinna mieć następujący format:

<adres IP> <n_spacji> <upload> <n_spacji> <download>
<adres IP> <n_spacji> <upload> <n_spacji> <download>
...

Skrypt tworzący statystyki należy uruchamiać z taką samą częstotliwością co lms-traffic.

Notatka

Przykład takiego skryptu dla iptables znajduje się w pliku /sample/traffic_ipt.sh.

Następnie instalujemy skrypt dopisując do crontaba. Oprócz standardowych opcji wiersza poleceń możliwe jest zdefiniowanie lokalizacji pliku z logiem

-f=/plik 	położenie i nazwa pliku ze statystykami domyślnie /var/log/traffic.log

Ostrzeżenie

Częstotliwość zapisywania danych do bazy ustala użytkownik. Ustawienie jej poniżej 10 minut, może spowodować szybki przyrost ilości rekordów w bazie danych, a co za tym idzie zwiększyć czas oczekiwania na wyświetlenie wyników.


4.3.6. lms-traffic-logiptables

Skrypt służy do logowania informacji o ilości danych pobranych i wysłanych przez każdy komputer z sieci lokalnej, na podstawie liczników iptables. Dane sczytuje z firewalla, tworząc jednocześnie odpowiednie reguły. Zatem, nie jest konieczne ręczne tworzenie reguł iptables. Dane zapisywane są do pliku o formacie wymaganym przez lms-traffic.

Konfigurację należy umieścić w sekcji [traffic-logiptables]:

  • logfile

    Lokalizacja pliku na dane. Domyślnie: niezdefiniowana.

    Przykład: logfile = /var/log/traffic.log

  • outfile

    Lokalizacja skryptu z regułami iptables. Domyślnie: /etc/rc.d/rc.stat

    Przykład: outfile = /etc/rc.d/rc.stat

  • iptables_binary

    Lokalizacja programu iptables. Domyślnie: /usr/sbin/iptables

    Przykład: iptables_binary = /usr/local/sbin/iptables

  • wan_interfaces

    Nazwy interfejsów, na których dane mają być zliczane. Domyślnie: niezdefiniowane.

    Przykład: wan_interfaces = eth0

  • local_ports

    Lista portów (źródłowych i docelowych) dla zliczanych pakietów. Domyślnie: niezdefiniowane.

    Przykład: local_ports = 80

  • script_owneruid

    UID właściciela skryptu określonego w 'outfile'. Domyślnie: 0 (root).

    Przykład: script_owneruid = 0

  • script_ownergid

    GID właściciela skryptu określonego w 'outfile'. Domyślnie: 0 (root).

    Przykład: script_ownergid = 0

  • script_permission

    Uprawnienia skryptu określonego w 'outfile'. Domyślnie: 700 (rwx------).

    Przykład: script_permission = 700


4.3.7. lms-makeiptables, lms-makeipchains

Para skryptów służących do generowania plików zawierających reguły firewalla. Do utworzonego pliku możesz dołączyć inne wcześniej utworzone pliki, a w końcu nadać mu odpowiednie uprawnienia. Skrypty nie uruchamiają wygenerowanych plików.

Konfigurację dla tych skryptów możesz ustalić w pliku lms.ini w sekcji [iptables] (i odpowiednio [ipchains]). Oba skrypty posiadają te same opcje:

  • networks

    Lista nazw sieci (oddzielonych spacjami), które mają być uwzględnione podczas generowania pliku firewalla. Jeśli nie ustawiono, zostanie stworzony konfig dla wszystkich sieci.

    Przykład: networks = public-custa public-custb

  • iptables_binary (ipchains_binary)

    Lokalizacja programu iptables (ipchains). Domyślnie: /usr/sbin/iptables (/usr/sbin/ipchains)

    Przykład: iptables_binary = /usr/local/sbin/iptables

  • script_file

    Plik, do którego zapisujemy reguły firwalla. Domyślnie: /etc/rc.d/rc.masq

    Przykład: script_file = /etc/rc.d/rc.firewall

  • pre_script

    Plik wykonywany PO wyczyszczeniu regułek, ale PRZED ustawieniem nowych. Domyślnie: niezdefiniowany.

    Przykład: pre_script = /etc/rc.d/rc.masq-pre

  • post_script

    Plik wykonywany PO ustawieniu regułek. Domyślnie: niezdefiniowany.

    Przykład: post_script = /etc/rc.d/rc.masq-post

  • forward_to

    Lista sieci, dla których włączamy forwarding. Możliwe wartości: "" - pełny forward, "dowolny ciąg" - wyłącz forward, "siec1 siec2" - lista sieci z włączonym forwardingiem. Domyślnie: pełny forward.

    Przykład: forward_to = public-custa public-custb

  • script_owneruid

    UID właściciela pliku. Domyślnie: 0 (root).

    Przykład: script_owneruid = 0

  • script_ownergid

    GID właściciela pliku. Domyślnie: 0 (root).

    Przykład: script_ownergid = 0

  • script_permission

    Uprawnienia pliku skryptu. Domyślnie: 700 (rwx------).

    Przykład: script_permission = 700

  • snat_address

    Adres SNAT. Jeśli nie ustawiono, dla hostów z adresami publicznymi będzie użyte "-j MASQUERADE". Jeśli ustawiono zostanie użyte "-j SNAT --to xxx.xxx.xxx.xxx". Dotyczy lms-makeiptables. Domyślnie: nie ustawiony.

    Przykład: snat_address = 123.123.123.123

  • tcp_redirect_ports (udp_redirect_ports)

    Konfiguracja przekierowań w formie port_źródłowy:port_docelowy dla przekierowań na lokalną maszynę dla połączeń wychodzących. Dotyczy lms-makeipchains. Domyślnie: nie ustawione.

    Przykład: tcp_redirect_ports = 80:3128 25:25


4.3.8. lms-etherdesc

Skrypt służący do generowania pliku zawierającego MAC adresy oraz nazwy hostów pobierane z bazy lms'a. Adresy zapisywane są w formacie 'stripped mac', czyli bez ":". Tego typu plik wykorzystywany jest przez pakiet iptraf.

Konfigurację tego skryptu zawiera sekcja [ethers] w pliku lms.ini:

  • networks

    Lista nazw sieci (oddzielonych spacjami), które mają być uwzględnione podczas generowania pliku. Jeśli nie ustawiono, zostanie stworzony konfig dla wszystkich sieci.

    Przykład: networks = public-custa public-custb

  • etherdesc_owneruid

    UID właściciela pliku. Domyślnie: 0 (root).

    Przykład: etherdesc_owneruid = 0

  • etherdesc_file

    Lokalizacja pliku. Domyślnie: /var/lib/iptraf/ethernet.desc.

    Przykład: etherdesc_file = /etc/ethernet.desc

  • etherdesc_ownergid

    GID właściciela pliku. Domyślnie: 0 (root).

    Przykład: etherdesc_ownergid = 0

  • etherdesc_permission

    Uprawnienia pliku skryptu. Domyślnie: 600 (rw-------).

    Przykład: etherdesc_permission = 600


Rozdział 5. Generator plików konfiguracyjnych (lms-mgc)

LMS-MGC to "magiczny" generator plików konfiguracyjnych. Przy odrobinie wysiłku można stworzyć przy jego pomocy dowolnego rodzaju plik konfiguracyjny (np. generujący odpowiednie strefy dla DNS)


5.1. Instalacja

Lms-mgc posiada własny plik konfiguracyjny: lms-mgc.ini. Jego instalacja polega na przeniesieniu do katalogu /usr/sbin. Uruchomienie generatora można wykonać na dwa sposoby: wpisać do crona (np. co godzinę)

0 * * * *       /usr/sbin/lms-mgc 1 > /dev/null

albo z poziomu LMS skorzystać z menu "Przeładowanie". Druga metoda wymaga użycia sudo. Niestety, jedyne wyjście by umożliwić uruchomienie lms-mgc, to dopisanie użytkownika do sudo, a następnie ustawienie w sekcji [phpui] lms.ini:

reload_type = exec

reload_execcmd = sudo /usr/sbin/lms-mgc

Lms-mgc posiada następujące opcje uruchomienia:

-C, --config-file=/path/lms-mgc.ini alternatywny plik konfiguracyjny 
                                    (default: /etc/lms/lms-mgc.ini);
-i, --instances=name                nazwa (lub numer) instancji do uruchomienia, bez czytania 
                                    konfiguracji z lms-mgc.ini, np. -i "name1 name2"
-h, --help                          wyświetla pomoc;
-v, --version                       wyświetla numer wersji;
-q, --quiet                         tylko komunikaty o błędach;
-d, --debug                         informacje szczegółowe dla każdego IP;


5.2. Konfiguracja

Konfigurację dla LMS-MGC przeprowadza się w pliku lms-mgc.ini


5.2.1. Sekcja [database] - ustawienia bazy danych

  • type

    Typ bazy danych. Aktualnie w 100% supportowany jest 'mysql', ale jak narazie nie widać większych problemów z 'postgres'. Domyślnie: mysql

    Przykład: type = mysql

  • host

    Host gdzie zainstalowana jest baza danych. Najczęściej, localhost, ale można tutaj wstawić cokolwiek (ipek, domena, path to socketa w formacie 'localhost:/path/to/socket'). Domyślnie: localhost

    Przykład: host = localhost

  • user

    Użytkownik do bazy danych. W wielu wypadkach (jeżeli postępowałeś zgodnie ze wskazówkami w doc/INSTALL) będzie to 'lms'. Jeżeli chcesz używać konta uprzywilejowanego, prawdopodobnie wpiszesz 'root' (MySQL na większości *nixów), 'mysql' (na PLD) bądź 'postgres' (PostgreSQL). Domyślnie: root

    Przykład: user = mysql

  • password

    Hasło do bazy danych. Domyślnie puste.

    Przykład: password = tajne_haslo

  • database

    Nazwa bazy danych, domyślnie lms.

    Przykład: database = lms


5.2.2. Sekcja [mgc] - lista instancji

Właściwa konfiguracja dotycząca generatorów poszczególnych plików konfiguracyjnych jest umieszczana w sekcji [mgc] i pochodnych. W samej sekcji [mgc] możemy użyć następującego parametru:

  • instances

    Lista "instancji" oddzielona spacjami.

    Przykład: instaces = dhcp firewall squid

Notatka

Zmienną instances można także umieścić w sekcji dowolnej instancji. Patrz niżej.


5.2.3. Sekcja [mgc:xxx] - konfiguracja instancji

Każda instancja ma swoją nazwę i jej konfigurację tworzy się umieszczając sekcję o nazwie [mgc:nazwa], czyli przykładowo: [mgc:mydaemon]

W samych instancjach możemy używać następujących opcji konfiguracyjnych:

  • instances

    Zmienna, w której możesz podać listę innych instancji, aby następnie wywoływać mgc poleceniem 'lms-mgc -i sekcja' zamiast 'lms-mgc -i "sekcja1 sekcja2 sekcja3"'. Jeśli zostanie użyta, wszystkie pozostałe zmienne tej sekcji zostaną zignorowane.

    Przykład: instances = dns1 dns2 dns3

  • outfile

    Definiuje plik do którego ma być zapisany wynik działania bieżącej instancji (jeżeli ta zmienna będzie nie ustawiona, instancja się zakończy)

    Przykład: outfile = /etc/somefile

  • append

    Pozwala ustawić aby wynik działania instancji nie nadpisywał pliku wynikowego, lecz został dopisany na jego końcu

    Przykład: append = 1

  • outfile_perm

    Pozwala na ustawienie praw dostępu do pliku wyjściowego (domyślnie 600)

    Przykład: outfile_perm = 700

  • outfile_owner

    Pozwala na ustawienie właściciela pliku wyjściowego (domyślnie 0)

    Przykład: outfile_owner = 0

    Ostrzeżenie

    Właściciel musi być podany numerycznie!

  • outfile_group

    Pozwala na ustawienie grupy pliku wyjściowego (domyślnie 0)

    Przykład: outfile_group = 0

    Ostrzeżenie

    Grupa musi być podana numerycznie!

  • header_file

    Pozwala na umieszczenie w pliku wynikowym zawartości innego pliku jako nagłówek (domyślnie nie ustawione)

    Przykład: header_file = /etc/lms/myservice_header

  • header

    Pozwala na umieszczenie w pliku wynikowym zawartości zmiennej jako nagłówka (domyślnie puste)

    Przykład: header = option1 = bla\noption2 = blabla

    Notatka

    Znak \n został tu użyty jako separator linii. Końcowe \n nie jest wymagane.

  • networks

    Pozwala ustalić które z naszych sieci będą uwzględniane w pliku konfiguracyjnym (domyślnie wszystkie)

    Przykład: networks = cust1-publ cust2-publ cust3-priv

Teraz mgc pobiera kolejne sieci i wykonuje w kółko następujące czynności:

  • network_header

    Generuje nagłówek dla każdej sieci (domyślnie puste):

    Przykład: network_header = network %ADDR/%MASK { # Config section for %NAME

  • dst_networks

    Pozwala ustawić sieci docelowe, czyli takie dla których będzie przetwarzany parametr: dst_network_header (domyślnie wszystkie):

    Przykład: dst_networks = main coalloc

  • dst_network_header

    Pozwala ustawić nagłówek dla sieci docelowych

    Przykład: dst_network_header = \tallow to %DADDR/%DMASK;

  • network_body

    Parametr jest przetwarzany po wysłaniu nagłówków dla sieci, a przed rozpoczęciem analizy adresów IP

    Przykład: network_body = \tnodes {

Teraz MGC rozpocznie przetwarzanie kolejnych adresów IP. Robi to w dosyć specyficzny sposób. Tzn. oblicza kolejny adres IP i kolejno sprawdza:

  • allnodes

    Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP.

    Przykład: allnodes = ??

  • allexistnodes

    Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP który jest używany.

    Przykład: allexistnodes = ??

  • ignore

    Pozwala na ustawienie listy adresów w postaci adres/prefix lub adres/maska oddzielanej spacjami dla której ma być ignorowane generowanie

    Przykład: ignore = ??

  • grantednode_publ

    Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status "podłączony" (regułka przetwarzana dla adresów publicznych)

    Przykład: grantednode_publ = \t\tnode %NAME (%IP/%MAC) unique %ID;

  • grantednode_prv

    Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status "podłączony" (regułka przetwarzana dla adresów prywatnych)

    Przykład: grantednode_prv = \t\tnode %NAME (%IP/%MAC) unique %ID;

  • deniednode_publ

    Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status "odłączony" (regułka przetwarzana dla adresów publicznych)

    Przykład: deniednode_publ = node %NAME (%IP/%MAC) unique %ID deny;

  • deniednode_prv

    Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status "odłączony" (regułka przetwarzana dla adresów prywatnych)

    Przykład: deniednode_prv = node %NAME (%IP/%MAC) unique %ID deny;

  • dhcpnode_publ

    Jest przetwarzana gdy dany adres IP zawiera się w klasie DHCP (regułka przetwarzana dla adresów publicznych)

    Przykład: dhcpnode_publ = node unknown (%IP) reject;

  • dhcpnode_prv

    Jest przetwarzana gdy dany adres IP zawiera się w klasie DHCP (regułka przetwarzana dla adresów prywatnych)

    Przykład: dhcpnode_prv = node unknown (%IP) reject;

  • freeip_publ

    Jest przetwarzana gdy dany adres IP nie jest przypisany do żadnego komputera (regułka przetwarzana dla adresów publicznych)

    Przykład: freeip_publ = node unknown (%IP) lock_as_unused;

  • freeip_prv

    Jest przetwarzana gdy dany adres IP nie jest przypisany do żadnego komputera (regułka przetwarzana dla adresów prywatnych)

    Przykład: freeip_prv = node unknown (%IP) lock_as_unused;

  • default_publ

    Regułka domyślna. Jest przetwarzana gdy adres nie zostanie przetworzony przez żadną regułkę grantednode lub deniednode (regułka przetwarzana dla adresów publicznych)

    Przykład: default_publ = node unknown (%IP) lock_as_intruder;

  • default_prv

    Regułka domyślna. Jest przetwarzana gdy adres nie zostanie przetworzony przez żadną regułkę grantednode lub deniednode (regułka przetwarzana dla adresów prywatnych)

    Przykład: default_publ = node unknown (%IP) lock_as_intruder;

    Notatka

    lms-mgc sam rozpoznaje który adres należy do klasy publicznej, a który do prywatnej.

  • network_footer

    Pozwala na ustawienie stopki dla właśnie przetwarzanej sieci

    Przykład: network_footer = ??

  • footer_file

    Pozwala na umieszczenie w pliku wynikowym zawartości innego pliku jako stopka (domyślnie nie ustawione)

    Przykład: footer_file = /etc/lms/myservice_footer

  • footer

    Pozwala na umieszczenie w pliku wynikowym zawartości zmiennej jako stopki (domyślnie puste)

    Przykład: footer = # End.

  • post_exec

    Komenda do wywołania po wygenerowaniu pliku konfiguracyjnego

    Przykład: post_exec = killall -HUP mydaemon


5.2.4. Zmienne konfiguracyjne

W opcjach konfiguracyjnych można używać następujących zmiennych:

  • %IP - zostanie rozwinięte do adresu IP

  • %ID - ID sieci w bazie

  • %MAC - zostanie rozwinięte do adresu MAC karty sieciowej

  • %OWNER - właściciel komputera

  • %NAME - nazwa sieci dużymi znakami

  • %name - nazwa sieci małymi znakami

  • %UPRATE - limit transferu dla danych wychodzących

  • %DOWNRATE - limit transferu dla danych przychodzących

  • %1 %2 %3 %4 - kolejne oktety (od lewej) adresu IP

  • %ADDR - adres sieci

  • %GATE - brama sieci

  • %DNS - serwer DNS tej sieci

  • %DOMAIN - domena tej sieci

  • %WINS - adres serwera WINS dla tej sieci

  • %DHCPS - pierwszy adres DHCP tej sieci

  • %DHCPE - ostatni adres DHCP tej sieci

  • %DATE - data w formacie YYYYMMDD;

  • %TIME - czas w formacie HHMM;

  • %TIMES - czas w formacie HHMMSS;

  • %UTIME - czas w formacie unix timestamp;


5.3. Przykład zastosowania lms-mgc

Konfiguracja i zasada działania lms-mgc może się wydawać dość zawiła, dlatego posłużymy się przykładem. Poniżej przedstawiono sposób generowania i uruchamiania firewalla ipchains (bardzo prostego).

Przykład 5-1. Lms-mgc: Przykład instancji

Zacznij od utworzenia nowej sekcji mgc w lms-mgc.ini, nazywając ją 'ipchains' i stwórz w tej sekcji prostą maskaradę per adres IP z lanu:

[mgc:ipchains]
outfile           = /etc/rc.d/rc.masq
outfile_perm      = 700
header            = #!/bin/sh\n/sbin/ipchains -F\n/sbin/ipchains -X\n/sbin/ipchains -P forward DENY
grantednode_priv  = /sbin/ipchains -A forward -s %IP -j MASQ
post_exec         = /etc/rc.d/rc.masq
Dopiszmy także do sekcji głównej mgc informację żeby mgc uruchamiał tą sekcję:
[mgc]
instances         = ipchains

Teraz próba odpalenia lms-mgc powinna zaowocować wygenerowaniem /etc/rc.d/rc.masq, oraz jego odpaleniem.


Rozdział 6. A.L.E.C's LMS Daemon

6.1. Informacje podstawowe

Napisany w języku C program ma ułatwiać zarządzanie usługami. Sam demon odpowiada za uruchamianie odpowiednich modułów na żądanie użytkownika. Moduły natomiast, służą do tworzenia plików konfiguracyjnych na podstawie danych z bazy LMS'a oraz restartowania odpowiednich usług na serwerze.

Dlaczego taka nazwa? Większość kodu demona napisał jeden z developerów - Aleksander 'A.L.E.C' Machniak, niemniej należy także podkreślić udział Marcina 'Lexx' Króla. Program zawiera fragmenty kodu autorstwa Mateusza 'mteg' Golicza oraz korzysta z biblioteki iniparser Nicolasa Devillarda. Jeśli Ty masz ochotę napisać jakiś moduł lub poprawić funkcjonalność demona jak najbardziej do tego zachęcam.


6.1.1. Wymagania

A.L.E.C's LMS Daemon potrzebuje:

  • instalacji interfejsu użytkownika LMS-UI

  • libmysqlclient (tj. pełnej instalacji MySQL'a lub odpowiedniego pakietu) lub libpq w przypadku bazy PostgreSQL

  • libdl (to w każdej dzisiejszej dystrybucji jest)

  • kompilatora języka C


6.1.2. Instalacja

Przed kompilacją należy przy pomocy skryptu ./configure ustalić opcje przedstawione na poniższym listingu (w nawiasach podano wartości domyślne opcji):

  --help                pomoc
  --enable-debug0       logowanie zapytań SQL (wyłączone)
  --enable-debug1       logowanie zdarzeń (wyłączone)
  --with-pgsql          gdy korzystamy z bazy PostgreSQL (wyłączone)
  --with-mysql          gdy korzystamy z bazy MySQL (włączone)
  --prefix=DIR          katalog instalacyjny demona (/usr/local/bin)
  --libdir=DIR          lokalizacja bibliotek bazy danych (/usr/lib)
  --incdir=DIR          lokalizacja plików nagłówkowych bazy danych (/usr/include)
Zatem wymagane jest określenie bazy z jakiej będziemy korzystać (-with-mysql lub -with-pgsql) oraz położenia bibliotek dostarczanych wraz z bazą (--incdir, --libdir).
# ./configure --with-pgsql --libdir=/usr/local/pgsql/lib --incdir=/usr/local/pgsql/include
Następnie kompilacja i instalacja (umieszczenie demona w katalogu określonym zmienną --prefix):
# make && make install
Na koniec skompilowane moduły (pliki z rozszerzeniem .so), znajdujące się w katalogu modules/nazwa_modułu przenieś do dowolnego katalogu. Ich lokalizację będziesz określał w pliku konfiguracyjnym.


6.1.3. Konfiguracja

Przykładowy konfig demona i modułów zawarto w pliku lms.ini.sample. Poniższy listing przedstawia podstawowe opcje dla demona (konfigurację modułów omówiono w osobnych rozdziałach ich dotyczących):

[database]
host            = localhost     # nazwa lub ip hosta, domyślnie: localhost
user            = lms           # nazwa użytkownika, domyślnie: lms
password        = mypasswd      # hasło do bazy, domyślnie: puste
database        = lms           # nazwa bazy, domyślnie: lms
port            = 0             # numer portu, domyślnie: 0

[lmsd]
sleeptime       = 30            # określa odstęp czasu (w sekundach) jak często ma
                                # być sprawdzane żądanie reloadu, domyślnie: 30
instances       = hosts oident firewall       # lista instancji modułów
Notatka

Lista instancji składa się z nazw instancji oddzielonych spacją. Instancja to nazwa sekcji w pliku konfiguracyjnym.

W sekcji dotyczącej instancji, oprócz parametrów konfiguracji modułów, umieszcza się opcje podstawowe, jak na poniższym listingu:

[nazwa_instancji]
module = /ścieżka/nazwa_modułu.so
info = "Opcjonalny opis modułu"


6.1.4. Uruchomienie

Program możesz uruchamiać jako demona pracującego w tle (opcja '-b'). Wtedy przeładowanie konfiguracji i usług jest dokonywane na żądanie, przy użyciu menu 'Przeładowanie' w LMS-UI. Opcja 'sleeptime' (-s) określa okres między odczytami bazy. Gdy demon wykryje żądanie wykonania reloadu, wywoła moduły określone opcją 'instances' z lms.ini. Na przykład:

# almsd -b

Innym sposobem uruchomienia jest jednorazowy reload w wykorzystaniem crona. Z tego sposobu należy korzystać uruchamiając moduły takie jak 'payments' 'notify' 'traffic'. W tym wypadku musisz stworzyć osobny plik konfiguracyjny dla każdego modułu (zawierający również opcje dla demona) i podać go demonowi przy pomocy opcji '-c'. Przykładowy wpis do crontab'a wygląda następująco:

  1 0 * * *    /usr/local/bin/almsd -q -c /etc/lms/payments.lms.ini

Poniższy listing przedstawia dostępne opcje linii poleceń programu:

  -c	ścieżka do pliku konfiguracyjnego (domyślnie: /etc/lms/lms.ini)
  -b	uruchomienie w tle
  -s	czas w sek. między odczytami tabeli 'reload' (domyślnie: 30)
  -q 	wykonaj reload i zakończ
  -h 	wyświetla opcje linii poleceń


6.2. Moduły

Sam demon potrafi tylko uruchamiać moduły i to one odwalają całą robotę. Większość modułów jest przeznaczona do określonego zastosowania, jedynie 'hostfile' można używać do różnych konfigów (usług), np. różnych typów firewalli. Przykłady konfiguracji demona i modułów zawiera plik daemon/lms.ini.sample. Parametry konfiguracyjne modułów umieszcza się w sekcjach instancji je wywołujących.


6.2.1. Lista dostępnych modułów

Tabela 6-1. Lista modułów demona almsd

NazwaOpis
dhcpKonfiguracja serwera dhcpd
cutoffOdłączanie użytkowników z zaległościami w opłatach
dnsKonfiguracja serwera dns
ethersTworzenie pliku /etc/ethers
hostfileModuł uniwersalny (np. tworzenie reguł iptables)
notifyPowiadamianie użytkowników o zaległościach w opłatach pocztą elektroniczną
ggnotifyPowiadamianie użytkowników o zaległościach w opłatach przez gadu-gadu
paymentsNaliczanie opłat abonamentowych
oidentKonfiguracja oident
tcTworzenie reguł HTB
trafficStatystyki wykorzystania łącza

6.2.2. Payments

6.2.2.1. Opis

Moduł nalicza opłaty abonamentowe użytkowników oraz opłaty stałe. Należy go uruchamiać codziennie. Opłaty naliczane na podstawie przypisanych użytkownikowi taryf zapisywane są do bazy wraz z komentarzem określonym zmienną 'comment'. Po naliczeniu opłat tworzone są faktury. Komentarz do opłaty stałej to zlepek składający się z jej nazwy oraz wierzyciela.


6.2.2.2. Konfiguracja

Dla tego modułu są dostępne następujące zmienne kofiguracyjne:

  • comment

    Komentarz do operacji. '%period' zostanie zamienione na daty od-do należnego abonamentu, np. '10.10.2003 - 09.11.2003', a '%tariff' na nazwę odpowiedniej taryfy. Domyślnie: 'Abonament wg taryfy: '%tariff' za okres: %period'.

    Przykład: comment = 'Abonament miesięczny za okres %period'

  • up_payments

    "Naliczanie z góry", czyli czy okres w komentarzu ma być liczony do przodu, czy do tyłu w stosunku do daty naliczenia opłaty. Domyślnie: yes.

    Przykład: up_payments = no


6.2.3. Notify

6.2.3.1. Opis

Moduł 'notify' służy do informowania użytkowników o zaległościach w opłatach za pomocą poczty elektronicznej. Aktualne saldo użytkownika porównywane jest ze zmienną 'limit', jeśli jest niższe - wiadomość zostaje wysłana. Treść wiadomości pobierana jest z przygotowanego szablonu, w którym można stosować następujące zmienne:

  • %saldo - aktualne saldo użytkownika

  • %name - imię użytkownika

  • %lastname - nazwisko/nazwa użytkownika

  • %last_10_in_a_table - wyciąg ostatnich 10 operacji na kocie użytkownika


6.2.3.2. Konfiguracja

Poniżej przedstawiono dostępne opcje konfiguracyjne modułu 'notify':

  • mailtemplate

    Lokalizacja pliku z szablonem wiadomości. Domyślnie: pusty

    Przykład: mailtemplate = modules/notify/sample/mailtemplate

  • file

    Lokalizacja pliku tymczasowego. Domyślnie: /tmp/mail

    Przykład: file = /tmp/mail.txt

  • command

    Polecenie powłoki wysyłające e-maila. '%address' zostanie zastąpione adresem e-mail użytkownika. Domyślnie: 'mail %address -s "Inf. o zaległościach w opłatach" < /tmp/mail'.

    Przykład: command = 'mail %address -s "musisz zapłacić, bo jak nie..." < /tmp/mail.txt'

  • limit

    Wiadomość o zaległościach zostaje wysłana jeśli saldo użytkownika spadnie poniżej kwoty określonej zmienną limit. Domyślnie: 0

    Przykład: limit = -20

  • debug_mail

    Określa adres na który zostaną wysłane wszystkie wiadomości, przydatne podczas testów. Domyślnie: puste.

    Przykład: debug_mail = localhost@moja.net


6.2.4. Ggnotify

6.2.4.1. Opis

Odpowiednik modułu 'notify' służący do wysyłania wiadomości gadu-gadu. Aktualne saldo użytkownika porównywane jest ze zmienną 'limit', jeśli jest niższe - wiadomość zostaje wysłana. Treść wiadomości pobierana jest z przygotowanego szablonu, w którym można stosować zmienne takie jak dla modułu 'notify' (może to być też ten sam szablon).

Moduł wymaga zainstalowanej biblioteki libgadu oraz źródeł programu ekg. Odpowiednie ścieżki do nich należy ustawić w modules/ggnotify/Makefile przed kompilacją modułu.


6.2.4.2. Konfiguracja

Podobnie jak w 'notify' masz do dyspozycji następujące zmienne:

  • ggtemplate

    Lokalizacja pliku z szablonem wiadomości. Domyślnie: pusty.

    Przykład: ggtemplate = modules/ggnotify/sample/mailtemplate

  • uin

    Identyfikator gadu-gadu użytkownika wysyłającego wiadomości. Domyślnie: pusty.

    Przykład: uin = 1234567

  • password

    Hasło dla konta określonego zmienną 'uin'. Domyślnie: puste.

    Przykład: password = "moje_trudne__hasło"

  • limit

    Wiadomość o zaległościach zostaje wysłana jeśli saldo użytkownika spadnie poniżej kwoty określonej zmienną limit. Domyślnie: 0

    Przykład: limit = -20

  • debug_uin

    Jeśli ustawione, na to konto zostaną wysłane wszystkie wiadomości. Domyślnie: puste.

    Przykład: debug_uin = 7654321


6.2.5. Cutoff

6.2.5.1. Opis

Cutoff zmienia na 'odłączony' status komputerów użytkownikom, którzy mają na koncie zaległości większe niż określony limit. Ten moduł nie zajmuje się fizycznym blokowaniem dostępu do sieci. Należy pamiętać aby uruchamiać go przed modułami takimi jak np. 'hostfile'. Ważna jest kolejność instancji na liście w zmiennej 'instances'. Moduł 'cutoff' najlepiej uruchamiać codziennie.


6.2.5.2. Konfiguracja

Moduł 'cutoff' posiada tylko jeden parametr:

  • limit

    Odłączenie następuje jeśli saldo użytkownika spadnie poniżej kwoty określonej tą zmienną. Domyślnie: 0.

    Przykład: limit = -20


6.2.6. Dhcp

6.2.6.1. Opis

Moduł zarządzający serwerem DHCP, tworzy plik konfiguracyjny oraz restartuje usługę. Zmienna 'command' umożliwia również wykonywanie innych czynności (programów).


6.2.6.2. Konfiguracja

Większość parametrów konfiguracyjnych odpowiada fragmentom pliku konfiguracyjnego dhcpd, które w typowych zastosowaniach nie wymagają zmiany:

  • file

    Określa lokalizację pliku konfiguracyjnego serwera dhcp. Domyślnie: /tmp/dhcpd.conf.

    Przykład: file = /etc/dhcpd.conf

  • command

    Polecenie wykonywane po utworzeniu pliku konfiguracyjnego. Domyślnie: pusta.

    Przykład: command = 'killall -HUP dhcpd'

  • begin

    Nagłówek pliku. Domyślnie: "shared-network LMS {".

    Przykład: begin = "shared-network LMS {"

  • end

    Stopka pliku. Domyślnie: "}".

    Przykład: end = "\n}"

  • subnet_start

    Nagłówek podsieci. '%a' - nazwa, '%m' - maska. Domyślnie: "subnet %a netmask %m {\ndefault-lease-time 86400;\nmax-lease-time 86400;".

    Przykład: subnet_start = "subnet %a netmask %m {default-lease-time 3600;"

  • subnet_end

    Stopka podsieci. Domyślnie: "}".

    Przykład: subnet_end = '\t}'

  • subnet_gateway

    Brama podsieci. '%i' zostanie zamienione na adres ip. Domyślnie: 'option routers %i;'.

    Przykład: subnet_gateway = "option routers %i"

  • subnet_dns

    DNS'y podsieci. '%i - adresy dns'ów. Domyślnie: "option domain-name-servers %i;".

    Przykład: subnet_dns = "option domain-name-servers 192.168.0.1"

  • subnet_domain

    Nazwa domenowa podsieci. '%n' - nazwa. Domyślnie: "option domain-name %n;".

    Przykład: subnet_domain = "option domain-name test.%n;"

  • subnet_wins

    Serwery wins. '%i' - adres ip serwera. Domyślnie: "option netbios-name-servers %i;".

    Przykład: subnet_wins = ""

  • subnet_range

    Zakres adresów podsieci. '%s' - adres początkowy, '%e' - koniec zakresu. Domyślnie: "range %s %e;".

    Przykład: subnet_range = "range %s %e;"

  • host

    Parametry hostów, gdzie '%n' - nazwa hosta, '%m' - MAC, '%i' - adres ip. Domyślnie: "\thost %n {\n\t\thardware ethernet %m; fixed-address %i; \n\t}".

    Przykład: host = "host %n {hardware ethernet %m; fixed-address %i;}"


6.2.7. Hostfile

6.2.7.1. Opis

Moduł 'hostfile' jest dość uniwersalnym narzędziem. Ponieważ wykonuje pętlę po wszystkich komputerach w bazie rozróżniając ich status (odłączony/podłączony), dlatego możliwe jest tworzenie np. reguł dowolnego firewalla, czy też pliku /etc/hosts. Dane zapisuje do pliku i następnie wykonuje określone polecenie powłoki.


6.2.7.2. Konfiguracja

W opcjach 'grantedhost' i 'deniedhost' można stosować specjalne zmienne, które podczas zapisu do pliku zostaną zastąpione '%i' - adresem ip, '%m' - mac adresem, '%n' - nazwą komputera, '%domain' - domeną, '%net' - nazwą sieci. Poniżej opcje udostępniane przez ten moduł

  • file

    Lokalizacja pliku tymczasowego. Domyślnie: /tmp/hostfile

    Przykład: file = /etc/rc.d/rc.firewall

  • command

    Polecenie powłoki wyk. po utworzeniu pliku 'file'. Domyślnie: puste

    Przykład: command = '/bin/sh /etc/rc.d/rc.firewall'

  • begin

    Nagłówek pliku tymczasowego. Domyślnie: "/usr/sbin/iptables -F FORWARD\n"

    Przykład: begin = "IPT=/usr/sbin/iptables \n$IPT -F FORWARD\n"

  • end

    Stopka pliku tymczasowego. Domyślnie: "/usr/sbin/iptables -A FORWARD -J REJECT\n"

    Przykład: end = "$IPT -A FORWARD -J REJECT\n"

  • grantedhost

    Tekst dla hosta podłączonego. Domyślnie: "/usr/sbin/iptables -A FORWARD -s %i -m mac --mac-source %m -j ACCEPT\n"

    Przykład: grantedhost = "$IPT -A FORWARD -s %i -m mac --mac-source %m -j ACCEPT\n"

  • deniedhost

    Tekst dla hosta odłączonego. Domyślnie: "/usr/sbin/iptables -A FORWARD -s %i -m mac --mac-source %m -j REJECT\n"

    Przykład: deniedhost = "$IPT -A FORWARD -s %i -m mac --mac-source %m -j REJECT\n"

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = "lan1 lan2"

  • skip_dev_ips

    Jeśli ustawiona na tak (yes, true) pominięte zostaną adresy urządzeń sieciowych. Domyślnie: tak

    Przykład: skip_dev_ips = no


6.2.8. Traffic

6.2.8.1. Opis

'Traffic' to odpowiednik perlowego lms-traffic, zapisujący do bazy statystyki wykorzystania łącza z pliku utworzonego przez użytkownika. Plik taki powinien mieć format: ip_hosta upload download . Więcej informacji (w tym jak utworzyć taki plik) można znaleźć w rozdziale dotyczącym lms-traffic.


6.2.8.2. Konfiguracja

Jedyny dostępny parametr jest jednocześnie obowiązkowy:

  • file

    Lokalizacja pliku ze statystykami firewalla. Domyślnie: /var/log/traffic.log

    Przykład: file = /tmp/log


6.2.9. Tc (HTB)

6.2.9.1. Opis

Do pliku określonego opcją 'file' zapisywane są dane dotyczące uploadu i downloadu dla komputerów określonego w taryfach, w formacie: upload, download, numer_ip_hosta_lub_ich_lista.

Tak przygotowany plik można wykorzystać w skrypcie tworzącym reguły htb. Przykładowy skrypt htb.sh zamieszczono w katalogu modules/tc/sample. Opcja 'command' jest odpowiedzialna za uruchomienie takiego skryptu.


6.2.9.2. Konfiguracja

Ten moduł zawiera standardowe parametry:

  • file

    Lokalizacja pliku tymczasowego. Domyślnie: /tmp/tc.dat.

    Przykład: file = /tmp/htb.data

  • command

    Polecenie powłoki wykonywane po utworzeniu pliku. Domyślnie: "/bin/sh sample/htb.sh < /tmp/tc.dat".

    Przykład: command = "/bin/bash modules/tc/sample/htb.sh < /tmp/tc.dat"


6.2.10. Dns

6.2.10.1. Opis

Moduł do konfiguracji stref serwera 'named' jest jednym z bardziej skomplikowanych. Tworzy dla każdej sieci pliki stref oraz odpowiednie wpisy w named.conf w oparciu o szablony tych plików. Przykładowe szablony znajdują się w katalogu /modules/dns/sample.


6.2.10.2. Konfiguracja

  • forward-patterns

    Katalog z szablonami stref. Domyślnie: forward.

    Przykład: forward-patterns = /dns/patterns/forward

  • reverse-patterns

    Katalog z szablonami stref odwrotnych. Domyślnie: reverse.

    Przykład: reverse-patterns = /dns/patterns/revers

  • generic-forward

    Szablon domyślny. Zostanie wykorzystany jeśli w katalogu określonym 'forward-patterns' nie będzie pliku odpowiadającego nazwie domenowej sieci. Domyślnie: modules/dns/sample/forward/generic.

    Przykład: generic-forward = /dns/patterns/forward

  • generic-reverse

    Szablon domyślny. Zostanie wykorzystany jeśli w katalogu określonym 'reverse-patterns' nie będzie pliku odpowiadającego numerowi IP sieci. Domyślnie: modules/dns/sample/reverse/generic.

    Przykład: generic-reverse = /dns/patterns/forward

  • forward-zones

    Katalog na pliki wynikowe stref. Domyślnie: modules/dns/sample/out/forward.

    Przykład: forward-zones = /dns/forward

  • reverse-zones

    Katalog na pliki wynikowe stref odwrotnych. Domyślnie: modules/dns/sample/out/reverse.

    Przykład: reverse-zones = /dns/reverse

  • host-reverse

    Linia w pliku strefy odw. odpowiadająca każdemu komputerowi w dane sieci. Domyślnie: "%n IN A %i\n".

    Przykład: host-reverse = "\t %n IN A %i\n"

  • host-forward

    Linia w pliku strefy odpowiadająca każdemu komputerowi w danej sieci. Domyślnie: "%c IN PTR %n.%d.\n".

    Przykład: host-forward = "\t %c IN PTR %n.%d.\n"

  • conf-pattern

    Lokalizacja szablonu głównego pliku konfiguracyjnego serwera. Domyślnie: modules/dns/sample/named.conf.

    Przykład: conf-pattern = /dns/patterns/named.conf

  • conf-output

    Lokalizacja głównego pliku konfiguracyjnego serwera. Domyślnie: /tmp/named.conf.

    Przykład: conf-output = /etc/named.conf

  • conf-forward-entry

    Wpis dla każdej strefy w głównym pliku konfiguracyjnym. Domyślnie: 'zone "%n" {\ntype master;\n file "forward/%n"; \nnotify yes; \n}; \n'.

    Przykład: conf-forward-entry = 'zone "%n" { \n\ttype master; \n\tfile "forward/%n"; \n\tnotify yes; \n}; \n'

  • conf-reverse-entry

    Wpis dla każdej strefy odw. w głównym pliku konfiguracyjnym. Domyślnie: 'zone "%c.in-addr.arpa" { \ntype master; \nfile "reverse/%i"; \nnotify yes; \n}; \n'.

    Przykład: conf-revers-entry = 'zone "%c.in-addr.arpa" { \n\ttype master; \n\tfile "reverse/%i"; \n\tnotify yes; \n}; \n'

  • command

    Polecenie wykonywane po utworzeniu plików konf. Domyślnie: puste.

    Przykład: command = ""


6.2.11. Ethers

6.2.11.1. Opis

Moduł tworzący konfigurację tablicy ARP systemu. Ustawiając opcję 'dummy_macs' można sprawić, aby komputerom odłączonym został przypisany mac-adres 00:00:00:00:00:00.


6.2.11.2. Konfiguracja

Tutaj są tylko standardowe opcje:

  • file

    Lokalizacja pliku wynikowego. Domyślnie: /tmp/ethers.

    Przykład: file = /etc/ethers

  • command

    Polecenie powłoki wykonywane po wygenerowaniu konfiga. Domyślnie: puste.

    Przykład: command = "arp -f /etc/ethers"

  • dummy_macs

    Jeśli ustawimy na 'yes', to komputerom odłączonym zostanie przypisany mac-adres '00:00:00:00:00:00'. Domyślnie: "no".

    Przykład: dummy_macs = yes


6.2.12. Oident

6.2.12.1. Opis

Moduł do konfiguracji oidentd. W zasadzie można to zrobić modułem 'hostfile', ale tutaj masz już gotowe ustawienia domyślne.


6.2.12.2. Konfiguracja

A oto parametry modułu 'oident'

  • begin

    Tekst wstawiany na początku pliku. Domyślnie: puste.

    Przykład: begin = "#Generowany automatycznie\n"

  • end

    Tekst wstawiany na końcu pliku. Domyślnie: puste.

    Przykład: end = ""

  • host

    Linia tekstu dla każdego komputera. Domyślnie: "%i\t%n\tUNIX".

    Przykład: host = "%i %n WINDOWS"

  • file

    Tekst wstawiany na początku pliku. Domyślnie: /tmp/oidentd.conf.

    Przykład: file = /etc/identd.conf

  • networks

    Lista nazw sieci do uwzględnienia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = 'lan1 lan2'

  • command

    Polecenie do wykonania po utworzeniu pliku. Domyślnie: puste.

    Przykład: command = "killall -HUP midentd"


Rozdział 7. Dla dociekliwych

7.1. Drzewo katalogów

Tabela 7-1. Drzewo katalogów LMS

NazwaOpis
backupsKopie zapasowe bazy danych
binSkrypty wykonywalne lms-...
contribDodatki stworzone przez użytkowników LMS
daemonA.L.E.C's LMS Daemon
develSkrypty przydatne dla developerów
docDokumentacja
imgObrazki do Interfejsu Użytkownika
libLMS'owy zbiór bibliotek PHP oraz Smarty
modulesModuły Interfejsu Użytkownika
samplePrzykładowe skrypty i inne dodatki
templatesTemlejty Smarty dla Interfejsu Użytkownika
templates_cPliki tymczasowe

7.2. Struktura bazy danych

Poniżej przedstawiono ogólną strukturę bazy danych LMS. Bardziej szczegółowe informacje o typach danych, ograniczeniach nakładanych na pola oraz wartości domyślne zawarte są w plikach lms.mysql oraz lms.pgsql w katalogu /doc.


7.2.1. Administratorzy ('admins')

id - identyfikator
login - login
name - nazwa (nazwisko i imię)
email - adres admina
rights - prawa dostępu
passwd - hasło logowania
lastlogindate - data ostatniego logowania
lastloginip - adres IP, z którego nastąpiło ostatnie logowanie
failedlogindate - data ostatniej nieudanej próby logowania
failedloginip - adres IP, z którego próbowano się zalogować

7.2.2. Użytkownicy ('users')

id - identyfikator
lastname - nazwa/nazwisko
name - imię
status - podłączony/odłączony
email - adres poczty internetowej
phone1 - telefon
phone2 - telefon
phone3 - telefon
gguin - identyfikator gadu-gadu
address - adres (ulica, nr domu, nr lokalu)
zip - kod pocztowy
city - nazwa miasta
nip - numer identyfikacji podatkowej NIP
pesel - numer PESEL
info - dodatkowe informacje
creationdate - czas utworzenia wpisu
moddate - czas modyfikacji
creatorid - identyfikator administratora tworzącego wpis
modid - identyfikator administratora dokonującego zmian danych
deleted - usunięty z bazy

7.2.3. Sieci ('networks')

id - identyfikator
name - nazwa sieci
address - adres IP
mask - maska
interface - interfejs (np. eth1)
gateway - adres IP bramy
dns - adres IP serwera nazw
dns2 - adres IP zapasowego serwera nazw
domain - domena
wins - adres serwera WINS
dhcpstart - początek zakresu DHCP
dhcpend - koniec zakresu DHCP

7.2.4. Komputery i adresy IP urządzeń sieciowych ('nodes')

id - identyfikator
name - nazwa
mac - adres MAC
ipaddr - adres IP
ownerid - identyfikator właściciela ('0' - dla adresu urządzenia)
creationdate - znacznik czasu utworzenia wpisu
moddate - znacznik czasu ostatniej modyfikacji
creatorid - identyfikator administratora tworzącego wpis
modid - identyfikator administratora
netdev - identyfikator urządzenia sieciowego do którego jest podłączony komputer
access - podłączony/odłączony

7.2.5. Sprzęt sieciowy ('netdevices')

id - identyfikator
name - nazwa
location - lokalizacja
description - opis
producer - producent
model - model
serialnumber - numer seryjny
ports - ilość portów

7.2.6. Połączenia sieciowe ('netlinks')

id - identyfikator
src - jeden koniec
dst- drugi koniec

7.2.7. Operacje finansowe ('cash')

id - identyfikator
time - znacznik czasu zaksięgowania operacji
adminid - identyfikator administratora dokonującego operacji
type - typ operacji (przychód, rozchód, wpłata, obciążenie)
value - wartość w złotych
userid - identyfikator użytkownika ('0' - jeśli nie dotyczy)
invoiceid - identyfikator faktury obejmującej daną operację
comment - opis operacji

7.2.8. Taryfy ('tariffs')

id - identyfikator
name - nazwa
value - kwota
taxvalue - wysokość podatku w procentach
pkwiu - numer PKWiU
uprate - ograniczenie szybkości transferu danych wychodzących
downrate - ograniczenie szybkości transferu danych przychodzących
description - opis

7.2.9. Opłaty stałe ('payments')

id - identyfikator
name - nazwa
value - kwota
creditor - nazwa wierzyciela
period - typ okresu naliczania (co miesiąc/co tydzień/co rok)
at - dzień naliczenia
description - opis

7.2.10. Powiązania ('assignments')

id - identyfikator
tariffid - identyfikator taryfy
userid - identyfikator użytkownika
period - typ okresu
at - dzień naliczania
invoice - określa czy ma być wystawiana faktura (1 - tak, 0 - nie)

7.2.11. Faktury ('invoices')

id - identyfikator
number - numer w roku
cdate - data wystawienia
paytime - termin płatności (ilość dni)
paytype - rodzaj płatności (przelew/gotówka/etc.)
customerid - identyfikator użytkownika-nabywcy
name - nazwa (nazwisko i imię) nabywcy
address - adres nabywcy
nip - nip nabywcy
pesel - PESEL nabywcy
zip - kod pocztowy nabywcy
phone - telefon nabywcy
city - miasto nabywcy
finished - pole określające zamknięcie faktury

7.2.12. Faktury - cd. ('invoicecontents')

invoiceid - identyfikator faktury
value - kwota pozycji
taxvalue - wysokość podatku w procentach
pkwiu - numer PKWiU
content - użyta jednostka (najczęściej 'szt.')
count - ilość
description - opis
tariffid - identyfikator taryfy

7.2.13. Znaczniki czasu ('timestamps')

time - czas ostatniej modyfikacji
tablename - nazwa tabeli

7.2.14. Statystyki wykorzystania łącza ('stats')

nodeid - numer komputera
dt - znacznik czasu
upload - ilość danych wysłanych, w bajtach
download - ilość danych odebranych, w bajtach

7.3. Format pliku konfiguracyjnego

W pliku konfiguracyjnym LMS'a (standardowo /etc/lms/lms.ini) można ustawiać parametry LMS-UI, daemona almsd oraz skryptów perlowych (LMS_MGC). Przy czym format wartości parametrów dla skryptów perlowych podlega większym restrykcjom.


7.3.1. Komentarze

Programy parsujące plik konfiguracyjny pomijają wszystkie linie zaczynające się znakiem '#' lub ';'. Komentarze poprzedzone jednym z tych znaków można także wstawiać w tej samej linii co sekcje i opcje.


7.3.2. Sekcje, klucze, wartości

Opcje konfiguracyjne pogrupowane są w sekcje. Nazwę sekcji, składającą się z liter i/lub cyfr należy zamknąć w nawiasy kwadratowe. Ich nazwy powinny być unikalne.

Sekcje i parametry umieszcza się w osobnych liniach. Parametry składają się z klucza i wartości. Klucz to nazwa parametru konfiguracyjnego składająca się z liter i/lub cyfr. W tej samej linii co klucz, po znaku równości, umieszcza się wartość parametru. Jeśli wartość zawiera znaki specjalne należy ją objąć w apostrofy lub cudzysłów.

Przykład 7-1. Format opcji konfiguracyjnych

[sekcja]
klucz = wartość 
zmienna1 = "jakiś tekst"
para_metr = 'zmienna "para_metr" w apostrofach'

[sekcja_1]				#tu można komentować
klucz = "tekst ze znakami \t i ;"	; tu też można komentować
; a to jest komentarz na całą linię
key = "A.L.E.C's LMS Daemon is the best"
# opcja = wyłączona
				

7.3.3. Zmienne dla skryptów perlowych

Konfiguracja skryptów perlowych, z uwagi na zastosowanie modułu Config::IniFiles, ma pewne ograniczenia. Komentarze mogą być wstawiane tylko i wyłącznie w nowej linii. Wartości zmiennych nie obejmuje się w apostrofy lub cudzysłów, a są one czytane od znaku równości do końca wiersza. Dlatego właśnie nie można umieszczać komentarzy w jednej linii z parametrami.


7.4. Generowanie danych losowych

Dla osób chcących szybko sprawdzić jak działa LMS przygotowaliśmy moduł 'genfake', służący do tworzenia bazy danych.

Aby wygenerować dane należy, po zalogowaniu się w LMS'ie wywołać adres http://twoj.serwer.net/lms/?m=genfake, określić ilu użytkowników ma zostać stworzonych i nacisnąć ENTER. To wszystko.

Notatka

Dla prawidłowego wygenerowania zależności, moduł 'genfake' należy uruchamiać na pustej, nowoutworzonej bazie.

Ostrzeżenie

Wszystkie dane (oprócz danych administratorów) zostaną usunięte z bazy.


7.5. Poziomy dostępu

W sumie tutaj to wytłumaczę bardziej dla developerów, gdyż osoby korzystające z LMS raczej nie będą zainteresowane.

Oryginalnie poziomy dostępu miały być definiowane poprzez różne litery. Było to założenie z czasów LMS-0.4, lecz nigdy nie wykorzystane. Z racji tego, że weszło to do 1.0, długo się głowiłem jak wykorzystać 64-znakowego stringa. Otóż w kolumnie rights jest po prostu 64-znakowa (256-bitowa) liczba heksadecymalna. Każdy jej znak może opisać maksymalnie cztery bity kombinacji (4*64 = 256 - stąd ilość możliwych poziomów). Tak więc włączenie jakiegoś poziomu dostępu powoduje ustawienie w tej liczbie odpowiedniego bitu. I tak jeżeli "pełen dostęp" ma pozycję 0 w lib/accesstable.php, zostanie ustawiony bit 0, czyli będzie to liczba 1. Więc poziomy mogą mieć numery od 0 do 255. Nie jest to finalne ograniczenie. Stosując więcej liter i znaków można rozszerzyć ilość możliwych kombinacji do przynajmniej 6 bitów na znak, co da nam 384 kombinacje.


7.6. Ograniczenia

Każdy system ma ograniczenia. Pewne wynikają z użytego silnika SQL (DBMS) inne zaś z założeń [prawie] świadomie podjętych przez developerów. Nasz system takowe posiada:


7.6.1. Wynikające z naszego projektu

Ilość pieniędzy (tabela 'cash'). Pieniążki (od lms-1.1) przechowujemy jako 32 bitową liczbę całkowitą i w związku z tym za 8 lat będziecie nas nie lubić posiadając około 5000 użytkowników.


7.6.2. Wynikające z używanego DMBS

  • MySQL

    • Rozmiar bazy danych:

      Jak mówi dokumentacja do MySQL'a (rozdział: Table size, paragraf "How Big Can MySQL Tables Be?"), MySQL wersja 3.22 był ograniczony do 4 GB na tabelkę. W wersji zaś 3.23 zostało to podniesione do 8 milionów terabajtów (czyli 2^63 bajtów). Jednak warto zauważyć że różne systemy operacyjne mają limity nakładane przez systemy plików, najczęściej jest to 2 lub 4 GB.

    • Ilość rekordów:

      Prawdziwe informacje na temat limitów uzyskamy dopiero po wydaniu polecenia: (w interpreterze poleceń mysql)

      mysql> show table status;
      
      ...| Avg_row_length | Data_length | Max_data_length | Index_length |
      ...|             44 |       24136 |      4294967295 |        19456 |

      Zauważymy że miejsca wystarczy na około 175 000 razy tyle ile mamy aktualnie wpisów w tabelce. (czyt.: możesz spać spokojnie, chyba że planujesz posiadanie ponad 100000 użytkowników :-)

  • PostgreSQL

    • Rozmiar bazy danych:

      PostgreSQL zapisuje dane w porcjach po 8 kB. Liczba tych bloków jest ograniczona do 32-bitowej liczby całkowitej ze znakiem, dając maksymalną wielkość tabeli wynoszącą 16 terabajtów. Z uwagi na ograniczenia systemów operacyjnych dane przechowywane są w wielu plikach o wielkości 1 GB każdy.

    • Ilość rekordów:

      PostgreSQL nie narzuca ograniczenia na liczbę wierszy w dowolnej tabeli. Jednak funkcja COUNT zwraca 32-bitową liczbę całkowitą, a zatem dla tabel zawierających ponad dwa miliardy wierszy wynik tej funkcji będzie nieprawidłowy. (Informacja dot. PostgreSQL 7.1)