2024. június 9., vasárnap

Gyorskeresés

Útvonal

Cikkek » Számtech rovat

Debiant mindenkinek! 3. rész

  • (f)
  • (p)
Írta: |

proFTPd telepítése és beállítása mySQL-lel

[ ÚJ TESZT ]

Egy alap FTP beállítása nem bonyolult folyamat, csupán 2-3 egyszerűbb lépéssel megoldható. Vannak azonban biztonsági problémák azzal, ha a helyi felhasználókat engedjük bejelentkezni, mert akkor akár SSH-n is bejelentkezhetnének, és kárt tehetnének a szerverünkben. Ennek elkerülése érdekében mi most egy kicsit tovább megyünk, és sql alapú beléptetést, valamit a minimálisnál kicsit nagyobb biztonságot próbálunk elérni. Ehhez a proFTPd-t választjuk, mint FTP kiszolgálót. Azért őt, mert elég elterjedt, könnyen kezelhető, és rendelkezik sql alapú bejelentkeztető modullal. Első lépésként keressünk rá, mely csomagok is kellhetnek nekünk a célunk eléréséhez:

debian-test:~# apt-cache search proftpd
auth2db-filters - Auth2db defaults filters pack
ftpd - File Transfer Protocol (FTP) server
gadmin-proftpd - GTK+ configuration tool for proftpd
gadmin-tools - GTK+ server administration tools
gproftpd - GTK+ configuration tool for proftpd (transitional package)
gforge-ftp-proftpd - collaborative development tool - FTP management (using ProFTPd)
proftpd - versatile, virtual-hosting FTP daemon
proftpd-basic - versatile, virtual-hosting FTP daemon - binaries
proftpd-doc - Versatile, virtual-hosting FTP daemon - documentation
proftpd-mod-ldap - versatile, virtual-hosting FTP daemon - LDAP module
proftpd-mod-mysql - versatile, virtual-hosting FTP daemon - MySQL module
proftpd-mod-pgsql - versatile, virtual-hosting FTP daemon - PostgreSQL module

Ebből számunkra a proftpd és a proftpd-mod-mysql szükséges. E mellett kell még egy sql szerver is, és mivel mySQL-hez van modulunk, célszerű azt használni, ezért toldjuk meg a letöltendő és telepítendő csomagokat a mysql-server csomaggal is:

debian-test:~# apt-get install proftpd proftpd-mod-mysql mysql-server

A telepítés során hibaüzenetet kaptam, mert egyik csomagot nem tudta letölteni, és ezért a telepítés megszakadt. Ennek javítására frissítettem az apt-get adatbázisát:

debian-test:~# apt-get update

Ez után újra futtatva a telepítő már csak 2 dolgot kérdez, először a mySQL root jelszavát kétszer, majd a proFTPd típusát. Ez utóbbinál a standalone-t válasszuk, mert ekkor egy önálló daemon-ként folyamatosan fut a háttérben.

Most szükségünk van egy felhasználóra, akinek a nevében az FTP felhasználóink tevékenykedni fognak. Ezzel a felhasználóval sose fogunk bejelentkezni, ezért adatbiztonsági okokból nem adunk neki sem /home és sem /bin/sh hozzáférést sem. Ezt utóbbit úgy oldjuk meg, hogy hibás helyre fog mutatni a Shell futtatási könyvtára. Nem mellékesen a /home könyvtára is a semmibe mutat. Ezek előtt létrehoztunk még egy group-ot is neki, amibe besoroljuk. Így kerüljük el, hogy az esetlegesen már létező group jogait is kihasználva garázdálkodjon nálunk, ha netán bejelentkezik.

debian-test:~# groupadd -g 3001 ftpgroup
debian-test:~# useradd -s /bin/false -d /bin/null -d /bin/null -c "proFTPd User" --uid 3001 -g ftpgroup ftpuser

Ha ezzel sikeresen megvagyunk, akkor lépjünk be az adatbázisba, hozzuk létre a proftpddb adatbázist, hozzá a proftpduser-t és adjunk neki jogokat a táblához:

debian-test:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.0.51a-24+lenny2+spu1 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE proftpddb;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT USAGE ON *.* TO proftpduser@localhost IDENTIFIED BY 'proftpduser';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON proftpddb.* TO 'proftpduser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql>

Ugyan a felhasználót nem hoztuk létre direkt paranccsal, de a felhasználói jogosultságok beállításakor a mySQL automatikusan létrehozott egy megfelelő nevű felhasználót.

A következő lépés, hogy hozzuk létre a megfelelő táblázatokat. Erre 2 út létezik, az egyik, hogy kézzel bepötyögjük sql parancsként, vagy pedig egy külső file-ba írjuk be szövegszerkesztővel, és ráküldjük a mySQL-re, például így:

debian-test:~# vi proFTPd_letrehoz.sql

Ebbe írjuk bele:

CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '3000',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTPd group table';

CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(80) NOT NULL default '',
uid smallint(6) NOT NULL default '3000',
gid smallint(6) NOT NULL default '3000',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTPd user table';

Ez után a következő paranccsal küldjük rá a mySQL-re:

debian-test:~# mysql -u root -p proftpddb < proFTPd_letrehoz.sql
Enter password:
debian-test:~#

Jó, ha leellenőrizzük, mit is csináltunk, jelentkezzünk be, és nézzük meg, milyen táblákat hoztunk létre:

debian-test:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 5.0.51a-24+lenny2+spu1 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> connect proftpddb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Connection id: 42
Current database: proftpddb

mysql> show tables;
+---------------------+
| Tables_in_proftpddb |
+---------------------+
| ftpgroup |
| ftpuser |
+---------------------+
2 rows in set (0.00 sec)

mysql> describe ftpuser;
+----------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| userid | varchar(32) | NO | UNI | | |
| passwd | varchar(80) | NO | | | |
| uid | smallint(6) | NO | | 3000 | |
| gid | smallint(6) | NO | | 3000 | |
| homedir | varchar(255) | NO | | | |
| shell | varchar(16) | NO | | /sbin/nologin | |
| count | int(11) | NO | | 0 | |
| accessed | datetime | NO | | 0000-00-00 00:00:00 | |
| modified | datetime | NO | | 0000-00-00 00:00:00 | |
+----------+------------------+------+-----+---------------------+----------------+
10 rows in set (0.01 sec)

mysql> describe ftpgroup;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| groupname | varchar(16) | NO | MUL | | |
| gid | smallint(6) | NO | | 3000 | |
| members | varchar(16) | NO | | | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

A jelek szerint mind a két tábla rendben létrejött. Itt az ideje, hogy létrehozzuk az alap felhasználói csoportot és felhasználót a proFTPd számára:

debian-test:~# mysql -u proftpduser -p proftpddb
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.0.51a-24+lenny2+spu1 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 3001, 'ftpuser');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'elso', PASSWORD('elso'), 3001, 3001, '/var/proftpd/elso', '/sbin/nologin', 0, '', '');
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql>

A két warning azért jön, mert 2 speciális tartalmú mezőnek is adtunk értéket:

mysql> select * from ftpuser;
+----+--------+-------------------------------------------+------+------+-------------------+---------------+-------+---------------------+---------------------+
| id | userid | passwd | uid | gid | homedir | shell | count | accessed | modified |
+----+--------+-------------------------------------------+------+------+-------------------+---------------+-------+---------------------+---------------------+
| 1 | elso | *141643B63E0131D879B7CB3615E586750E187D9B | 3001 | 3001 | /var/proftpd/elso | /sbin/nologin | 0 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----+--------+-------------------------------------------+------+------+-------------------+---------------+-------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql>

Látható még, hogy az adatbázisunk titkosított formában tárolja a jelszót, ezzel ugyan nem láthatjuk, mi az aktuális, de nehezebb is kinyerni, és egy véletlen beleolvasással sem lehet lekérdezni a tartalmát. Ugyanazon titkosítási kulcs lefuttatásával lehet összehasonlítani a jelszó értékét a beírttal, és ezt az algoritmust maga az sql kezeli automatikusan. A másik az a homedir könyvtár, ezzel mondjuk meg neki, hogy a bejelentkezés után, melyiket használja.
A táblák felépítése a proFTPd dokumentációja szerint készültek, ne változtassunk rajta.

A homedir könyvtárak alapját nekünk kell létrehoznunk, vagy már meglévő könyvtárat megfelelő jogosultsággal ellátnunk:

debian-test:~# mkdir /var/proftpd
debian-test:~# chown ftpuser:ftpgroup /var/proftpd
debian-test:~# chmod 775 /var/proftpd

Eddig a lépéseink csupán arra kellettek, hogy előkészítsük a proFTPd beállításait. Mint látható, bizonyos folyamatok igen sok előkészületet és környezeti beállítást igényelnek.
Most akkor kezdjük el beállítani a proFTPd-t. Először hozzuk létre a saját kis mysql-es beállításokat tartalmazó file-unkat a /etc/proftpd könyvtárba:

debian-test:~# vi /etc/proftpd/mysql.conf

Ezt töltsük fel ezzel:

# Force the use of mysql backend
SQLBackend mysql

# The passwords in MySQL are using its own PASSWORD function
SQLAuthTypes Backend
SQLAuthenticate users* groups*

# details to connect to mysql db
# dbname@host dbuser dbpass
SQLConnectInfo proftpddb@localhost proftpduser proftpduser

# Let proFTPd know the name of the columns in the user table
# Mind that this need to match the name in you table
SQLUserInfo ftpuser userid passwd uid gid homedir shell

# Let proFTPd know the name of the columns in the group table
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members

# proftpd will dynamicaly create if the homedir does not yet exist
SQLHomedirOnDemand on

# update counter when a user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# change modified time anytime a user delete a file or upload one
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

Ennyi még nem elég, mert a proFTPd még nem tudja, hogy a mi kis beállítás fájlunk létezik. Ezért kell néhány beállítást tennünk a többi beállítás file-ban is. Uncommentezzük a következő sorokat:

/etc/proftpd/modules.conf-ban:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_quotatab_sql.c
LoadModule mod_wrap2_sql.c

/etc/proftpd/proftpd.conf-ban:

DefaultRoot ~
RequireValidShell off

Az utóbbi file-ban uncomment és átírás „Include /etc/proftpd/sql.conf” – ről „Include /etc/proftpd/mysql.conf” – ra. Ha ezzel is megvagyunk, akkor már csak újra kell indítanunk a proFTPd-t:

debian-test:~# /etc/init.d/proftpd restart
Stopping ftp server: proftpd.
Starting ftp server: proftpd - warning: the SQLHomedirOnDemand directive is deprecated, and will be removed in the next release.

Ez a warning az SQLHomedirOnDemand beállítás miatt van. Azt jelenti, hogy a felhasználónak egyből létrehozza a megfelelő bejelentkezési könyvtárát, ha nem létezik. A következő fejlesztésekben várhatóan nem lesz ez benne, és akkor minden könyvtárat nekünk kell majd létrehozni.

Kiegészítések

Nos, a felhasználó kezeléshez írnék néhány segédletet, az SQL-hez nem értők számára.
Bejelentkezéshez ezt használjuk:

debian-test:/var/proftpd/elso# mysql -u proftpduser -p proftpddb

A proftpddb felhasználó jelszava megegyezik a felhasználó névvel. Új felhasználó hozzáadása az FTP-hez:

INSERT INTO `ftpuser` (`userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES ('AAAA', PASSWORD('BBBB'), 3001, 3001, 'CCCC', '/sbin/nologin', 0, '', '');

AAAA = felhasználó neve
BBBB = felhasználó jelszava
CCCC = Bejelentkezési könyvtára

Felhasználók listája:

mysql> SELECT id sorszam, userid Felhasznalo, homedir Konyvtar FROM ftpuser;
+---------+-------------+-------------------+
| sorszam | Felhasznalo | Konyvtar |
+---------+-------------+-------------------+
| 1 | elso | /var/proftpd/elso |
+---------+-------------+-------------------+
1 row in set (0.00 sec)

mysql>

Ezen lista alapján a felhasználó jelszavának megváltoztatása:

UPDATE ftpuser SET passwd=PASSWORD('AAAA') WHERE id='BBBB';

AAAA = az új jelszó
BBBB = felhasználó sorszáma az előző select utasításnál

Ezen lista alapján a felhasználó bejelentkezési könyvtárának megváltoztatása:

UPDATE ftpuser SET homedir='AAAA' WHERE id='BBBB';

AAAA = az új könyvtár
BBBB = felhasználó sorszáma az előző select utasításnál

Előzmények

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.