Zarządzanie kontami różnych usług na serwerze jest teraz możliwe. Funkcjonalność ta jest przeznaczona dla zaawansowanych użytkowników. Wymaga znajomości tych usług i ich konfiguracji w celu korzystania z bazy danych.
W LMSie można utworzyć pięć rodzajów kont: shell (1), poczta (2), www (4), ftp (8) i sql (16). 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]. Użytkownik ma także prawo do zmiany hasła.
Definiując dane konto musisz podać login, hasło i wybrać typ konta oraz przypisać klienta (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.
Masz możliwość zdefiniować dowolny katalog domowy użytkownika (konta). Opcja konfiguracyjna homedir_prefix w sekcji [phpui] zawiera prefix katalogu domowego, domyślnie ustawiony na wartość "/home/".
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.
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].
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 klient 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): # użytkownik postfix (właściciel katalogu z pocztą) #MYSQL_UID_FIELD '1004' PGSQL_UID_FIELD '1004' # grupa postfix (właściciel katalogu z pocztą) #MYSQL_GID_FIELD '1004' PGSQL_GID_FIELD '1004' #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(domains.name,'/',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', \ domains.name || '/' || 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(domains.name,'/',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 domains.name || '/' || 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'
Następny przykład podesłany przez bart'a przedstawia instalację i konfigurację serwera pure-ftpd w dystrybucji Gentoo z wykorzystaniem bazy danych MySQL.
Przykład 3-3. Konta. Konfiguracja pure-ftpd.
No to zaczynamy od instalacji serwera pure-ftpd. Pod Gentoo wygląda to tak:
bart # emerge pure-ftpd -av These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild R ] net-ftp/pure-ftpd-1.0.20-r1 -caps -ldap +mysql +pam -postgres +ssl +vchroot 459 kB Total size of downloads: 459 kBCo do innych systemów to każdy chyba wie jak się instaluje pakiety w swoim systemie, a jeżeli nie to pozostaje kompilacja ze źródeł. Po zainstalowaniu przechodzimy do stworzenia pliku, który będzie odpowiadał za łączenie się z bazą LMS'a. Tworzymy plik /etc/pureftpd-mysql.conf, który to powinien zawierać minimum:
MYSQLServer localhost (adres serwera bazy danych - domyślnie 'localhost') MYSQLPort 3306 (port na którym działa serwer MySql - domyślnie '3306') MYSQLSocket /var/run/mysqld/mysqld.sock ( MYSQLUser lms (nazwa usera z dostępem do bazy) MYSQLPassword hasło (tutaj należy podać hasło) MYSQLDatabase lms (nazwa bazy danych) MYSQLCrypt crypt (sposób przechowywania haseł) MYSQLGetPW SELECT password FROM passwd WHERE login="\L" (pobieranie hasła dla usera) MYSQLGetUID SELECT uid FROM passwd WHERE login="\L" (pobieranie uid dla usera) MYSQLGetGID SELECT gid FROM passwd WHERE login="\L" (pobieranie gid dla usera) MYSQLGetDir SELECT home FROM passwd WHERE login="\L" (pobieranie nazwy katalogu domowego dla usera) MySQLGetQTASZ SELECT quota_ftp FROM passwd WHERE login="\L" (quota czyli pojemność konta w MB - podając w lms-ui 10 oznacza to pojemność 10MB)Teraz pozostaje nam już tylko konfiguracja serwera pure-ftpd. (w gentoo plik konfiguracyjny mieści się w /etc/conf.d/pure-ftpd) a więc:
## Najpierw odkomentujmy tę linię, ponieważ inaczej serwer nie będzie chciał wystartować IS_CONFIGURED="yes" ## Tutaj podajemy adres naszego serwera i port na którym ma nasłuchiwać SERVER="-S www.nasza.domena.pl,21" ## Określamy ilość jednoczesnych połączeń do serwera oraz ilość połączeń z tego samego IP ## To już chyba każdy według potrzeb MAX_CONN="-c 50" MAX_CONN_IP="-C 2" ## Startujemy daemona w tle DAEMON="-B" ## Ustalamy procentową zajętość dysku/partycji kiedy serwer powinien przestać zezwalać na przyjmowanie danych DISK_FULL="-k 90%" ## Jeżeli serwer jest za NATem odkomentuj tę linię #USE_NAT="-N" ## Autoryzacja ma być pobierana z bazy LMS'a - podajemy ścieżkę do stworzonego przez nas wcześniej pliku AUTH="-l mysql:/etc/pureftpd-mysql.conf" ## Pozostałe opcje w moim wypadku są takie MISC_OTHER="-A -x -j"
Poprzedni | Spis treści | Następny |
Dokumenty | Początek rozdziału | Mailing |