"LMS" jest skrótem od "LAN Management System". Jest to zestaw aplikacji w PHP i Perlu, ułatwiających zarządzanie sieciami osiedlowymi (popularnie zwanymi Amatorskimi Sieciami Komputerowymi), opartych o bazę 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),
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.
Kod PHP:
Łukasz 'Baseciq' Mozer |
Michał 'DziQs' Zapalski |
Radosław 'Warden' Antoniuk |
Krzysztof 'hunter' Drewicz |
Kod C:
Mateusz 'mteg' Golicz |
Kod Perl:
Łukasz 'Baseciq' Mozer |
Michał 'DziQs' Zapalski |
Maciej 'agaran' Pijanka |
Krzysztof 'hunter' Drewicz |
Design:
Łukasz 'Baseciq' Mozer |
HTML, JavaScript, CSS:
Łukasz 'Baseciq' Mozer |
Paweł 'Bob_R' Czerski |
Paweł 'sickone' Kisiela |
Grafika:
Piotr 'Pierzak' M. |
Grzegorz 'byko' Cichowski |
Kuba 'kflis' Flis |
Łukasz 'Baseciq' Mozer |
Support MySQL:
Kuba 'shasta' Jankowski |
Radosław 'Warden' Antoniuk |
Przemysław Babiński |
Support PostgreSQL:
Aleksander 'A.L.E.C' Machniak |
Dokumentacja i strona WWW:
Aleksander 'A.L.E.C' Machniak |
Kuba 'shasta' Jankowski |
Grzegorz 'JaBBaS' Dzięgielewski |
Łukasz 'Baseciq' Mozer |
Marcin 'Lexx' Król |
Betatesterzy:
Grzegorz 'byko' Cichowski |
Radosław 'Warden' Antoniuk |
Tomasz 'dzwonek' Dzwonkowski |
Sebastian 'Victus' Frasunkiewicz |
Kuba 'kflis' Flis |
Krystian 'UFOczek' Kochanowski |
Grzegorz 'JaBBaS' Dzięgielewski |
Andrzej 'chsh' Grądziel |
Marcin 'Lexx' Król |
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.
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.
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.
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.
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.
Informacje o zmianach jakie zaszły w kolejnych wersjach LMS zawarte są w pliku ChangeLog.
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.
Ponieważ LMS-UI jest napisane w PHP, niezbędny jest serwer WWW z interpreterem tego języka. Preferowanym serwerem jest Apache (www.apache.org).
Interpreter powinien być w wersji 4.2.x lub nowszej, chociaż działa też poprawnie na 4.1.x (ale ponieważ devepolerzy pracują na 4.2.3, nie można zagwarantować poprawnej pracy na starszych wersjach. PHP można sciągnąć ze strony www.php.net.
Preferowany to MySQL. 3.23.53 i nowszy. Starszy może też działać, jeśli nie to daj nam o tym znać.
LMS współpracuje także z PostgreSQL. Zaleca się instalację wersji 7.3 lub nowszych, aczkolwiek nie powinno być problemów z wersjami od 7.2.3 począwszy.
LMS-UI do pracy wymaga jeszcze biblioteki Smarty (http://smarty.php.net) w wersji 2.5.0 lub wyższej.
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);
Po pobraniu ze strony www.lms.rulez.pl rozpakuj archiwum:
$ tar zxvf lms-x.x.x.tar.gza następnie przenieś pliki z LMS-UI do katalogu osiągalnego z poziomu serwera www (np. /var/www/lms).
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.
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.
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
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;
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.
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.
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 &
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
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
![]() | 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ędzisz mógł użyć nowo utworzonego konta.
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.
![]() | Pamiętaj o usunięciu średników na początku linii z ustawianym parametrem konfiguracyjnym. |
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 (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: root
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
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/
![]() | 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
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 sekudnach) użytkownik zostanie wylogowany jeżeli nie podejmie żadnej akcji. Domyślnie 600 sekund.
Przykład: timeout = 900
![]() | 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
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 pronuje rozwagę i pomyślenie co się robi i jak :) Generalnie średniki powinny być parsowane przez bash'a, ale z paru zględów LMS sam dzieli poniższy ciąg pod względem średników i wykonuje komendy pojedyńczo.
Przykład: reload_execcmd = "sudo /usr/bin/reload_lms.sh"
reload_sqlquery
Query SQL'a. Generalnie, LMS przy nie ustawionym swoim własnym QUERY robi dziwne rzeczy, które ja już wymyśliłem. Chwilowo pewnie wogóle nie kompatybilne z mteg'owym demonikiem, ale pracujemy nad uzgodnieniem formatu. Jak ktoś bardzo chce, to można użyć '%TIME%' jako podstawki pod aktualny timestamp unixowy. UWAGA! Znak średnika jest traktowany jako separator kwerend. Tj. oddzielając znakiem średnika możesz wpisać kilka komend MySQL'a.
Przykład: reload_sqlquery = "INSERT INTO reload VALUES ('1','%TIME%')"
force_ssl
Wymuszanie SSL'a. Ustawinie 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 email będą szły maile wysyłane z sekcji 'mailing' LMS'a, zamiast do właściwych użytkowników.
Przykład: debug_email = root@localhost
enable_stats
Włączenie/wyłączenie dostępności w menu modułu 'traffic'. Domyślnie wyłączone.
Przykład: enable_stats = 1
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
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
brak dostępu do modyfikacji i zakładania kont administratorów
brak dostępu
![]() | Jeśli nie ustawimy administratorowi żadnej reguły dostępu, to LMS domyślnie przydzieli mu regułkę 0, czyli pełen dostęp. |
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. |
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 tworzenie kopii bazy danych oraz zarządzanie skryptami wykonywalnymi.
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.
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.
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 oraz operacjach finansowych. Tam też możesz zaksięgować wpłatę lub obciążenie jego rachunku.
W menu znajdującym się u góry okna masz do wyboru opcje: filtrowania listy, dodawania nowych użytkowników, wyszukiwania w bazie wg zadanych kryteriów oraz wydruku listy.
Ikona żarówki służy do zmiany statusu (podłączony/odłączony) użytkowników.
![]() | Do automatycznego odłączania użytkowników, których bilans jest poniżej zadanej wartości służy skrypt lms-cutoff. |
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. W górnym menu dostępna jest opcja wydruku listy. Zmiany statusu komputera 'włączony/wyłączony' dokonuje się kliknięciem na ikonę żarówki w odpowiedniej linii.
![]() | Aby dodać nowy komputer musisz wcześniej utworzyć użytkownika oraz sieć, którym go przypiszesz. |
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.
Tutaj definiujesz dane swojej sieci tj. klasę adresową, domenę, DNS'y, Gateway, zakres DHCP. Na liście dostępna jest również ilość zajętych i dostepnych 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.
Jest to właściwie wiele modułów umożliwiających zarządzanie finansami sieci.
Masz możliwość definiowania taryf abonamentowych i określenia kwoty abonamentu oraz ograniczeń upstream, downstream wykorzystywanych później podczas generowania plików konfiguracyjnych.
Dostępny z górnego menu 'Bilans Finansowy' to historia rachunku z podsumowaniem przychodu i rozchodu. 'Nowa Operacja' umożliwia zaksięgowanie nowych wpłat i obciążeń użytkowników lub wydatków i przychodów sieci.
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.
![]() | Serwer musi być odpowiednio skonfigurowany do użycia funkcji mail(). |
![]() | Do automatycznego wysyłania upomnień do użytkowników zalegających z opłatami polecam. skrypt lms-notify. |
Kliknięcie na menu 'Przeładowanie' spowoduje przeładowanie konfiguracji zdefiniowanej dla generatora plików konfiguracyjnych lms-mgc. Więcej informacji znajdziesz w rozdziale dotyczącym lms-mgc.
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.
![]() | 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.
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'.
LMS umożliwia wystawianie faktur. Opcja ta jest standardowo wyłączona, dlatego na wstępie musisz w sekcji [finances] lms.ini ustawić następujące parametry:
enable_faktury
Włączenie modułu wystawiania faktur
Przykład: enable_faktury = 1
name
Nazwa sieci/organizacji na fakturze
Przykład: name = "Blokowa Sieć Komputerowa K-27"
address
Adres sieci
Przykład: address = "Wiosenna 52"
zip
Kod pocztowy
Przykład: zip = "39-300"
city
Nazwa miasta
Przykład: city = "Mielec"
deadline
Termin zaplaty w dniach
Przykład: deadline = 5
bank
Nazwa banku
Przykład: bank = "Bank S.A. O/Mielec"
account
Numer konta bankowego
Przykład: account = "123-456789-01"
footer
Stopka widoczna na fakturze
Przykład: footer = "BSK K-27 w Mielcu, tel.5839455, fax.1234567"
template
Szablon faktury do użycia
Przykład: template = /etc/lms/faktura.rtf
Szablon jest niczym innym jak dokumentem tekstowym w formacie RTF (tekstowym) lub html który można stworzyć pod dowolnym programem obsługującym RTF. Plik ten powinien wyglądać jak gotowa faktura, a pozycje które mają być rozwijane przez LMS należy zastąpić następującymi słowami kluczowymi:
%nabywca - jest rozwijany do imienia i nazwiska nabywcy
%nab_adres - jest rozwijany do adresu nabywcy (ulica)
%nab_adres_cd - jest rozwijany do adresu nabywcy (kod pocztowy i miasto)
%nip - nip nabywcy
%nr_klienta - numer klienta (ID) z bazy użytkowników
%sprzedawca - nazwa sprzedawcy
%sprzed_adres - adres sprzedawcy
%sprzed_adres_cd - ciąg dalszy adreu sprzedawcy
%numer - numer kolejny faktury w postaci id_operacji_kasowej/rok
%data - data wystawienia faktury
%termin - termin zapłaty (ilość dni ustawia się w lms.ini)
%dni - ilość dni do zapłaty, można ustawić j/w
%usluga - nazwa usługi, jak nazwa jest pobierany opis operacji kasowej
%od - pierwszy dzień okresu świadczenia usługi (pierwszy dzień miesiąca, w ktorym było wpisane obciążenie do bazy)
%do - ostatni dzień okresu świadczenia usługi (ostatni dzień miesiąca, w ktorym było wpisane obciążenie do bazy)
%netto - wartość usługi netto, bezpośrednio przepisana z bazy
%brutto - netto + 7% VAT
%vat - wartość VAT (netto * 7%)
%slownie - kwota do zapłaty słownie
%konto - jest rozwijane do numeru konta bankowego
%wystawil - jest rozwijane do danych administratora zalogowanego aktualnie w LMS
%stopka - pozwala na wpisanie danych do stopki
![]() | Przykładowy szablon znajduje się w katalogu sample (faktura.rtf) i był testowany pod OpenOffice i M$ Office. |
Wystawianie faktur jest dostępne w oknie 'Rachunek użytkownika', do którego trafisz wybierając żądanego użytkownika z listy użytkownków.
![]() | W bazie danych zapisywane są kwoty netto. Jak na razie, nie ma możliwości ustawienia kilku stawek podatku VAT. |
![]() | Do postaci słownej rozwiązywane są liczby mniejsze od 999. |
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.
![]() | Menu 'Statystyki' jest standardowo niedostępne. Aby je włączyć, należy w sekcji [phpui] pliku lms.ini ustawić zmienną: enable_stats = 1. |
![]() | Zapisem danych do bazy zajmuje się skrypt lms-traffic, dlatego należy go zainstalować aby mieć w bazie dane do wykresów. |
W zależności od wybranej przez użytkownika częstotliwości, 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.
![]() | Kompaktowanie bazy danych jest procesem nieodwracalnym. |
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
Tabela 4-1. Lista skryptów wykonywalnych
Nazwa | Opis |
---|---|
lms-notify | Korespondencja seryjna do użytkowników sieci |
lms-cutoff | Odłączanie użytkowników zadłużonych |
lms-payments | Naliczanie opłat okresowych (abonamentowych) |
lms-traffic | Zapis statystyk wykorzystania łącza |
lms-traffic-logiptables | Współpraca lms-traffic z iptables |
lms-makearp | Tworzenie tablicy ARP (/etc/ethers) |
lms-makedhcpconf | Konfiguracja serwera DHCP(/etc/ethers) |
lms-makeiptables | Konfiguracja firewalla iptables |
lms-makeipchains | Konfiguracja firewalla ipchains |
lms-makeiodenconf | Konfiguracja oident |
lms-makeopenbsdpf | Konfiguracja firewalla dla systemu OpenBSD |
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.
W plikach 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 bierzą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 email: gerwazy@staff.naszasiec.pl Gwidon Mniejważny telefon: 0-606666666 email: 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/
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 email z upomnieniem. Domyślnie limit = 0
Przykład: limit = -20
mailsubject (wymagany)
Pozwala na ustalenie tematu emaila 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 nieustawione.
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 nieustawione
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 email 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 nieustawiony.
Przykład: debug_email = lexx@domain.pl
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 limit = 0
Przykład: limit = -20
Skrypt po uruchomieniu nalicza użytkownikom opłatę abonamentową. Aby działał poprawnie powinien być uruchamiany codziennie.
Skrypt ten nie posiada żadnych opcji konfiguracyjnych.
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'.
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.
![]() | 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
![]() | 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. |
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)
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 kadego IP;
Konfigurację dla LMS-MGC przeprowadza się w pliku lms-mgc.ini
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
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
Każda instancja ma swoją nazwę i jej konfigruację 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:
outfile
Definiuje plik do którego ma być zapisany wynik działania bierzącej instancji (jeżeli ta zmienna 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
![]() | Właściciel musi być podany numerycznie! |
outfile_group
Pozwala na ustawienie grupy pliku wyjściowego (domyślnie 0)
Przykład: outfile_group = 0
![]() | Grupa musi być podana numerycznie! |
header_file
Pozwala na umieszczenie w pliku wynikowym zawaroś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
![]() | Znak \n został tu użyty jako seperator 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;
![]() | 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 zawaroś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
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;
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.masqDopiszmy 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.
Tabela 6-1. Drzewo katalogów LMS
Nazwa | Opis |
---|---|
backups | Kopie zapasowe bazy danych |
bin | Skrypty wykonywalne lms-... |
contrib | Dodatki stworzone przez użytkowników LMS |
devel | Skrypty przydatne dla developerów |
doc | Dokumentacja |
img | Obrazki do Interfejsu Użytkownka |
lib | LMS'owy zbiór bibliotek PHP oraz Smarty |
modules | Moduły Interfejsu Użytkownika |
sample | Przykładowe skrypty i inne dodatki |
templates | Temlejty Smarty dla Interfejsu Użytkownika |
templates_c | Pliki tymczasowe |
Poniżej przedstawiono ogólną strukturę bazy danych LMS. Bardziej szczegółowe informacje o typach danych, ograniczeniach nakładanych na pola oraz wartości domyslne zawarte są w plikach lms.mysql oraz lms.pgsql w katalogu /doc.
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ć |
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 |
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 |
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 |
id - identyfikator |
name - nazwa |
mac - adres MAC |
ipaddr - adres IP |
ownerid - identyfikator właściciela (użytkownika) |
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łaczony |
id - identyfikator |
name - nazwa |
location - lokalizacja |
description - opis |
producer - producent |
model - model |
serialnumber - numer seryjny |
ports - ilość portów |
id - identyfikator |
time - znacznik czasu zaksięgowania operacji |
adminid - identyfikator administratora dokonującego operacji |
type - typ operacji (przychów, rozchód, wpłata, obciążenie) |
value - wartość w złotych |
userid - identyfikator użytkownika ('0' - jeśli nie dotyczy) |
comment - opis operacji |
id - identyfikator |
name - nazwa |
value - wartość netto w złotych |
uprate - ograniczenie szybkości transferu danych wychodzących |
downrate - ograniczenie szybkości transferu danych przychodzących |
description - opis |
id - identyfikator |
tariffid - identyfikator taryfy |
userid - identyfikator użytkownika |
period - okres (ilość dni) |
at - dzień naliczania |
nodeid - numer komputera |
dt - znacznik czasu |
upload - ilość danych wysłanych w bajtach |
download - ilość danych odebranych w bajtach |
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 poprostu 64-znakowa (256-bitowa) liczba hexadecymalna. 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.
Każdy system ma ograniczenia. Pewne wynikaja z użytego silnika SQL (DBMS) inne zaś z założeń [prawie] świadomie podjętych przez developerów. Nasz system takowe posiada:
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.
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ć spkojnie, 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śc 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)