"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, PostgreSQL lub SQLite. 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),
generowanie mapy sieci,
prowadzenie prostego rachunku operacji finansowych oraz stanu funduszów sieci,
zestawienia finansowe, fakturowanie,
różne opłaty i 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,
system obsługi zgłoszeń (Helpdesk).
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 |
Marcin 'Lexx' Król |
Aleksander A.L.E.C Machniak |
Kod C:
Aleksander 'A.L.E.C' Machniak |
Marcin 'Lexx' Król |
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 |
Jakub 'Jimmac' Steiner |
Support MySQL:
Kuba 'shasta' Jankowski |
Radosław 'Warden' Antoniuk |
Przemysław Babiński |
Support Postgresql i SQLite:
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ć Perl'a. Skrypty pozwalają m.in. na comiesięczne naliczanie opłat abonamentowych bądź wysyłanie upomnień. Największy z nich - LMS-MGC 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.
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ż developerzy pracują na 4.2.3, nie można zagwarantować poprawnej pracy na starszych wersjach (unikać wersji 4.2.2). PHP można ściągnąć ze strony www.php.net.
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.
Przy współpracy LMS'a z bazą danych SQLite nie stwierdzono żadnych problemów z tym, że jedyną przetestowaną wersją jest wersja 2.8.11.
W celach eksperymentalnych/poznawczych wprowadzono możliwość uruchomienia interfejsu użytkownika na bazie danych MS SQL Server 2000.
LMS-UI do pracy wymaga jeszcze biblioteki Smarty (http://smarty.php.net) w wersji 2.5.0 lub wyższej (unikać wersji 2.6.4).
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, które można pobrać z www.cpan.org, 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);
DBD-SQLite (Jeśli masz zamiar używać bazę SQLite);
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.
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/stable/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
![]() | 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.
![]() | 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. |
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,alter 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.
Ta jednoplikowa baza jest chwalona za swoją szybkość, wg autorów określaną na 2-3 krotnie szybszą od MySQL. Poza tym przy odpowiedniej konfiguracji umożliwia wczytanie całej bazy do pamięci RAM przez co osiągany jest znaczny wzrost wydajności. Poniżej przedstawiono krótki opis instalacji. Źródła można pobrać z www.sqlite.org.
Opisano tutaj sposób instalacji bibliotek SQLite oraz dodanie obsługi tej bazy do PHP (PHP w wersji 5.0 ma wbudowaną obsługę SQLite). Po rozpakowaniu źródeł, wejdź do katalogu z SQLite i wydaj kolejno polecenia (ścieżki przykładowe):
$ ./configure $ make $ make install $ ldconfig $ pear download http://pecl.php.net/get/SQLite-1.0.2.tgz $ pear install SQLite-1.0.2.tgzNastępnie w pliku php.ini ustaw:
extension=sqlite.soIstnieje również możliwość wkompilowania obsługi SQLite w PHP przy pomocy opcji --with-sqlite.
Konieczne to jest jeżeli uruchamiasz LMS po raz PIERWSZY. Tak więc, wejdź do katalogu w którym masz LMS'a i uruchom shell sqlite'a:
$ sqlite -init doc/lms.sqlite /usr/local/lms/lms.db sqlite> .exit $ chown 99.98 /usr/local/lms/lms
Jednym z ograniczeń SQLite jest brak autentykacji użytkowników, dlatego konfiguracja ogranicza się do podania typu oraz ścieżki do pliku bazy. W sekcji [database] pliku /etc/lms/lms.ini podajemy:
type = sqlite database = /usr/local/lms/lms.db
Po takim zabiegu, 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.
LMS na bazie Microsoftu? Czemu nie. W celach poznawczych i eksperymentalnych dodano możliwość podłaczenia LMSa do tej bazy. Nie należy jednak liczyć na jakikolwiek support z tym związany, ale traktować to raczej jako ciekawostkę. Nie można także zagwarantować że pomysł będzie rozwijany. Niemniej ze wstępnych testów przy użyciu MS SQL Server 2000 wynika, że jest to możliwe.
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 na razie nie widać większych problemów z 'postgres' i 'sqlite'. 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 '/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 (a w przypadku SQLite ścieżka do pliku bazy), 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 sekundach) 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
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
ticketlist_pagelimit
Limit wyświetlanych pozycji na stronie w liście zgłoszeń. Domyślnie: 100
Przykład: ticketlist_pagelimit = 50
networkhosts_pagelimit
Ilość komputerów wyświetlanych na jednej stronie w informacjach o sieci. Domyślnie: 256.
Przykład: networkhosts_pagelimit = 1024
accountlist_pagelimit
Limit wyświetlanych pozycji na stronie w liście kont. Domyślnie: 100.
Przykład: accountlist_pagelimit = 25
domainlist_pagelimit
Limit wyświetlanych pozycji na stronie w liście domen. Domyślnie: 100.
Przykład: domainlist_pagelimit = 25
aliaslist_pagelimit
Limit wyświetlanych pozycji na stronie w liście aliasów. Domyślnie: 100.
Przykład: aliaslist_pagelimit = 25
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żyta aktualna data jako dzień zapłaty podczas przypisywania zobowiązań użytkownikom. Domyślnie wyłączone.
Przykład: use_current_payday = 1
lastonline_limit
Określa czas (w sekundach), po którym komputer zostaje uznany za nieaktywny. Powinien odpowiadać częstotliwości uruchamiania skryptu badającego aktywność komputerów (np.lms-fping). Domyślnie: 600.
Przykład: lastonline_limit = 300
arpd_servers
Lista serwerów arpd do zczytywania MAC'adresów z odległych sieci. Lista ta powinna zawierać wpisy w postaci adresIP[:port] oddzielone spacjami. Domyślnie pusta.
Przykład: arpd_servers = 192.168.1.1 192.168.2.1
helpdesk_backend_mode
Włączenie tej opcji spowoduje, że wszystkie wiadomości w systemie helpdesk (oprócz tych skierowanych do zgłaszającego) będą wysyłane do serwera pocztowego na adres odpowiedniej kolejki. Na serwerze tym powinien być uruchomiony skrypt lms-rtparser, który zajmie się zapisem wiadomości do bazy danych. Domyślnie: wyłączona.
Przykład: helpdesk_backend_mode = 1
contract_template
Własny szablon umowy z użytkownikiem. Można także dostosować domyślny szablon. Domyślnie: contract.html.
Przykład: contract_template = "../my_templates/contract.html"
to_words_short_format
Określa format reprezentacji słownej kwot (na fakturach). Dla wartości "1" rozwinięciem kwoty 123,15 będzie "jed dwa trz 15/100". Domyślnie: 0.
Przykład: to_words_short_format = 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
włączanie i odłączanie komputerów
manipulacja finansami
przeładowywanie konfiguracji
manipulacja danymi użytkowników
manipulacja danymi komputerów
dostęp do statystyk
dostęp do korespondencji seryjnej
zarządzanie Helpdeskiem (RT)
obsługa Helpdesku (RT)
manipulacja kontami
konfiguracja interfejsu użytkownika
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. |
Uaktualnienie LMS'a przebiega w dwóch etapach. Najpierw utwórz katalog z plikami nowej wersji (nie zaleca się nadpisywania starych plików nowymi), następnie trzeba dokonać zmian w bazie.
Dla ułatwienia migracji danych w katalogu /doc przygotowano pliki UPGRADE-1.0-1.5.mysql i UPGRADE-1.0-1.5.pgsql dla przejścia od wersji 1.0 do wersji 1.5 oraz UPGRADE-1.2-1.5.mysql i UPGRADE-1.2-1.5.pgsql przy migracji od wersji 1.2 (oraz 1.3.0) do bieżącej. W nich znajdziesz krótki opis jak przeprowadzić aktualizację w zależności od stosowanej bazy danych. W wersjach o numerze wyższym od 1.3.0 aktualizacja struktury bazy danych następuje automatycznie podczas pierwszego logowania.
![]() | W wersjach wyższych od 1.0.x biblioteka ADOdb nie jest wymagana, można skasować odpowiedni katalog z katalogu /lib |
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.
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 znajdziesz się w module (menu) administracji systemem LMS. Tutaj znajdziesz niezbędne informacje o systemie. Będziesz mógł zarządzać administratorami i tworzyć/odtwarzać kopie bazy danych.
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. W polach szybkiego wyszukiwania, oprócz id użytkownika lub komputera, możesz podawać nazwisko, nazwę, fragment adresu, telefon, email, adres IP lub MAC. W przypadku gdy w bazie znajduje się więcej użytkowników pasujących do szukanych danych zostaną wyświetlone informacje tylko o jednym użytkowniku lub komputerze.
To panel na którym znajdują się podstawowe informacje na temat naszego systemu: wersja LMS i jego składników, informacje o prawach autorskich, wersja jądra i uptime serwera, dane statystyczne o użytkownikach i komputerach, bieżące informacje o aktywności komputerów i stanie finansów sieci. Ponadto znajdziesz tu przydatne lms'owe linki.
Panel 'Administratorzy' służy do zarządzania kontami administratorów, czyli osób korzystających z LMS'a, zakładania i przeglądania ich kont, zmiany haseł i definiowania praw dostępu.
Prawa dostępu zostały szczegółowo opisane w rozdziale Prawa dostępu.
Po wybraniu menu 'Administratorzy' zobaczysz listę wszystkich administratorów z informacją o ostatnim logowaniu. 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 administrator'.
Aby dodać nowe konto administratora należy podać login oraz hasło, które nie może być puste. Podanie imienia, nazwiska i adresu poczty elektronicznej nie jest wymagane. Poniżej można zaznaczyć uprawnienia dostępu do systemu. Jeżeli wszystkie pola pozostawisz puste, administratorowi przypisany zostanie 'Pełen dostęp'.
Z panelu 'Kopie zapasowe' możesz zarządzać kopiami awaryjnymi danych z bazy LMSa. Kopia bazy to plik tekstowy zawierający zapytania SQL i dane z 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. Kliknięcie na ikonkę Odtwórz spowoduje wyczyszczenie bieżącej bazy danych i załadowanie do niej danych z wybranego pliku kopii. Tuż przed odtworzeniem tworzona jest kopia aktualnej bazy danych.
Począwszy od wersji 1.5.3 możliwa jest konfiguracja interfejsu użytkownika także poprzez LMS-UI. Opcje przechowywane są w bazie danych i należy je przenieść z pliku lms.ini. Do tego celu służy moduł upgrade02, który jest automatycznie wykonywany po kliknięciu linku znajdującego się na pustej liście opcji konfiguracyjnych.
![]() | Opcje konfigurowane w LMS-UI mają większy priorytet od tych zapisanych w lms.ini, co oznacza, że plik konfiguracyjny jest także odczytywany, ale wartości zmiennych z tego pliku nadpisywane są wartościami zapisanymi w bazie danych. |
Aby dodać nową opcję kliknij link 'Dodaj opcję' na dole listy. Aby wyedytować parametry opcji kliknij na jej rekord. Zostaniesz przeniesiony do formularza edycyjnego, gdzie możesz również usunąć opcję. Zmiana statusu opcji onacza włączenie/wyłączenie jej działania, co polega na przypisaniu jej wartości domyślnej (jeżeli taką posiada).
Tutaj zarządzasz danymi użytkowników twojej sieci i ich finansami, ale także ich komputerami. Możesz na przykład jednym kliknięciem odłączyć wszystkie komputery użytkownika.
![]() | Do automatycznego odłączania komputerów użytkowników, których bilans jest poniżej zadanej wartości służy skrypt lms-cutoff. |
Po wejściu do panelu 'Użytkownicy' ukaże się lista użytkowników, którą możesz filtrować według wybranych kryteriów (statusu, grupy lub sieci) lub sortować klikając na nazwie kolumny. Na liście ikona żarówki informuje o statusie podłączenia komputerów użytkownika, a ikona znaku drogowego o statusie ostrzeżeń. Kliknięcie na nich zmienia status na przeciwny w stosunku do wszystkich komputerów danego użytkownika. Gdy użytkownik nie posiada przypisanych żadnych komputerów ikony te zostaną zamienione znakiem wykrzyknika.
U użytkowników z saldem ujemnym pojawia się link "Rozlicz", pozwalający na zaksięgowanie jednym kliknięciem wpłaty równoważącej ujemne saldo.
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.
Dodając nowego użytkownika podajesz jego nazwisko/nazwę i dane teleadresowe oraz status (podłączony/oczekujący/zainteresowany).
![]() | Często zgłaszane jest blędne kapitalizowanie narodowych znaków diakrytycznych. Odpowiedzialny za to jest serwer bazy danych i rozwiązania należy szukać w jego konfiguracji. |
Możliwe jest wyszukiwanie użytkowników (także usuniętych) wg zadanych kryteriów. Moduł ten, od pola szybkiego wyszukiwania z menu po lewej stronie, oprócz tego, że jest bardziej rozbudowany i pozwala wyszukiwać wg wielu kryteriów, różni się także tym, że zwraca listę użytkowników spełniających podane kryteria.
Tutaj zarządzasz grupami użytkowników. Po kliknięciu menu 'Grupy' ukaże ci się lista grup z podstawowymi informacjami o grupach. Klikając na wybranej grupie przejdziesz do modułu, w którym możesz zmienić dane tej sieci, przeglądać oraz przypisywać użytkowników do grup.
Grupa powinna posiadać unikalną nazwę, składającą się z liter, cyfr, znaku myślnika lub podkreślenia. Ponieważ grupy wykorzystywane są w skryptach w nazwie nie może być znaku spacji.
Tutaj można "hurtowo" przypisać treść wiadomości administracyjnej użytkownikom, których wybiera się z listy w lewym oknie. Możliwe jest także włączenie lub wyłączenie ostrzeżeń wszystkim komputerom należącym do wybranych użytkowników.
Zestaw modułów wyświetlających listy w formie przyjaznej dla drukarki zawiera:
Lista użytkowników z wieloma filtrami i dowolnym sortowaniem,
Raport wierzytelności użytkownika(ów) na dany dzień,
Bilans użytkownika za wybrany okres
Panel ten służy do zarządzania komputerami i umożliwia: przeglądanie listy komputerów, wyszukiwanie, dodawanie nowych lub usuwanie już wpisanych do bazy komputerów, a także podgląd i zmianę informacji o nich.
Lista komputerów, ta która pokazuje się po wejściu do panelu 'Komputery'. obejmuje wszystkie komputery w bazie. Można ją sortować klikając na nazwie dowolnej kolumny. W każdym wierszu, po prawej stronie znajdują się ikony służące kolejno do: zmiany statusu komputera [Podłącz/Odłącz], zmiany statusu ostrzeżenia [Ostrzegaj/Nie ostrzegaj], usunięcia z bazy [Usuń], wywołania panelu edycyjnego [Edytuj] oraz wyświetlenia informacji szczegółowych na temat danego komputera [Info]. Do panelu informacyjnego, który jest zintegrowany z panelem informacji o właścicielu komputera można także przejść klikając na podświetlonym wierszu.
Tutaj dodaje się nowe komputery do bazy danych. W tym celu definiujemy nazwę komputera (składającą się z liter, cyfr, znaku podkreślenia lub myślnika), jego właściciela, adres IP, adres MAC oraz status. Przy polach na adresy IP i MAC znajdują się linki do paneli, w których można wybrać dostępny adres IP oraz znaleziony w sieci MAC. Po wpisaniu danych naciśnij "Zapisz". Przy wprowadzaniu danych dla wielu komputerów wygodnie jest zaznaczyć pole "Wywołaj ponownie..."
![]() | 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. |
![]() | Aby dodać komputer musisz mieć sieć i użytkownika, którym go przypiszesz. |
Wyszukiwanie komputerów według zadanych kryteriów. Możesz podać całą lub fragment nazwy komputera oraz jego adresów IP i MAC.
Tutaj definiuje się treść wiadomości administracyjnych dla użytkowników oraz włącza lub wyłącza komputerom ostrzeżenia. Po lewej stronie znajduje się lista, na której komputery z włączonym ostrzeżeniem zaznaczone są kolorem czerwonym. Jesli chcesz tylko zmienić/przypisać użytkownikom treść wiadomości administracyjnej, zaznacz odpowiednie komputery na liście i pozostaw puste pola 'Włącz ostrzeżenia' oraz 'Wyłącz ostrzeżenia'.
Wyświetlenie list komputerów, w formacie przyjaznym dla drukarki z możliwością definiowania filtrów i sortowania podobnie jak na Liście.
W panelu przeznaczonym do ewidencji sprzętu zarządzamy strukturą sieci, urządzeniami typu swich, hub, router, serwer i połączeniami między nimi, a także przyłączonymi do nich komputerami. Każdemu urzędzeniu można przypisać co najmniej jeden adres sieciowy.
Lista urządzeń zawiera ich nazwy i symbole, położenie i opis, a ponadto ilość dostępnych portów. Lista może być sortowana wg dowolnego parametru/kolumny. Kliknięcie na wybranym urządzeniu spowoduje wyświetlenie informacji szczegółowych o nim, gdzie możliwe jest definiowanie połączeń urządzeń i komputerów, adresów IP urządzenia oraz zamiana dwóch urządzeń.
Urządzenie sieciowe powinno posiadać unikalną nazwę. Pozostałe parametry tj. producent, model, nr seryjny, ilość portów, lokalizacja i opis są opcjonalne.
Generowanie graficznej mapy całej sieci, na podstawie danych z bazy lms'a następuje po wybraniu opcji menu 'Mapa'. Możesz zdefiniować, które urządzenie jest nadrzędne w stosunku do pozostałych.
![]() | Do wygenerowania mapy potrzebna jest wbudowana w PHP obsługa biblioteki graficznej GD. |
Na mapie hosty wyłączone oznaczone są kolorem czarnym. Ikona z pytajnikiem oznacza, że dany komputer nie był jeszcze skanowany/włączony. Aby skorzystać z tej funkcjonalności należy, korzystając z crona, uruchamiać skrypt skanujący. Na mapie komputer traktowany jest za włączony jeśli czas ostatniego pozytywnego skanowania nie jest starszy od zadanej wartości (domyślnie 600 sekund). Parametr ten określa się przy pomocy opcji lastonline_limit w sekcji [phpui] pliku konfiguracyjnego. Powyższe odnosi się również do urządzeń z tym, że status urządzenia określa się na podstawie statusu wszystkich jego adresów. Status komputerów jest także widoczny na liście komputerów.
![]() | Do badania aktywności hostów można wykorzystać skrypt lms-fping lub demona almsd. |
Tutaj definiujesz dane swojej sieci tj. klasę adresową, domenę, DNS'y, bramę, zakres DHCP. 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.
Lista sieci oprócz podstawowych danych o sieciach zawiera podsumowanie ilości adresów wolnych i przypisanych. 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].
Podczas edycji danych sieci możesz przeglądać listę komputerów z tej sieci, gdzie w miejscu adresu IP pojawia się nazwa komputera/urządzenia, do którego możesz przejść klikając na odpowiednim polu. Kliknięcie na polu z adresem IP przeniesie Cię do modułu dodawania nowego komputera. Znajdziesz tu także dwa przydatne linki: Porządkuj sieć służący do przeadresowania komputerów, tak aby wyeliminować luki w adresacji oraz Przeadresuj do sieci służący do przenoszenia wszystkich komputerów/urządzeń z tej sieci do innej.
Definiując nową sieć musisz określić jej unikalną nazwę i klasę adresową podając adres IP sieci i maskę. Pozostałe dane są opcjonalne.
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ądania bilansu i historii rachunku oraz sporządzania faktur i zestawień finansowych.
Po wejściu do panelu 'Taryfy i finanse' zobaczysz listę taryf zawierającą podstawowe informacje o nich. 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. W polu 'ilość użytkowników' podana jest liczba użytkowników, którym dana taryfa została przypisana oraz kolejno od lewej (w nawiasie) całkowita liczba przypisań taryfy i liczba aktywnych przypisań taryfy, uwzględniająca okresy obowiązywania.
Definiując nową taryfę musisz podać unikalną nazwę, kwotę i stawkę podatku. Przy czym "zw." w polu stawka podatku oznacza "zwolnienie z podatku".
Lista opłat stałych świadczonych na rzecz innych podmiotów, oprócz elementów standardowych zawiera ikonę [Nalicz], przy pomocy której można obciążyć rachunek sieci. Automatycznym naliczaniem opłat zajmuje się skrypt 'lms-payments' lub odpowiedni moduł demona almsd. 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.
Nowej opłacie stałej przypisujesz unikalną nazwę, wierzyciela oraz kwotę i dzień naliczenia.
Historia operacji finansowych z podsumowaniem przychodu, rozchodu, wpłat i zobowiązań użytkowników. Ikona drukarki umożliwia wydruk faktury odpowiadającej danej pozycji z listy.
Wprowadzanie nowych operacji finansowych. Możliwe jest zaksięgowanie tej samej wpłaty lub obciążenia wielu użytkownikom równocześnie.
![]() | Do naliczania stałych opłat abonamentowych najlepiej wykorzystywać skrypt lms-payments lub demona almsd, które potrafią ponadto wystawiać faktury. |
Lista wystawionych faktur z możliwością wydruku wybranych faktur (ikona [Drukuj]) oraz rozliczenia danej pozycji, czyli zaksięgowania wpłaty (ikona [Rozlicz]).
Ręczne wystawianie faktur dla wybranego użytkownika.
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"
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.
![]() | 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. |
![]() | W bazie danych zapisywane są kwoty brutto. |
Wydruki zestawień finansowych obejmują:
Bilans finansowy sieci obejmujący operacje finansowe za dany okres z możliwością wybrania administratora.
Łączny przychód bezrachunkowy sieci w danym okresie.
Raport wierzytelności na dany dzień, dla wszystkich lub wybranego użytkownika.
Rejestr sprzedaży, czyli zestawienie faktur na dany okres.
Bilans użytkownika na dany okres.
Zarządzanie kontami różnych usług na serwerze jest teraz możliwe. Funkcjonalność ta jest przeznaczona dla zaawansowanych administratorów. Wymaga znajomości tych usług i ich konfiguracji w celu korzystania z bazy danych.
W LMSie można utworzyć cztery rodzaje kont: shell (1), poczta (2), www (4), ftp (8). W nawiasach podano numeryczne wewnętrzne oznaczenie typu konta w bazie. Konta mogą być wielotypowe. Przykładowo, jeśli zdefiniujesz konto shell+poczta+ftp w bazie zostanie zapisana cyfra 11. Oznacza to, że do rozpoznawania typu konta w warunkach WHERE zapytań SQL należy stosować sumowanie binarne (jak na przykładach w dalszej części rozdziału).
Masz także możliwość definiowania domen i aliasów.
Na liście przedstawione są podstawowe informacje o kontach. Możliwe jest dowolne sortowanie listy poprzez kliknięcie nazwy kolumny oraz filtrowanie wg zadanych kryteriów. Przejście do edycji danych konta następuje po wybraniu ikony [Edytuj]. Administrator ma także prawo do zmiany hasła.
Definiując dane konto musisz podać login, hasło i wybrać typ konta oraz przypisać użytkownika (lub utworzyć tzw. konto systemowe). Nazwa domeny jest wymagana tylko dla kont mailowych. Data ważności konta jest opcjonalna. Pozostawienie pustego pola z datą oznacza, że konto nigdy nie wygasa.
Konta (głównie mailowe) mogą posiadać dowolną ilość aliasów. Administrator serwera pocztowego może przekierować (lokalnie) pocztę z wszystkich aliasów do jednego kota. Na liście aliasów przedstawione są podstawowe informacje o nich i o kontach na które aliasy te wskazują. Możliwe jest dowolne sortowanie listy poprzez kliknięcie nazwy kolumny oraz filtrowanie wg zadanych kryteriów. Nie ma możliwości edycji aliasu, należy go usunąć i utworzyć nowy. Dodawanie nowego aliasu następuje poprzez formularz na dole listy.
Na liście przedstawione są podstawowe informacje o zdefiniowanych domenach. Możliwe jest dowolne sortowanie listy poprzez kliknięcie nazwy kolumny. Możliwa jest edycja danych domeny po wybraniu ikony [Edytuj]. Do utworzenia nowej domeny służy formularz na dole listy.
Poniższy listing zawiera istotne fragmenty pliku konfiguracyjnego demona proftpd (w wersji 1.2.10) umożliwiający przechowywanie danych o kontach ftp w bazie LMSa. Przykład zawiera konfigurację dla bazy danych PostgreSQL, w komentarzach podano rozwiązania dla MySQLa:
Przykład 3-1. Konta. Konfiguracja proftpd.
ServerName "LMS FTP Server" #nazwa_bazy@host:port użytkownik hasło SQLConnectInfo lms@localhost:5432 lms mypassword SQLAuthTypes Crypt Plaintext SQLUserInfo passwd login password uid NULL home NULL RequireValidShell off SQLAuthenticate users # utworzenie katalogu domowego gdy nie istnieje SQLHomedirOnDemand on # komunikat przy logowaniu SQLShowInfo PASS "230" "Last login: %{getlastlogin}" SQLLog PASS setlastlogin # SQLNamedQuery getlastlogin SELECT "CASE lastlogin WHEN 0 THEN '' ELSE FROM_UNIXTIME(lastlogin) END FROM passwd WHERE login='%u'" # SQLNamedQuery setlastlogin UPDATE "lastlogin=UNIX_TIMESTAMP() WHERE login='%u'" passwd SQLNamedQuery getlastlogin SELECT "CASE lastlogin WHEN 0 THEN '' ELSE lastlogin::abstime::timestamp::text END FROM passwd WHERE login='%u'" SQLNamedQuery setlastlogin UPDATE "lastlogin=EXTRACT(EPOCH FROM CURRENT_TIMESTAMP(0)) WHERE login='%u'" passwd # Sprawdzamy datę ważności konta oraz ograniczamy szukanie do kont ftp # SQLUserWhereClause "type & 8 = 8 AND (expdate = 0 OR expdate > UNIX_TIMESTAMP())" SQLUserWhereClause "type & 8 = 8 AND (expdate = 0 OR expdate > EXTRACT(EPOCH FROM CURRENT_TIMESTAMP(0)))"
W kolejnym przykładzie przedstawimy jak skonfigurować serwer Postfix 2.1.1 oraz Cyrus-SASL 2.1.19, Courier-IMAP/POP3 3.0.4, aby korzystały z bazy danych LMSa. LMS'owe konta będą kontami wirtualnymi, a poczta przechowywana będzie w formacie Maildir.
Ponieważ hasła w LMS'ie są szyfrowane, wymagane jest zainstalowanie SASL'a z łatą pozwalającą na to. W komentarzach podano wartości opcji charakterystycznych dla bazy MySQL. Listing zawiera tylko opcje bezpośrednio związane z bazą danych:
Przykład 3-2. Konta. Konfiguracja serwera pocztowego (postfix+sasl+courier).
# Plik smtpd.conf (Cyrus-SASL): pwcheck_method: auxprop #sql_engine: mysql sql_engine: pgsql sql_user: lms sql_passwd: hasło sql_hostnames: localhost sql_database: lms #sql_select: SELECT password FROM passwd, domains WHERE domainid = domains.id # AND login='%u' AND domains.name ='%r' AND type & 2 = 2 # AND (expdate = 0 OR expdate > UNIX_TIMESTAMP()) sql_select: SELECT password FROM passwd, domains WHERE domainid = domains.id AND login='%u' AND domains.name ='%r' AND type & 2 = 2 AND (expdate = 0 OR expdate > EXTRACT(EPOCH FROM CURRENT_TIMESTAMP(0))) password_format: crypt mech_list: login plain # authpgsqlrc (lub authmysqlrc) (Courier): #MYSQL_PORT 3306 PGSQL_PORT 5432 #MYSQL_USERNAME lms PGSQL_USERNAME lms #MYSQL_PASSWORD hasło PGSQL_PASSWORD hasło #MYSQL_DATABASE lms PGSQL_DATABASE lms #MYSQL_SELECT_CLAUSE SELECT login, \ # password, '', 104, 104, '/var/spool/mail/virtual', \ # CONCAT(login,'/'), '', login, '' \ # FROM passwd, domains WHERE domainid = domains.id # AND login = '$(local_part)' AND domains.name = '$(domain)' \ # AND type & 2 = 2 AND (expdate = 0 OR expdate > UNIX_TIMESTAMP()) PGSQL_SELECT_CLAUSE SELECT login, \ password, '', 104, 104, '/var/spool/mail/virtual', \ login ||'/', '', login, '' \ FROM passwd, domains WHERE domainid = domains.id \ AND login = '$(local_part)' AND domains.name = '$(domain)' \ AND type & 2 = 2 \ AND (expdate = 0 OR expdate > EXTRACT(EPOCH FROM CURRENT_TIMESTAMP(0))) # main.cf (Postfix): virtual_mailbox_base = /var/spool/mail/virtual virtual_mailbox_domains = pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf virtual_mailbox_maps = pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf virtual_alias_maps = pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf # pgsql_virtual_domains_maps.cf (Postfix): user = lms password = hasło hosts = localhost dbname = lms #MySQL nie obsługuje opcji query, dlatego budujemy zapytanie w inny sposób #select_field = name #table = domains #where_field = name query = SELECT name FROM domains WHERE name = '%s' # pgsql_virtual_mailbox_maps.cf (Postfix): user = lms password = hasło hosts = localhost dbname = lms #table = passwd, domains #select_field = CONCAT(login,'/') #where_field = CONCAT(login,'@',domains.name) additional_conditions = AND domainid = domains.id # AND type & 2 = 2 AND (expdate = 0 OR expdate > UNIX_TIMESTAMP()) query = SELECT login || '/' FROM passwd, domains WHERE domainid = domains.id AND login = '%u' AND domains.name = '%d' AND type & 2 = 2 AND (expdate = 0 OR expdate > EXTRACT(EPOCH FROM CURRENT_TIMESTAMP(0))) # pgsql_virtual_alias_maps.cf (Postfix): user = lms password = hasło hosts = localhost dbname = lms #table = passwd, domains, aliases #select_field = CONCAT(passwd.login,'@',domains.name) #where_field = CONCAT(aliases.login,'@',domains.name) #additional_conditions = AND passwd.domainid = domains.id AND passwd.id = aliases.accountid query = SELECT passwd.login || '@' || domains.name FROM passwd, domains, aliases WHERE passwd.domainid = domains.id AND passwd.id = aliases.accountid AND aliases.login = '%u' AND domains.name = '%d'
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ę odbiorców, do której zostanie wysłany e-mail. Grupę adresatów można określić wg statusu oraz sieci lub grup użytkowników do których należą.
![]() | Serwer musi być odpowiednio skonfigurowany do użycia funkcji mail(). |
![]() | 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. |
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.
Interfejs do przeglądania statystyk wykorzystania łącza w postaci prostych wykresów jest dostępny w menu 'Statystyki'. Dane statystyk zawierają lość danych wysyłanych i pobieranych z Internetu (na danym interfejsie) dla każdego komputera. Korzystając z górnego menu możesz szybko wygenerować statystyki z ostatniej godziny, ostatniego dnia, ostatnich 30 dni lub ostatniego roku.
![]() | Zapisem danych do bazy zajmuje się skrypt lms-traffic, albo demon almsd. |
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).
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 menu 'Kompaktowanie' udostępniono możliwość zmniejszenia rozmiarów bazy statystyk 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. |
Helpdesk (inaczej Request Tracker) to system obsługi zgłoszeń. W systemie można prowadzić bazę wszystkich zgłoszeń i zapytań użytkowników sieci, ale także osób które nie są wpisane do bazy LMS'a. Zgłoszenia można pogrupować w kategorie (kolejki) i wyszukiwać wg zadanych kryteriów. Do każdej kolejki można zdefiniować uprawnienia dla administratorów.
W menu po lewej stronie znajduje się pole szybkiego wyszukiwania zgłoszenia, w którym można podawać jego ID lub nazwisko zgłaszającego je użytkownika. W drugim przypadku zostanie wyświetlona lista wszystkich zgłoszeń danego użytkownika.
Każde zgłoszenie posiada historię, na którą składają się wiadomości od administratorów i użytkowników. Administrator może wysłać swoją wiadomość do użytkownika, klikając 'Wyślij' podczas dodawania wiadomości. (Należy podać e-mail odbiorcy. Adresem nadawcy będzie adres kolejki, a jeśli jest pusty, adres administratora). Wszystkie wiadomości także te wysłane, zostają zapisane w historii zgłoszenia. Zgłoszenie może mieć cztery stany: nowy, otwarty, rozwiązany i martwy.
Skrypt lms-rtparser został stworzony aby umożliwić obsługę systemu i przesyłanie zgłoszeń pocztą elektroniczną.
Na liście kolejek znajdują się podstawowe informacje i statystyki zgłoszeń. Kliknięcie na wybranej kolejce powoduje wyświetlenie listy zgłoszeń. Stąd można także przejść do informacji szczegółowych (w tym także uprawnieniach) o kolejce lub usunąć wybraną kolejkę. Usunięcie kolejki spowoduje także usunięcie zgłoszeń z bazy danych przypisanych do niej.
Kolejka (kategoria) posiada nazwę, opcjonalny opis oraz opcjonalny adres poczty elektronicznej, który używany jest do korespondencji. W tabeli 'Uprawnienia' definiuje się prawa do danej kolejki, które mają moc większą od ogólnych uprawnień administratorów tzn. jeśli admin nie ma praw do danej kolejki, to nawet jeśli ma 'pełny dostęp' zgłoszeń w tej kolejce nie zobaczy. Prawo zapisu (dodawanie/edytowanie zgłoszeń i wiadomości) oznacza automatyczne prawo do odczytu.
Wyszukiwanie zgłoszeń polega na wybraniu z bazy zgłoszeń spełniających wszystkie podane kryteria (warunek AND, nie OR). Możesz podać temat, właściciela, kolejkę, status i zgłaszającego. Klientów sieci wybieraj z listy, dla pozostałych należy podać Nazwisko/Imię i/lub e-mail.
Dodając nowe zgłoszenie należy określić dla niego temat, treść, wybrać kolejkę oraz zgłaszającego użytkownika. Osoby spoza sieci wpisujemy w polach Nazwisko i Imię. Opcjonalnie, jeśli wiadomość została zgłoszona pocztą elektroniczną podajemy adres e-mail (także dla użytkownika zapisanego w bazie).
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-notify-sms | Powiadamianie o zaległościach sms'em |
lms-cutoff | Odłączanie użytkowników zadłużonych |
lms-etherdesc | Generowanie pliku dla iptraf zawierającego pary MAC adres - nazwa hosta |
lms-payments | Naliczanie opłat okresowych (abonamentowych) z fakturowaniem |
lms-traffic | Zapis statystyk wykorzystania łącza |
lms-traffic-logiptables | Statystyki łącza dla iptables |
lms-makearp | Tworzenie tablicy ARP (/etc/ethers) |
lms-makedhcpconf | Konfiguracja serwera DHCP (dhcpd.conf) |
lms-makeiptables | Konfiguracja firewalla iptables |
lms-makeipchains | Konfiguracja firewalla ipchains |
lms-makeopenbsdpf | Konfiguracja firewalla dla systemu OpenBSD |
lms-makeoidentconf | Konfiguracja oident |
lms-sendinvoices | Wysyłanie faktur do użytkowników |
lms-makemacs | Filtrowanie ruchu na bazie adresów źródłowych MAC |
lms-makehosts | Generuje plik /etc/hosts |
lms-makewarnings | Generuje regułki przekierowujące ruch użytkowników zadłużonych |
lms-makemessages | Generuje regułki przekierowujące ruch użytkowników, którym ustawiono wiadomość administracyjną |
lms-fping | Badanie aktywności komputerów. |
lms-rtparser | Backend do Helpdesk'a. |
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 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
%date_month_name - zostanie zastąpione nazwą bieżącego miesiąca, np. marzec
%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:
%pin - numer PIN użytkownika.
%phone1 - pierwszy numer telefonu użytkownika.
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/
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
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
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
Skrypt służący do naliczania opłat abonamentowych przypisanych użytkownikom oraz opłat stałych. Ponadto zapisuje dane do faktur. Aby działał poprawnie powinien być uruchamiany codziennie.
Skrypt ten udostępnia dwie opcje do fakturowania, które można ustawić w sekcji [payments] pliku lms.ini:
deadline (opcjonalny)
Pozwala na ustalenie terminu płatności w dniach. Domyślnie: 14
Przykład: deadline = 7
paytype (opcjonalny)
Określa rodzaj płatności. Domyślnie: 'PRZELEW'
Przykład: paytype = 'GOTÓWKA'
Ponadto mamy do dyspozycji jeden przydatny parametr wiersza poleceń --fakedate (-f). Przy jego użyciu można sprawić, aby skrypt działał z podmienioną datą systemową (w formacie YYYY/MM/DD), na przykład --fakedate=2004/10/10.
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. |
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, ani wywoływanie skryptu lms-traffic.
Konfigurację należy umieścić w sekcji [traffic-logiptables]:
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
Tworzenie pliku konfiguracyjnego serwera DHCP - dhcpd.conf. Konfigurację skryptu umieszcza się w sekcji [dhcp]:
config_file
Lokalizacja pliku wynikowego. Domyślnie: /etc/dhcpd.conf
Przykład: config_file = /tmp/dhcpd.conf
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
usergroups
Lista nazw grup (oddzielonych spacjami), które mają być uwzględnione podczas generowania pliku. Jeśli nie ustawiono, zostanie stworzony konfig dla wszystkich grup.
Przykład: usergroups = grupa1 grupa2
default_lease_time
Domyślny czas dzierżawy. Domyślnie: 86400.
Przykład: default_lease_time = 43200
max_lease_time
Maksymalny czas dzierżawy. Domyślnie: 86400.
Przykład: max_lease_time = 43200
ignore_ddns
Nie generuj wpisu 'ddns-update-style none;' na początku pliku. Przydatne przy starszych (2.2) wersjach demona dhcpd. Domyślnie: wyłączone.
Przykład: ignore_ddns = 1
log_facility
Ustawienie trybu logowania daemona dhcp. Jeżeli puste to tryb domyślny.
Przykład: log_facility = 7
script_owneruid
UID właściciela skryptu określonego w 'config_file'. Domyślnie: 0 (root).
Przykład: script_owneruid = 0
script_ownergid
GID właściciela skryptu określonego w 'config_file'. Domyślnie: 0 (root).
Przykład: script_ownergid = 0
script_permission
Uprawnienia skryptu określonego w 'config_file'. Domyślnie: 600 (rwx------).
Przykład: script_permission = 700
Możesz podać czasy dzierżawy dla konkretnych sieci poprzez stworzenie sekcji [dhcp:nazwasieci] np.:
[dhcp:public-custa] # nazwa sieci małymi literami! default_lease_time = 3600 max_lease_time = 3600Możesz podać gateway, serwer dns, nazwę domeny i wins dla konkretnego hosta poprzez stworzenie sekcji [dhcp:adresip] np.:
[dhcp:213.25.209.216] domain = anotherdomain.pl gateway = 213.25.209.251 dns = 213.25.209.8 wins = 213.25.209.10
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
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
Skrypt służy do wysyłania pocztą elektroniczną faktur, jako załączników do wiadomości. Faktury generowane są na podstawie szablonu dostępnego w lms-ui, dlatego wymagane jest podanie użytkownika i hasła do interfejsu www lms-ui.
W odróżnieniu od pozostałych skrytpów ten wymaga dodatkowych modułów perla: Data::Dumper, LWP::UserAgent, MIME::Entity.
Konfigurację należy umieścić w sekcji [sendinvoices]:
lms_url
Adres do lms-ui. Domyślnie: http://localhost/lms/
Przykład: lms_url = http://lms.mynet.pl
lms_user
Login administratora. Domyślnie: pusty
Przykład: lms_user = admin
lms_password
Hasło do lms-ui. Domyślnie: puste
Przykład: lms_password = moje_hasło
debug_email
Konto pocztowe do testów. Domyślnie: niezdefiniowane.
Przykład: debug_email = admin@mynet.pl
sender_name
Nadawca listu. Domyślnie: niezdefiniowany.
Przykład: sender_name = ASK MyNet
sender_email
Adres nadawcy listu. Domyślnie: niezdefiniowany.
Przykład: sender_email = admin@mynet.pl
tmp_dir
Lokalizacja katalogu tymczasowego. Jeśli nie podano katalog odczytywany jest ze zmiennej środowiskowej 'TMP' lub przyjmowany jest katalog '/tmp'.
Przykład: tmp_dir = /home/user/tmp
Skrypt służący do generowania pliku zawierającego reguły netfiltra filtrujące ruch użytkowników na bazie testu adresu źródłowego MAC. Dla każdego komputera generowana jest jedna reguła dla tablicy nat, zadanego łańcucha, testująca adres źródłowy IP pakietu oraz adres źródłowy MAC ramki. Jeśli testy zakończą się pozytywnie następuje powrót do łańcucha nadrzędnego za pomocą decyzji RETURN. Na końcu listy reguł dodawane są 2 reguły przekierowujące ruch http oraz webcache na podany w konfiguracji adres IP oraz port (z wykorzystaniem decyzji DNAT). Przekierowanie może odbywać się na wirtualny host www z zawiadomieniem użytkownika o zaległościach finansowych bez możliwości wyłączenia zawiadomienia. Na końcu dodawana jest reguła blokująca jakikolwiek inny ruch.
Konfigurację tego skryptu zawiera sekcja [macs] 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 plik konfiguracyjny dla wszystkich sieci.
Przykład: networks = public-custa public-custb
usergroups
Lista nazw grup użytkowników (oddzielonych spacjami), które mają być uwzględnione podczas generowania pliku. Jeśli nie ustawiono, zostanie stworzony plik konfiguracyjny dla wszystkich grup użytkowników.
Przykład: usergroups = osiedle1 osiedle2
iptables_binary
Lokalizacja programu iptables. Domyślnie: /sbin/iptables
Przykład: iptables_binary = /usr/local/sbin/iptables
config_owneruid
UID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_owneruid = 0
config_file
Lokalizacja pliku. Domyślnie: /etc/rc.d/rc.macs.
Przykład: config_file = /etc/conf.d/rc.macs
config_ownergid
GID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_ownergid = 0
config_permission
Uprawnienia pliku skryptu. Domyślnie: 700 (rwx------).
Przykład: config_permission = 700
chain
Łańuch do którego będą dodawane generowane reguły. Domyślnie: MACS.
Przykład: chain = TESTY_MACOW
redirect_address
Adres IP + port na który będzie przekierowywany niesklasyfikowany ruch http i webcache. Domyślnie: 127.0.0.1:80.
Przykład: redirect_address = 192.168.1.1:3000
lock_noaccess
Czy generować regułki testujące z decyzją RETURN dla komputerów, które są odłączone. Domyślnie: 0 (reguły są generowane)
Przykład: lock_noaccess = 1
Skrypt służący do generowania pliku /etc/hosts zawierającego odwzorowania nazw komputerów na adresy IP.
Konfigurację tego skryptu zawiera sekcja [hosts] 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 plik konfiguracyjny dla wszystkich sieci.
Przykład: networks = public-custa public-custb
usergroups
Lista nazw grup użytkowników (oddzielonych spacjami), które mają być uwzględnione podczas generowania pliku. Jeśli nie ustawiono, zostanie stworzony plik konfiguracyjny dla wszystkich grup użytkowników.
Przykład: usergroups = osiedle1 osiedle2
config_owneruid
UID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_owneruid = 0
config_file
Lokalizacja pliku. Domyślnie: /etc/hosts.
Przykład: config_file = /etc/hosts
config_ownergid
GID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_ownergid = 0
config_permission
Uprawnienia pliku skryptu. Domyślnie: 644 (rw-r--r--).
Przykład: config_permission = 600
config_header
Pierwsza linia w pliku /etc/hosts. Domyślnie: 127.0.0.1 localhost localhost.localdomain.
Przykład: config_header = 192.168.1.1 serwer serwer.nasza-siec
Skrypt służący do generowania pliku zawierającego reguły netfiltra przekierowujące ruch http i webcache użytkowników o saldzie mniejszym lub równym od zadanego na zadany adres IP i port (wykorzystywana jest tablica nat, testy adresów źródłowych IP oraz decyzja DNAT).
Konfigurację tego skryptu zawiera sekcja [warnings] 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 plik konfiguracyjny dla wszystkich sieci.
Przykład: networks = public-custa public-custb
usergroups
Lista nazw grup użytkowników (oddzielonych spacjami), które mają być uwzględnione podczas generowania pliku. Jeśli nie ustawiono, zostanie stworzony plik konfiguracyjny dla wszystkich grup użytkowników.
Przykład: usergroups = osiedle1 osiedle2
iptables_binary
Lokalizacja programu iptables. Domyślnie: /sbin/iptables
Przykład: iptables_binary = /usr/local/sbin/iptables
config_owneruid
UID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_owneruid = 0
config_file
Lokalizacja pliku. Domyślnie: /etc/rc.d/rc.warnings.
Przykład: config_file = /etc/conf.d/rc.warnings
config_ownergid
GID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_ownergid = 0
config_permission
Uprawnienia pliku skryptu. Domyślnie: 700 (rwx------).
Przykład: config_permission = 700
chain
Łańuch do którego będą dodawane generowane reguły. Domyślnie: WARNINGS.
Przykład: chain = OSTRZEZENIA
redirect_address
Adres IP + port na który będzie przekierowywany ruch http i webcache pochodzący z hostów dla których ma być włączone ostrzeżenie o zaległościach finansowych. Domyślnie: 127.0.0.1:80.
Przykład: redirect_address = 192.168.1.1:3001
limit
Saldo użytkownika przy którym dla wszystkich komputerów użytkownika generowane są regułki przekierowujące ruch. Domyślnie: 0
Przykład: limit = -85
Skrypt służący do generowania pliku zawierającego reguły netfiltra przekierowujące ruch http i webcache użytkowników dla których zostało włączone przekazywanie wiadomości administracyjnej (ostrzeżenia) na zadany adres IP i port (wykorzystywana jest tablica nat, testy adresów źródłowych IP oraz decyzja DNAT).
Konfigurację tego skryptu zawiera sekcja [messages] 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 plik konfiguracyjny dla wszystkich sieci.
Przykład: networks = public-custa public-custb
usergroups
Lista nazw grup użytkowników (oddzielonych spacjami), które mają być uwzględnione podczas generowania pliku. Jeśli nie ustawiono, zostanie stworzony plik konfiguracyjny dla wszystkich grup użytkowników.
Przykład: usergroups = osiedle1 osiedle2
iptables_binary
Lokalizacja programu iptables. Domyślnie: /sbin/iptables
Przykład: iptables_binary = /usr/local/sbin/iptables
config_owneruid
UID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_owneruid = 0
config_file
Lokalizacja pliku. Domyślnie: /etc/rc.d/rc.messages.
Przykład: config_file = /etc/conf.d/rc.messages
config_ownergid
GID właściciela pliku. Domyślnie: 0 (root).
Przykład: config_ownergid = 0
config_permission
Uprawnienia pliku skryptu. Domyślnie: 700 (rwx------).
Przykład: config_permission = 700
chain
Łańuch do którego będą dodawane generowane reguły. Domyślnie: MESSAGES.
Przykład: chain = WIADOMOSCI
redirect_address
Adres IP + port na który będzie przekierowywany ruch http i webcache pochodzący z hostów dla których ma być włączona wiadomość administracyjna. Domyślnie: 127.0.0.1:80.
Przykład: redirect_address = 192.168.1.1:3002
Skrypt zapisuje do bazy informacje o aktywności komputerów. Do skanowania wykorzystywany jest szybki program fping (z opcjami -ar1). Najpierw tworzona jest lista hostów, a następnie, po wywołaniu fping'a, komputerom włączonym zostaje przypisana data i czas skanowania. Dzięki temu mamy w bazie informacje kiedy dany komputer był ostatnio włączony.
Konfigurację tego skryptu zawiera sekcja [fping] w pliku lms.ini:
networks
Lista nazw sieci (oddzielonych spacjami), które mają być uwzględnione podczas skanowania. Jeśli nie ustawiono przeskanowane zostaną wszystkie komputery.
Przykład: networks = public-custa public-custb
fping_binary
Lokalizacja programu fping. Domyślnie: /usr/sbin/fping
Przykład: fping_binary = /usr/local/sbin/fping
temp_file
Lokalizacja pliku tymczasowego na listę hostów, który po wykonaniu skryptu zostaje usunięty. Domyślnie: /tmp/fping_hosts.
Przykład: temp_file = /tmp/hosts
Jest to tzw. backend dla systemu Helpdesk, czyli scrypt który współpracując z serwerem pocztowym zapisuje do bazy danych wszystkie wiadomości skierowane na adresy Helpdesk'a. Skrypt pobiera z wejścia wiadomość pocztową, parsuje zawartość i umieszcza zgłoszenie w kolejce, wysyłając do zgłaszających potwierdzenie przyjęcia wiadomości. W temacie potwierdzenia znajduje się symbol zgłoszenia. Podczas parsowania wiadomości następuje, na podstawie tematu wiadomości, próba rozpoznania czy wiadomość nie jest odpowiedzią na inną wiadomość z już przypisanym numerem zgłoszenia. Od wiadomości zostają odłączone załączniki i umieszczone w katalogu zdefiniowanym w opcji mail_dir.
Oprócz modułów Perla standardowo wymaganych przez resztę skryptów, należy zainstalować także moduły MIME::Parser i MIME::Words z pakietu MIME-Tools oraz Net::SMTP.
Skrypt można uruchamiać na wiele sposobów. Jednym z nich jest stworzenie skryptu powłoki, który odczytując skrzynkę pocztową wywoła lms-rtparser dla każdego maila. Wygodniejszym zastosowaniem jest jednak zintegrowanie go z serwerem pocztowym. Poniżej przedstawiono sposób podłączenia go do postfixa przy użyciu opcji header_checks.
# plik main.cf: header_checks = regexp:/etc/postfix/header_checks # plik header_checks /^To:.*adres@domena.*/ FILTER filter:dummy # plik master.cf: filter unix - n n - 10 pipe -flags=Rq user=nobody argv=/path/to/lms-rtparser
Kolejny listing to przykład podłączenia parsera do Exima przy użyciu filtrów systemowych:
# plik exim.conf system_filter_pipe_transport = address_pipe # plik system_filter.txt if $recipients is "adres_kolejki@domena.pl" then pipe "/sciezka/do/lms-rtparser -q id_kolejki" endif
![]() | Jeżeli chcesz aby wiadomości wprowadzane poprzez lms-ui były kierowane do parsera, zamiast bezpośrednio zapisywane do bazy, powinieneś włączyć opcję konfiguracyjną helpdesk_backend_mode w sekcji [phpui]. |
Konfigurację tego skryptu zawiera sekcja [rt] w pliku lms.ini:
default_queue
Numer ID kolejki, do której trafią zgłoszenia. Jeśli nie podano, Kolejka zostanie odszukana na podstawie adresu odbiorcy maila. Opcja ta może zostać nadpisana przy pomocy parametru -q przy uruchomieniu skryptu. Domyślnie: niezdefiniowana.
Przykład: default_queue =
mail_from
Nadawca potwierdzenia (adres). Jeśli nie zdefiniowano, zostanie użyty adres kolejki do której zapisano zgłoszenie. Domyślnie: pusty.
Przykład: mail_from = rt@net.pl
mail_from_name
Nadawca potwierdzenia (nazwa). Domyślnie: niezdefiniowana.
Przykład: mail_from_name = 'BOK SuperLAN'
smtp_server
Serwer SMTP, przez który zostanie wysłana wiadomość. Domyślnie: localhost.
Przykład: smtp_server = smtp.mydomain.pl
mail_dir
Katalog w którym zostaną zapisane załączniki. Katalog ten powinien być dostępny dla apache'a i użytkownika uruchamiającego lms-rtparser. Gdy nie ustawiono, załączniki zostaną utracone. Domyślnie: niezdefiniowany.
Przykład: mail_dir = /usr/local/lms/mail
tmp_dir
Katalog tymczasowy. Domyślnie zostanie użyty katalog zdefiniowany w zmiennej systemowej lub /tmp.
Przykład: tmp_dir = /home/user/tmp
auto_open
Włączenie tej opcji spowoduje, że w momencie odebrania wiadomości dotyczącej zgłoszenia zamkniętego (lub martwego) zgłoszenie to zostanie otwarte. Domyślnie: wyłączone.
Przykład: auto_open = 1
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 każdego 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
![]() | Zmienną instances można także umieścić w sekcji dowolnej instancji. Patrz niżej. |
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
![]() | 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 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
![]() | 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 regułek dla kolejnych adresów IP. Robi to w dosyć specyficzny sposób. Tzn. oblicza kolejny adres IP i sprawdza czy zdefiniowano regułę dla hosta i wykonuje pierwszą. Sprawdzanie jest wykonywane w nastepującej kolejności:
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 = 192.168.0.100/32
node(IP)
Przy pomocy tej opcji można zdefiniować regułę dla wybranego komputera. W nawiasie podaje się jego adres IP. Każda sekcja instancji może zawierać dowolną ilość takich opcji.
Przykład: node(192.168.0.20) = ??
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 = ??
grantednode_priv
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_priv = \t\tnode %NAME (%IP/%MAC) unique %ID;
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;
deniednode_priv
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_priv = node %NAME (%IP/%MAC) unique %ID deny;
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;
dhcpnode_priv
Jest przetwarzana gdy dany adres IP zawiera się w klasie DHCP (regułka przetwarzana dla adresów prywatnych)
Przykład: dhcpnode_priv = node unknown (%IP) reject;
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;
freeip_priv
Jest przetwarzana gdy dany adres IP nie jest przypisany do żadnego komputera (regułka przetwarzana dla adresów prywatnych)
Przykład: freeip_priv = node unknown (%IP) lock_as_unused;
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;
default_priv
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_priv = node unknown (%IP) lock_as_intruder;
![]() | lms-mgc sam rozpoznaje który adres należy do klasy publicznej, a który do prywatnej. |
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;
W końcu następuje wygenerowanie końcowej części pliku i wykonanie polecenia systemowego.
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
W opcjach konfiguracyjnych można używać następujących zmiennych, które zostaną podmienione na odpowiednie dane z bazy:
Zmienne dla komputerów:
%IP - adres IP komputera
%ID - ID komputera w bazie
%MAC - adres MAC karty sieciowej
%SMAC - adres MAC pisany małymi literami z usuniętymi dwukropkami
%OWNER - właściciel komputera
%NAME - nazwa komputera dużymi znakami
%name - nazwa komputera małymi znakami
%INFO - opis komputera
%UPRATE - gwarantowany transfer dla danych wychodzących
%DOWNRATE - gwarantowany transfer dla danych przychodzących
%UPCEIL - maksymalny transfer dla danych wychodzących
%DOWNCEIL - maksymalny transfer dla danych przychodzących
%CLIMIT - limit równoczesnych połączeń
%PLIMIT - limit pakietów
%1 %2 %3 %4 - kolejne oktety (od lewej) adresu IP
%NID - ID sieci, do której należy komputer
%NNAME - nazwa sieci dużymi znakami
%nname - nazwa sieci małymi znakami
%NADDR - adres sieci
%NIFACE - interfejs sieci
%NMASK - maska sieci
%NGATE - adres bramy
%NDNS - adres serwera DNS
%NDNS2 - adres drugiego serwera DNS
%NDOMAIN - domena sieci
%NWINS - adres serwera WINS dla tej sieci
%NDHCPS - pierwszy adres DHCP sieci
%NDHCPE - ostatni adres DHCP sieci
Zmienne dla sieci (w opcjach dotyczących tylko sieci):
%ID - ID sieci w bazie
%NAME - nazwa sieci dużymi znakami
%name - nazwa sieci małymi znakami
%ADDR - adres sieci
%IFACE - interfejs
%MASK - maska
%GATE - brama sieci
%DNS - serwer DNS tej sieci
%DNS2 - drugi 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
![]() | W opcji konfiguracyjnej dst_network_header można ponadto użyć powyższych zmiennych ale poprzedzonych literą D (np. %DADDR, %dname) jako parametry sieci docelowych. |
Zmienne które można stosować we wszystkich opcjach:
%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.
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.
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
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-sqlite gdy korzystasz z bazy SQLite (wyłączone) --with-pgsql gdy korzystasz z bazy PostgreSQL (wyłączone) --with-mysql gdy korzystasz 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/includeNastępnie kompilacja i instalacja (umieszczenie demona w katalogu określonym zmienną --prefix):
# make && make installNa 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.
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 command = 'echo "łączę się z bazą"' # polecenie wykonywane przed każdym połączeniem z bazą
![]() | 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"
Zmiana opcji 'instances' oraz dowolnej opcji w sekcjach instancji, w odróżnieniu od pozostałych opcji globalnych, nie wymaga restartu demona.
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', czy 'pinger'. W tym wypadku możesz określić listę instancji do wykonania za pomocą opcji '-i'. Przykładowy wpis do crontab'a wygląda następująco:
1 0 * * * /usr/local/bin/almsd -qi "payments notify"
Poniższy listing przedstawia dostępne opcje linii poleceń programu:
-c ścieżka do pliku konfiguracyjnego (domyślnie: /etc/lms/lms.ini) -i lista instancji (oddzielonych spacją) do przeładowania -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ń
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.
Tabela 6-1. Lista modułów demona almsd
Nazwa | Opis |
---|---|
system | Wywoływanie poleceń powłoki |
dhcp | Konfiguracja serwera dhcpd |
cutoff | Odłączanie użytkowników z zaległościami w opłatach |
dns | Konfiguracja serwera dns |
ethers | Tworzenie pliku /etc/ethers |
hostfile | Moduł uniwersalny (np. tworzenie reguł iptables) |
notify | Powiadamianie użytkowników o zaległościach w opłatach pocztą elektroniczną |
ggnotify | Powiadamianie użytkowników o zaległościach w opłatach przez gadu-gadu |
payments | Naliczanie opłat abonamentowych |
oident | Konfiguracja oident |
tc | Tworzenie reguł HTB |
traffic | Statystyki wykorzystania łącza |
pinger | Badanie aktywności użytkowników |
Jedyne co robi ten moduł to wykonanie zadanego polecenia (listy poleceń) powłoki. Może się przydać gdy chcesz podczas przeładowania konfiguracji wykonać jakąś komendę lub uruchomić zewnętrzny skrypt, na przykład jeden z tych, które możesz znaleźć w katalogu /bin.
W związku z powyższym możesz zdefiniować jedynie treść polecenia. Powłoka powinna sobie także poradzić z listą poleceń oddzielonych średnikami:
command
Polecenie powłoki. Domyślnie: puste.
Przykład: command = 'echo "tu moduł system"'
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. Na końcu usuwane są z bazy nieaktualne obciążenia użytkowników.
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
expiry_days
Określa liczbę dni od daty wygaśnięcia przypisanych użytkownikowi zobowiązań, po której dane tego zobowiązania zostaną usunięte z bazy. Przy ustawieniu na '0' dane zostaną usunięte natychmiast po dacie, do której obowiązywało zobowiązanie. Domyślnie: 30.
Przykład: expiry_days = 365
deadline
Termin płatności podany w dniach. Domyślnie: 14.
Przykład: deadline = 21
paytype
Rozdzaj płatności. Domyślnie: 'PRZELEW'.
Przykład: paytype = 'GOTÓWKA'
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
Poniżej przedstawiono dostępne opcje konfiguracyjne modułu 'notify':
template
Lokalizacja pliku z szablonem wiadomości. Domyślnie: pusty
Przykład: template = 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
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.
Podobnie jak w 'notify' masz do dyspozycji następujące zmienne:
template
Lokalizacja pliku z szablonem wiadomości. Domyślnie: pusty.
Przykład: template = 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
Cutoff zmienia status komputerów na 'odłączony' i/lub włącza ostrzeżenia 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.
Dla modułu 'cutoff' mamy następujące opcje:
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
command
Określa komendę systemową, która zostanie wywołana jeżeli co najmniej jeden użytkownik zostanie odłączony lub zostanie włączone ostrzeżenie. Domyślnie: nieustawiona.
Przykład: command = 'almsd -qi firewall'
warning
Włącza ostrzeżenie dla odłączanego użytkowanika i przypisuje mu określoną w tej opcji treść. Jeżeli pusta, ostrzeżenie nie będzie włączane. Data w ostrzeżeniu ukryta jest pod zmienną '%time'. Domyślnie: 'Automatyczna blokada spowodowana przekroczeniem terminu wpłaty (dd.mm.yyyy)".
Przykład: warning = ""
warnings_only
Ta opcja pozwala zdecydować, czy chcemy użyć naszego modułu wyłącznie do włączania ostrzeżeń. Domyślnie: wyłączona.
Przykład: warnings_only = true
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).
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;}"
networks
Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).
Przykład: networks = "lan1 lan2"
usergroups
Lista nazw grup użytkowników, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).
Przykład: usergroups = "grupa1 grupa2"
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), sieć do której są podłaczone oraz grupy do których należą ich właściciele, 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.
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, '%info' - opisem komputera, '%domain' - domeną, '%net' - nazwą sieci, '%gw' - adresem bramy w sieci do której należy dany komputer. 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ę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).
Przykład: networks = "lan1 lan2"
usergroups
Lista nazw grup użytkowników, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).
Przykład: usergroups = "grupa1 grupa2"
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
'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.
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
Moduł generujący skrypt zawierający polecenia iptables i tc służące do ograniczania pasma i limitowania połączeń użytkownikom. Regułki dla komputerów można dowolnie zdefiniować i wykorzystać nie tylko do "traffic control". Zasada działania skryptu przedstawia się następująco: Najpierw z bazy pobierane są dane dla wszystkich użytkowników. Obliczane są sumy ograniczeń (uprate, downrate, upceil, downceil, limity połączeń) dla każdego użytkownika Następnie wykonywana jest pętla ze sprawdzeniem przynależności do grupy użytkowników i sieci (jeśli określono). Jeśli wartości ograniczeń są różne od zera następuje zapis reguł do pliku z podmianą zmiennych. W regułkach można stosować następujące zmienne: %name - nazwa hosta, %i - adres IP, %m - MAC, %uprate, %downrate, %upceil, %downceil, %plimit, %climit oraz %x - licznik o wartości początkowej 100 zwiększany o jeden dla każdego komputera.
Domyślna polityka tworzenia klas htb zakłada utworzenie jednej klasy dla wszystkich komputerów użytkownika. Może to być zmienione za pomocą opcji 'one_class_per_host'.
Konfiguracja domyślna zakłada, że twój system jest przystosowany do zastosowania htb oraz iptables z modułami limit, connlimit, mark i ipp2p. Możesz sam spatchować jądro lub skorzystać ze źródeł dostępnych na stronie www.inet.one.pl.
Masz do dyspozycji standardowe parametry takie jak usergroups, file, command, networks i dodatkowo opcje definiujące treść regułek tc i firewalla. Domyślna konfiguracja przeznaczona jest dla łącz 512/128 kbit i 100mbit.
![]() | Wartości opcji konfiguracyjnych w lms.ini należy podawać w jednej linii. W przypadku tego modułu może to być niezbyt wygodne, dlatego możesz stworzyć plik z zawartością całego nagłówka (opcja begin), a następnie użyć opcji command do jego sklejenia z resztą skryptu wygenerowaną przez moduł. |
file
Lokalizacja pliku tymczasowego. Domyślnie: /etc/rc.d/rc.htb.
Przykład: file = /tmp/rc.htb
command
Polecenie powłoki wykonywane po utworzeniu pliku. Domyślnie: "sh /etc/rc.d/rc.htb start".
Przykład: command = "chmod 700 /tmp/rc.htb; /tmp/rc.htb start"
begin
Nagłówek skryptu. Domyślnie:
"#!/bin/sh IPT=/usr/sbin/iptables TC=/sbin/tc LAN=eth0 WAN=eth1 BURST="burst 30k" stop () { $IPT -t mangle -D FORWARD -i $WAN -j LIMITS >/dev/null 2>&1 $IPT -t mangle -D FORWARD -o $WAN -j LIMITS >/dev/null 2>&1 $IPT -t mangle -F LIMITS >/dev/null 2>&1 $IPT -t mangle -X LIMITS >/dev/null 2>&1 $IPT -t mangle -F OUTPUT $IPT -t filter -F FORWARD $TC qdisc del dev $LAN root 2> /dev/null $TC qdisc del dev $WAN root 2> /dev/null } start () { stop $IPT -t mangle -N LIMITS $IPT -t mangle -I FORWARD -i $WAN -j LIMITS $IPT -t mangle -I FORWARD -o $WAN -j LIMITS # incomming traffic $IPT -t mangle -A OUTPUT -j MARK --set-mark 1 $TC qdisc add dev $LAN root handle 1:0 htb default 3 r2q 1 $TC class add dev $LAN parent 1:0 classid 1:1 htb rate 99000kbit ceil 99000kbit quantum 1500 $TC class add dev $LAN parent 1:1 classid 1:2 htb rate 500kbit ceil 500kbit $TC class add dev $LAN parent 1:1 classid 1:3 htb rate 98500kbit ceil 98500kbit prio 9 quantum 1500 $TC qdisc add dev $LAN parent 1:3 esfq perturb 10 hash dst # priorities for ICMP, TOS 0x10 and ports 22 and 53 $TC class add dev $LAN parent 1:2 classid 1:20 htb rate 50kbit ceil 500kbit $BURST prio 1 quantum 1500 $TC qdisc add dev $LAN parent 1:20 esfq perturb 10 hash dst $TC filter add dev $LAN parent 1:0 protocol ip prio 2 u32 match ip sport 22 0xffff flowid 1:20 $TC filter add dev $LAN parent 1:0 protocol ip prio 2 u32 match ip sport 53 0xffff flowid 1:20 $TC filter add dev $LAN parent 1:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 1:20 $TC filter add dev $LAN parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:20 # server -> LAN $TC filter add dev $LAN parent 1:0 protocol ip prio 4 handle 1 fw flowid 1:3 # outgoing traffic $TC qdisc add dev $WAN root handle 2:0 htb default 11 r2q 1 $TC class add dev $WAN parent 2:0 classid 2:1 htb rate 120kbit ceil 120kbit # priorities for ACK, ICMP, TOS 0x10, ports 22 and 53 $TC class add dev $WAN parent 2:1 classid 2:10 htb rate 60kbit ceil 120kbit prio 1 quantum 1500 $TC qdisc add dev $WAN parent 2:10 esfq perturb 10 hash dst $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip protocol 6 0xff \ match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 1 match u8 0x10 0xff at 33 flowid 2:10 $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip dport 22 0xffff flowid 2:10 $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip dport 53 0xffff flowid 2:10 $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 2:10 $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:10 # server -> Internet $TC class add dev $WAN parent 2:1 classid 2:11 htb rate 30kbit ceil 120kbit prio 2 quantum 1500 $TC qdisc add dev $WAN parent 2:11 esfq perturb 10 hash dst $TC filter add dev $WAN parent 2:0 protocol ip prio 3 handle 1 fw flowid 2:11 $TC filter add dev $WAN parent 2:0 protocol ip prio 9 u32 match ip dst 0/0 flowid 2:11
Przykład: begin = "#!/bin/bash\n$TC=/usr/local/sbin/tc\n"
end
Stopka skryptu. Domyślnie:
} case "$1" in 'start') start ;; 'stop') stop ;; 'status') echo "WAN Interface" echo "=============" $TC class show dev $WAN | grep root $TC class show dev $WAN | grep -v root | sort | nl echo "LAN Interface" echo "=============" $TC class show dev $LAN | grep root $TC class show dev $LAN | grep -v root | sort | nl ;; *) echo -e "\nUsage: rc.htb start|stop|status" ;; esac
Przykład: end = ""
one_class_per_host
Określa politykę tworzenia klas htb. W ustawieniu domyślnym wszystkie komputery użytkownika zostaną wrzucone do jednej klasy. Ustawienie tej opcji na 'true' spowoduje, że reguły określone w host_htb_up i host_htb_down zostaną wygenerowane dla wszystkich komputerów użytkownika (z inną wartością '%x'). Reguły z host_mark_down, host_mark_up, host_plimit i host_climit generowane są dla każdego komputera niezależnie od ustawień tej zmiennej. Domyślnie: false
Przykład: one_class_per_host = 1
host_mark_down
Reguła markująca dla każdego komutera. Domyślnie:
# %n $IPT -t mangle -A LIMITS -d %i -j MARK --set-mark %x
Przykład: host_mark_down = ""
host_mark_up
Reguła markująca dla każdego komutera. Domyślnie:
$IPT -t mangle -A LIMITS -s %i -j MARK --set-mark %x
Przykład: host_mark_up = ""
host_htb_down
Zestaw reguł dla każdego komutera, wykonywanych gdy uprate i downrate są różne od zera. Domyślnie:
$TC class add dev $LAN parent 1:2 classid 1:%x htb rate %downratekbit ceil %downceilkbit $BURST prio 2 quantum 1500 $TC qdisc add dev $LAN parent 1:%x esfq perturb 10 hash dst $TC filter add dev $LAN parent 1:0 protocol ip prio 5 handle %x fw flowid 1:%x
Przykład: host_htb_down = ""
host_htb_up
Zestaw reguł dla każdego komutera, wykonywanych gdy uprate i downrate są różne od zera. Domyślnie:
$TC class add dev $WAN parent 2:1 classid 2:%x htb rate %upratekbit ceil %upceilkbit $BURST prio 2 quantum 1500 $TC qdisc add dev $WAN parent 2:%x esfq perturb 10 hash dst $TC filter add dev $WAN parent 2:0 protocol ip prio 5 handle %x fw flowid 2:%x
Przykład: host_htb_up = ""
host_climit
Regułka z ograniczeniem ilości równoczesnych połączeń tcp. Wykonywana gdy climit w bazie jest różny od zera. Domyślnie:
$IPT -t filter -I FORWARD -p tcp -s %i -m connlimit --connlimit-above %climit -m ipp2p --ipp2p -j REJECT
Przykład: host_climit = "$IPT -t filter -I FORWARD -p tcp -s %i -m connlimit --connlimit-above -j REJECT"
host_plimit
Regułka z ograniczeniem ilości pakietów w jednostce czasu (tutaj sekunda). Wykonywana gdy plimit w bazie jest różny od zera. Domyślnie:
$IPT -t filter -I FORWARD -p tcp -d %i -m limit --limit %plimit/s -m ipp2p --ipp2p -j ACCEPT $IPT -t filter -I FORWARD -p tcp -s %i -m limit --limit %plimit/s -m ipp2p --ipp2p -j ACCEPT
Przykład: host_plimit = ""
networks
Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).
Przykład: networks = "lan1 lan2"
usergroups
Lista nazw grup użytkowników, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).
Przykład: usergroups = "grupa1 grupa2"
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.
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 = ""
networks
Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).
Przykład: networks = "lan1 lan2"
usergroups
Lista nazw grup użytkowników, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).
Przykład: usergroups = "grupa1 grupa2"
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.
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
networks
Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).
Przykład: networks = "lan1 lan2"
usergroups
Lista nazw grup użytkowników, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).
Przykład: usergroups = "grupa1 grupa2"
Moduł do konfiguracji oidentd. W zasadzie można to zrobić modułem 'hostfile', ale tutaj masz już gotowe ustawienia domyślne.
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"
Moduł pinger to odpowiednik perlowego skryptu lms-fping. Różnice są jednak zasadnicze. Nie potrzebuje zewnętrznego programu i działa przy wykorzystaniu protokołu ARP. Powodem tego jest mniej więcej dwukrotnie szybsze wykonanie skanowania sieci. Nie ma także problemów z komputerami mającymi wyłączone odpowiadanie na pingi. Po skanowaniu, wszystkim włączonym komputerom jest ustawiany w bazie danych czas skanowania, wykorzystywany do obrazowania aktywności komputerów np. na mapie sieci.
Pinger udostępnia tylko jedną opcję konfiguracyjną:
networks
Lista nazw sieci, które mają być skanowane. Domyślnie: pusta (wszystkie sieci).
Przykład: networks = 'lan1 lan2'
Tabela 7-1. Drzewo katalogów LMS
Nazwa | Opis |
---|---|
backups | Kopie zapasowe bazy danych |
bin | Skrypty wykonywalne lms-... |
contrib | Dodatki stworzone przez użytkowników LMS |
daemon | A.L.E.C's LMS Daemon |
devel | Skrypty przydatne dla developerów |
doc | Dokumentacja |
img | Obrazki do Interfejsu Użytkownika |
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 domyślne zawarte są w plikach lms.mysql, lms.pgsql i lms.sqlite 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ć |
deleted - czy usunięty (0/1) |
id - identyfikator |
lastname - nazwa/nazwisko |
name - imię |
status - status użytkownika (3-podłączony, 2-oczekujący, 1-zainteresowany) |
email - adres poczty internetowej |
phone1 - telefon |
phone2 - telefon |
phone3 - telefon |
gguin - identyfikator gadu-gadu |
pin - numer pin (uwierzytelnianie) |
address - adres (ulica, nr domu, nr lokalu) |
zip - kod pocztowy |
city - nazwa miasta |
nip - numer identyfikacji podatkowej NIP |
pesel - numer PESEL |
info - dodatkowe informacje |
serviceaddr - adres do doręczeń (np. na faktury) |
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 (0/1) |
message - komunikat do wyświetlenia przy właczonych ostrzeżeniach |
id - identyfikator |
usergroupid - identyfikator grupy |
userid - identyfikator użytkownika |
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 ('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 |
linktype - typ połączenia sieciowego (0-kabel, 1-radio) |
access - podłączony/odłączony (1/0) |
warning - ostrzegaj/nie ostrzegaj (1/0) |
lastonline - znacznik czasu ostatniej obecności w sieci |
info - informacje dodatkowe |
id - identyfikator |
name - nazwa |
location - lokalizacja |
description - opis |
producer - producent |
model - model |
serialnumber - numer seryjny |
ports - ilość portów |
id - identyfikator |
src - jeden koniec |
dst- drugi koniec |
type - typ połączenia (0-kabel, 1-radio) |
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 |
taxvalue - procent podatku |
userid - identyfikator użytkownika ('0' - jeśli nie dotyczy) |
invoiceid - identyfikator faktury obejmującej daną operację |
comment - opis operacji |
id - identyfikator |
name - nazwa |
value - kwota |
taxvalue - wysokość podatku w procentach |
pkwiu - numer PKWiU |
uprate - gwarantowany upload |
upceil - maksymalny upload |
downrate - gwarantowany download |
downceil - maksymalny download |
climit - limit połączeń |
plimit - limit pakietów |
description - opis |
id - identyfikator |
name - nazwa |
value - kwota |
creditor - nazwa wierzyciela |
period - typ okresu naliczania: co tydzień/co miesiąc/co kwartał/co rok (0/1/2/3) |
at - dzień naliczenia |
description - opis |
id - identyfikator |
tariffid - identyfikator taryfy |
userid - identyfikator użytkownika |
period - typ okresu |
at - dzień naliczania |
datefrom - data obowiązywania zobowiązania |
dateto - data obowiązywania zobowiązania |
invoice - określa czy ma być wystawiana faktura (1 - tak, 0 - nie) |
suspended - zawieszenie płatności (1 - tak, 0 - nie) |
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 (0/1) |
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 |
id - identyfikator rekordu |
ownerid - identyfikator użytkownika (0 - konto "systemowe") |
login - nazwa konta |
password - hasło zaszyfrowane funkcją crypt() |
lastlogin - data ostatniego logowania |
uid - identyfikator systemowy konta |
home - katalog domowy (/home/[login]) |
type - typ konta (suma: 1-shell, 2-poczta, 4-www, 8-ftp) |
expdate - data ważności konta |
domainid - identyfikator domeny z tabeli 'domains' |
id - identyfikator rekordu |
login - nazwa konta (bez domeny) |
accountid - identyfikator konta |
nodeid - numer komputera |
dt - znacznik czasu |
upload - ilość danych wysłanych, w bajtach |
download - ilość danych odebranych, w bajtach |
id - identyfikator |
name - nazwa |
email - adres konta pocztowego |
description - opis dodatkowy |
id - identyfikator |
queueid - identyfikator kolejki |
requestor - dane zgłaszającego (w tym e-mail) |
userid - identyfikator użytkownika |
subject - temat zgłoszenia |
state - status (0-nowy, 1-otwarty, 2-rozwiązany, 3-martwy) |
owner - identyfikator właściciela-administratora |
createtime - data zgłoszenia |
id - identyfikator |
ticketid - identyfikator zgłoszenia |
adminid - identyfikator administratora nadawcy |
userid - identyfikator użytkownika nadawcy |
mailfrom - e-mail nadawcy |
subject - temat wiadomości |
messageid - pocztowy identyfikator wiadomości |
inreplyto - identyfikator poprzedniej wiadomości |
replyto - nagłówek wiadomości |
headers - wszystkie nagłówki pocztowe wiadomości |
body - treść wiadomości |
createtime - data utworzenia/wysłania/odebrania |
messageid - identyfikator wiadomości |
filename - nazwa pliku |
contenttype - typ pliku |
id - identyfikator |
queueid - identyfikator kolejki |
adminid - identyfikator administratora |
rights - (1-odczyt, 2-zapis) |
id - identyfikator |
section - nazwa sekcji |
var - nazwa opcji konfiguracyjnej |
value - wartość |
description - opis/komentarz |
disabled - wyłączenie opcji (0-wł., 1-wył.) |
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.
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.
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
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.
Dla osób chcących szybko sprawdzić jak działa LMS przygotowaliśmy moduł 'genfake', służący do tworzenia bazy zawierającej przykładowe dane.
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. Ewentualne błędy bazy danych, spowodowane ograniczeniami unikalności niektórych danych, można zignorować.
![]() | Dla prawidłowego wygenerowania zależności, moduł 'genfake' należy uruchamiać na pustej, nowoutworzonej bazie. |
![]() | Wszystkie dane (oprócz danych administratorów) zostaną usunięte z bazy. |
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.
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:
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ć 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)
SQLite
Rozmiar bazy danych:
Od wersji 2.7.4 SQLite może obsługiwać bazy o rozmiarze do 2 terabajtów. Dodatkowym ograniczeniem jest objętość danych zapisanych w jednym rekordzie. Wielkość ta, ograniczona do 1 MB może zostać zwiększona do 16 MB podczas kompilacji.
Ilość rekordów:
Maksymalna ilość rekordów dla tej bazy to 2^32, ale nikt nie testował nigdy takiej ilości.
W niniejszym rozdziale zostaną opisane dodatkowe moduły i rozwiązania zwiększające funkcjonalność LMS'a znajdujące się w katalogu contrib. Część z nich należy dostosować do własnych potrzeb, a niektóre integrują się z interfejsem LMS-UI.
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.
Dla użytkowników korzystających z proxy, nie korzystających z sieci tylko w domu, albo którzy nie chcą aby dzieci/małżonkowie/pracownicy mieli wgląd w dane fiansowe dotyczące ich dostępu do sieci/innych usług przeznaczone jest "Moje konto 2".
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.
W katalogu contrib/customer_otherip znajduje się odpowiednik contrib/customer, który nie rozpoznaje użytkownika po adresie IP, ale wymaga logowania. Uwierzytelnianie odbywa się na podstawie numeru PIN oraz telefonu użytkownika, ale możliwe jest także wykorzystanie ID lub numeru umowy (dodatkowe pole w bazie) - patrz pliki balanceview.php i authentication.inc).
Skrypt wyświetla bilans i informacje o użytkowniku, a także w połączeniu z contrib/formularz_przelewu_wplaty umożliwia użytkownikowi wydrukowanie druku wpłaty na kwotę zaległości.
Instalacja sprowadza się do ustawienia opcji sys_dir w sekcji [directories] pliku lms.ini oraz zlinkowania katalogu img z lms'owymi ikonkami.
W katalogu contrib/sqlpanel znajdziesz moduł, dzięki któremu będziesz miał możliwość bezpośredniego dostępu do bazy danych poprzez zadawanie zapytań SQL. Wyniki wyświetlane są w formie tabeli. Ponadto podawany jest czas wykonania zapytania. Możliwe jest także drukowanie wyników zapytania.
Ilość wyświetlanych wierszy na jednej stronie ograniczana jest domyślnie do 50. Można to zmienić przy pomocy zmiennej 'sqlpanel_pagelimit' w sekcji [phpui] pliku konfiguracyjnego lms.ini.
Instalacja polega na skopiowaniu plików w odpowiednie miejsca w drzewie katalogów lms'a. Plik sql.php skopiuj do katalogu modules, a pliki sql.html, sqlprint.html, adminheader.html do katalogu templates. Po tej czynności dostęp do modułu będzie możliwy z menu Administracja->SQL.
Ten mały zestaw narzędzi pozwala za pomocą squida w dosyć elegancki sposób wyświetlać wiadomości administracyjne. Oczywiście aby to działało w 100%, wszyscy użytkownicy muszą korzystać ze squida.
Kluczowym elementem jest redirector. Odpowiada on za to, aby w momencie ustawienia dla danego komputera flagi warn, przekierowywał wszystkie żądania wysyłane do serwera proxy na nasz, ustalony wcześniej adres. Przekierowaniu nie ulegają adresy zawierające adres naszej winetki, tak aby umożliwić załadowanie się obrazków. Po przekierowaniu użytkownik ma możliwość oznaczenia wiadomości jako przeczytanej, po czym skrypt automatycznie kieruje przeglądarkę na pierwotnie wywoływany URL. Więcej informacji znajdziesz w pliku README.
Zaczynamy od konfiguracji squida (squid.conf):
redirector_bypass on redirect_program /sciezka/do/lms-squid-warningsktóre informują squida aby dla każdego adresu używał naszego redirectora. Następnie należy skonfigurować redirectora. Otwieramy w naszym ulubionym edytorze plik lms-squid-warnings i praktycznie wszystko co można w nim ustawić to:
my $configfile = '/etc/lms/lms.ini';Czyli położenie pliku konfiguracyjnego. Reszta konfiguracji ustawiana jest w lms.ini, gdzie dopisujemy sekcję [squid-warnings] i definiujemy adres winetki:
[squid-warnings] redirect = http://nasz.serwer.pl/winetka/Do katalogu gdzie ma być widoczna winetka kopiujemy pliki index.php, message.html i zawartość katalogu img.
Pierwsze co należy sprawdzić, to logi serwera www. Najczęściej pomaga zwiększenie parametru memory_limit w php.ini.
Nie ma takiej możliwości. Co więcej, autorzy nie przewidują takiej funkcjonalności w najbliższej przyszłości. Jednak masz jeszcze szansę skorzystać z patch'a multiip znajdującego się w contrib.
A dokumentację przejrzałeś? Do tego służy opcja allow_mac_sharing = 1.
Prawdopodobnie nie masz zainstalowanych wymaganych modułow Perla, w tym wypadku chodzi o Config::IniFiles. Najwygodniejszym sposobem instalacji modułów jest skorzystanie z CPANu w następujący sposób: perl -MCPAN -e 'install Config::IniFiles'.
Poprawki najlepiej zgłaszać na listę mailingową. Do wiadomości, z krótkim opisem poprawki, należy dołączyć diff'a (najlepiej do aktualnej wersji cvs'owej), którego można wykonać w następujący sposób:
$ cd lms $ cvs -z7 diff -u > /tmp/moja_latka.patchJeżeli jesteś zainteresowany dołączeniem do grona developerów i otrzymaniem praw zapisu do CVSu zgłoś taką chęć na listę. Wcześniej jednak powinieneś się dać poznać na liście jako odpowiedzialna i kompetentna osoba np. przysyłając poprawki.
Wersje LMSa są numerowane analogicznie do jądra Linuksa. I tak w LMS-x.y.z mamy: x - główny numer wersji, y - jak parzysty to wersja stabilna, jak nieparzysty to rozwojowa (niestabilna), z - mniej istotny numer podwersji. W związku z tym, jeśli ukaże się wersja stabilna np. 1.4.0, to w tej gałęzi (1.4) nie będzie już dodawana nowa funkcjonalność, będą usuwane tylko ewentualne błędy. Jednocześnie powstaje wersja rozwojowa 1.5.x, która przez dodanie nowych rzeczy, może być niestabilna/nie działająca prawidłowo.
Archiwum wszystkich wersji LMS znajduje się pod adresem lms.rulez.pl/download
Informacja ta jest zawarta w nagłówkach wszystkich wiadomości z listy mailingowej. Należy wysłać wiadomość z tematem "unsubscribe" na adres lms-request@lists.rulez.pl.
Algorytm zastosowany przy tworzeniu mapy nie jest doskonały. Do jednego urządzenia można podłączyć maksymalnie 24 komputery (tyle będzie widoczne na mapie, można podłączyć więcej, ale zostaną pominięte). Podobnie wygląda sprawa z urządzeniami. Każde urządzenie sieciowe może mieć podłączonych 24 innych urządzeń. Z tym, że w przypadku urządzeń, w pewnych warunkach (często) liczba ta może się zmniejszyć (w zależności od rozmieszczenia urządzeń na siatce mapy). Po przekroczeniu tej liczby mogą występować błędne połączenia wybiegające poza mapę, żadziej problemy z wygenerowaniem mapy.
Powołany błąd pojawia się podczas uruchamiania skryptów perlowych korzystających z zewnętrznych programów na niektórych systemach. Opis problemu i sposoby jego rozwiązania podane są w manualu perla (man perlsec) w dziale "Cleaning Up Your Path". Naprostszym rozwiązaniem jest usunięcie przyłącznika -T (który odpowiada za to zamieszanie) z pierwszej linii skryptu.