Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Explicam intr-un articol anterior cum putem gestiona utilizatorii virtuali in Pure-FTPd. Folosind comanda pure-pw putem crea, sterge sau modifica utilizatori. E destul de usor de facut, dar daca dorim sa integram Pure-FTPd intr-un sistem complex de gestiune a utilizatorilor parca nu mai e la fel de placut sa apelam functii. Pentru situatii de genul acesta exista suport pentru MySQL in Pure-FTPd. Pentru a ne folosi de MySQL avem de urmat cativa pasi simpli:

Pregatim baza de date

Ca sa ne putem folosi de MySQL avem nevoie de o baza de date care sa contina o tabela si un utilizator care sa poata accesa baza de date MySQL. Pentru asta ne conectam la consola MySQL si rulam urmatoarele comenzi:

mysql> CREATE DATABASE ftpusers;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON ftpusers.* TO 'ftpusers'@'localhost' IDENTIFIED BY 'ap2ngA';
mysql> FLUSH PRIVILEGES;

Acum avem baza de date ftpusers iar pentru accesarea acesteia folosim utilizatorul ftpusers cu parola ap2ngA. Urmatorul pas este crearea tabelei care pastreaza datele utilizatorilor. Pentru asta vom rula in consola MySQL urmatorul query:

CREATE TABLE IF NOT EXISTS `users` (
  `User` VARCHAR(32) NOT NULL,
  `Password` VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Uid` INT(11) NOT NULL DEFAULT '14',
  `Gid` INT(11) NOT NULL DEFAULT '101',
  `Dir` VARCHAR(256) NOT NULL,
  `QuotaFiles` INT(10) NOT NULL DEFAULT '5000',
  `QuotaSize` INT(10) NOT NULL DEFAULT '100',
  `ULBandwidth` INT(10) NOT NULL DEFAULT '256',
  `DLBandwidth` INT(10) NOT NULL DEFAULT '256',
  `Ipaddress` VARCHAR(15) NOT NULL DEFAULT '*',
  `Comment` tinytext,
  `Status` enum('0','1') NOT NULL DEFAULT '1',
  `ULRatio` SMALLINT(5) NOT NULL DEFAULT '0',
  `DLRatio` SMALLINT(5) NOT NULL DEFAULT '0',
  PRIMARY KEY (`User`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Acum avem baza de date pregatita. Putem merge mai departe.

Modificam pure-ftpd.conf

Pentru ca serverul Pure-FTPd sa stie ca utilizatorii trebuie preluati din MySQL vom adauga o directiva care sa ii spuna locatia fisierului care contine queryurile si setarile pentru conectarea la serverul MySQL. Asadar vom adauga in fisierul pure-ftpd.conf urmatoarea linie:

MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf

E de preferat ca fisierul pureftpd-mysql.conf sa fie in aceeasi locatie cu pure-ftpd.conf pentru o mai buna organizare. Fisierul pureftpd-mysql.conf, daca nu exista deja, il vom crea cu urmatorul continut:

MYSQLServer     localhost
MYSQLSocket     /tmp/mysql.sock
MYSQLUser       ftpusers
MYSQLPassword   ap2ngA
MYSQLDatabase   ftpusers
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetQTAFS  SELECT QuotaFiles FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetQTASZ  SELECT QuotaSize FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")

Aici am ajuns in punctul in care putem da un restart serverului Pure-FTPd iar mai departe utilizatorii vor fi cititi din baza de date, nu din fisierul pureftpd.passwd cum ar fi normal. Mai departe putem trece la crearea utilizatorilor.

Cream utilizatorii virtuali

Acum ca e totul functional, ne conectam la consola MySQL (sau phpMyAdmin daca este instalat) si rulam urmatorul query:

INSERT INTO `ftpusers`.`users` (
`User` ,
`Password` ,
`Uid` ,
`Gid` ,
`Dir` ,
`QuotaFiles` ,
`QuotaSize` ,
`ULBandwidth` ,
`DLBandwidth` ,
`Ipaddress` ,
`Comment` ,
`Status` ,
`ULRatio` ,
`DLRatio`
)
VALUES (
'lamp', '4c336e5111b965561840752a5f49b89c', '1234', '1234', '/var/www/www.lamp.ro', '5000', '100', '256', '256', '*', '', '1', '0', '0'
);

Tocmai am creat primul utilizator. Numele de utilizator este lamp iar parola in md5 este 4c336e5111b965561840752a5f49b89c (adica Ljs53FJ8).

Ce trebuie avut in vedere e sa setam corect campul Uid, care ii va spune serverului Pure-FTPd care este utilizatorul real sub care vor fi factiunile – implicit, proprietarul real al fisierelor uploadate. Celelalte campuri sunt sugestive: QuotaFiles impune restricitie pe numarul de fisiere, QuotaSize limiteaza spatiul pe disc etc.

Linux

9 Responses so far.

  1. IT4Fans says:

    Știi vreo interfață web open source care să administreze tabela users a lui pure-ftpd (adăugare, modificare, ștergere)?

  2. Sergiu Tot says:

    Salut,

    Ceva facut special pentru Pure-FTPd nu stiu. Eu folosesc phpMyAdmin. Tabela e simpla si usor de inteles, iar dupa doua-trei modificari te descurci fara sa mai ai nevoie de altceva 🙂

  3. Smash says:

    Exista ceva aplicatii (chiar si web) pentru administrarea userilor : http://www.debianhelp.co.uk/pureftpweb.htm

  4. Sergiu Tot says:

    Merci de completare, Smash!

  5. Viorel says:

    Salut, Segiu

    Multuemsc de tutorial, e superb, am facut zilele acestea un server FTP pe pure-ftpd si merge bine…
    am o mica intrebare… cand ma loghez de pe un browser (ex. Firefox) cum sa ma deloghez? Am incercat mai mult si nu pot sa ma deloghez, am inchis browseul si cand l-am descis si am accesat din nou ftp://adresa se conecteaza automat pe contul pe care am intrat mai inainte, fara ami cere din nou logare… cum sa rezolv aceasta problema?

    am incercat pe google chrome dar nu pot accesa ftp://adresa, e problema la google chrome sau in setarile mele la serverul FTP?
    Multumesc

  6. Sergiu Tot says:

    Salut,

    Asta e o chestie care tine de browser si din server nu poti face mai nimic. E la fel ca in cazul autentificarii web din Apache, trebuie sa astepti pana cand expira sesiunea (MaxIdleTime).

    O alternativa in Firefox ar fi Edit > Preferences > Privacy, bifezi „Clear history when Firefox closes” si apoi click pe Settings si bifezi „Active Logins”. Asa se pierde sesiunea odata cu inchiderea browserului.

  7. Viorel says:

    Ok, Sergiu
    Multumesc de explicatie
    O zi buna sa ai

  8. Viorel says:

    Buna, Sergiu
    Am o rugaminte…
    Eu la server am inchise porturile, si evident nu pot accesa serverulFTP, am deschis portul 21, si pot accesa, insa nu pot naviga prin Foldere, ma folosesc de FileZilla
    iata ce imi arata in terminal:
    Stare: Conectare la 188.244.17.117:21…
    Stare: Conexiune stabilită, aștept mesajul de întîmpinare…
    Răspuns: 220———- Welcome to Pure-FTPd [privsep] [TLS] ———-
    Răspuns: 220-You are user number 4 of 50 allowed.
    Răspuns: 220-Local time is now 10:12. Server port: 21.
    Răspuns: 220-IPv6 connections are also welcome on this server.
    Răspuns: 220 You will be disconnected after 15 minutes of inactivity.
    Comandă: USER raduzvigunov
    Răspuns: 331 User raduzvigunov OK. Password required
    Comandă: PASS ***********
    Răspuns: 230-Your bandwidth usage is restricted
    Răspuns: 230-User raduzvigunov has group access to: ftpgroup
    Răspuns: 230-OK. Current restricted directory is /
    Răspuns: 230-5 files used (0%) – authorized: 50000 files
    Răspuns: 230 181 Kbytes used (0%) – authorized: 1024000 Kb
    Comandă: OPTS UTF8 ON
    Răspuns: 200 OK, UTF-8 enabled
    Stare: Conectat
    Stare: Preiau lista de dosare…
    Comandă: PWD
    Răspuns: 257 „/” is your current location
    Stare: Listarea dosarului a avut succes
    Stare: Preiau lista de dosare…
    Comandă: CWD /AnaLazar
    Răspuns: 250 OK. Current directory is /AnaLazar
    Comandă: TYPE I
    Răspuns: 200 TYPE is now 8-bit binary
    Comandă: PASV
    Răspuns: 227 Entering Passive Mode (188,244,17,117,181,129)
    Comandă: MLSD
    Eroare: Conexiune expirată
    Eroare: Nu pot obține lista dosarelor

    Cum sa aflu cu ce porturi mai lucreaza FileZilla ca sa le deschid de la routerul meu?
    Multumesc Mult

  9. Sergiu Tot says:

    Cauta in pure-ftpd.conf directiva PassivePortRange. Intervalul respectiv de porturi e folosit si ar trebui sa permiti comunicarea.