Tartalomjegyzék
ProFTPd
- Szerző: Sallai András
- Copyright © Sallai András, 2011, 2019, 2021
- Web: https://szit.hu
Telepítés
apt install proftpd
- A következő felhasználót veszi fel:
proftpd
- A proftpd felhasználót a
nogroup
csoportba teszi. - A következő felhasználót hozza létre:
ftp
(UID 112) - Az ftp felhasználót a
nogroup
csoportba teszi. - Készít egy
/srv/ftp
könyvtárat.
A /srv/ftp/welcome.msg
állományban létrehoz egy üzenetet.
Telepítés után minden linuxos felhasználó beléphet saját könyvtárába.
Lehetséges hibák
- A hostnév nem oldható fel IP címmé.
Beállítások
A beállítások a következő helyen vannak:
/etc/proftpd/proftpd.conf
Ha megváltoztatjuk a beállításokat, ellenőrizzük azokat:
proftpd -t
Jöhet egy újraindítás:
systemctl restart proftpd
Használható parancsok
Felhasználók is:
ftpcount
ftpdctl
ftptop
ftpwho
Rendszergazdák:
ftpasswd
ftpquota
ftpscrub
ftpshut
ftpstats
proftpd-gencert
Anonymous
Az anonymous felhasználók számára automatikusan létrejön a következő könyvtár:
/srv/ftp
A /etc/proftpd/proftpd.conf
állomány végén az anonymous rész előtt a megjegyzést el kell távolítani.
nano /etc/proftpd/proftpd.conf
... <Anonymous ~ftp> User ftp Group nogroup UserAlias anonymous ftp RequireValidShell off MaxClients 10 DisplayLogin welcome.msg DisplayChdir .message <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> </Anonymous>
Linuxos felhasználó shell nélkül
Vegyünk fel egy felhasználót, például sarga. Szeretnénk lehetővé tenni, hogy a /srv/www/sarga.lan/ könyvtárba feltölthessen.
mkdir /srv/www/sarga.lan/ useradd -d /srv/www/sarga.lan/htdocs -s /bin/false sarga chown /srv/www/sarga.lan/sarga
Szerkesszük a proftpd.conf állományt, keressünk egy RequireValidShell beállítást, vegyük ki a megjegyzést előle.
nano /etc/proftpd/proftpd.conf
... RequireValidShell off ...
Kapcsolat irányok vizsgálata
Adott a szerver: 192.168.5.102, és egy kliens 192.168.5.5:
192.168.5.0/24 .5 .102 [kliens]--------------[szerver]
apt install tcpick
tcpick
# tcpick important: `man 8 tcpick' explains all options available Starting tcpick 0.2.1 at 2021-04-30 23:53 CEST Timeout for connections is 600 tcpick: listening on enp0s3 1 SYN-SENT 192.168.5.5:43126 > 192.168.5.102:ftp 1 SYN-RECEIVED 192.168.5.5:43126 > 192.168.5.102:ftp 1 ESTABLISHED 192.168.5.5:43126 > 192.168.5.102:ftp 2 SYN-SENT 192.168.5.102:ftp-data > 192.168.5.5:43895 2 SYN-RECEIVED 192.168.5.102:ftp-data > 192.168.5.5:43895 2 ESTABLISHED 192.168.5.102:ftp-data > 192.168.5.5:43895 2 FIN-WAIT-1 192.168.5.102:ftp-data > 192.168.5.5:43895 2 TIME-WAIT 192.168.5.102:ftp-data > 192.168.5.5:43895 2 CLOSED 192.168.5.102:ftp-data > 192.168.5.5:43895
A fentiekben egy kapcsolódást és egy ls parancsot látunk.
Bekapcsolva passzívmód: passive, majd ls:
3 SYN-SENT 192.168.5.5:34414 > 192.168.5.102:44863 3 SYN-RECEIVED 192.168.5.5:34414 > 192.168.5.102:44863 3 ESTABLISHED 192.168.5.5:34414 > 192.168.5.102:44863 3 FIN-WAIT-1 192.168.5.5:34414 > 192.168.5.102:44863 3 TIME-WAIT 192.168.5.5:34414 > 192.168.5.102:44863 3 CLOSED 192.168.5.5:34414 > 192.168.5.102:44863
Ha nevek helyett kérhetünk számokat is:
tcpick -n
Virtuális felhasználók
Hozzunk létre egy új konfigurációs állományt a pureftpd számára:
nano /etc/proftpd/conf.d/virtualUser.conf
Írjuk a fájlba a következőket:
- /etc/proftpd/conf.d/virtualUser.conf
# A felhasználóknak ne kelljen shell: RequireValidShell off # Jelszó és csoportfájl: AuthUserFile /etc/proftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group # Zárjuk be a felhasználót a saját könyvtárába: DefaultRoot ~ AuthOrder mod_auth_file.c
Hozzuk létre a csoportfájlt:
touch /etc/proftpd/ftpd.group
Hozzunk létre például egy feri nevű felhasználót:
ftpasswd \ --passwd \ --name=feri \ --home=/home/vftp/feri \ --shell=/bin/false \ --uid=111 \ --gid=65534 \ --file=/etc/proftpd/ftpd.passwd
Az --uid utáni szám meg kell egyezzen a proftpd uid azonosítóval.
Adjuk a könyvtárat a proftpd démonnak:
chown proftpd.nogroup /home/vftp/feri
Ha fontos, az azonosítás sorrendjét is beállíthatjuk:
... AuthOrder mod_auth_file.c
Beállítások után ellenőrizzük a konfigurációt:
proftpd -t
Indítsuk újra a szervert:
systemctl restart proftpd
Csoport felvétel a ftpasswd paranccsal:
ftpasswd --group --name=nogroup --file=/etc/proftpd/ftpd.group --gid=111 --member feri
Jelszó módosítása:
ftpasswd \ --passwd \ --file=/etc/proftpd/ftpd.passwd \ --name=feri \ --change-password
SSL
cd /etc/proftpd/ssl openssl req -new -x509 -days 365 -nodes -out ftpd-rsa.pm -keyout ftpd-rsa-key.pem
A /etc/proftpd/proftpd.conf
állományban megkeressük a következő sort:
#Include /etc/proftpd/tls.conf
A kettőskeresztet eltávolítjuk.
A /etc/proftpd/tls.conf
fájlt pedig ehhez hasonlóan alakítjuk:
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/proftpd-tls.log TLSProtocol TLSv1 # Megköveteljük a kliensektől a TLS kapcsolatot? TLSRequired off TLSRSACertificateFile /etc/proftpd/ssl/ftpd-rsa.pem TLSRSACertificateKeyFile /etc/proftpd/ssl/ftpd-rsa-key.pem # Szükséges azonosítás a TLS használatához? TLSVerifyClient off </IfModule>
A TLSProtocol értéke esetleg: SSLv23
ProFTPd MySQL
Ellenőrzésre szoruló rész!
Szükséges telepítés:
apt install proftpd-mod-mysql
Szükséges felhasználó és csoport:
groupadd -g 5001 ftpgroup useradd -u 5001 -g ftpgroup -c "proftpd user" -d /bin/null -s /bin/false ftpuser
MySQL-ben szükséges:
CREATE DATABASE ftp; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'titok'; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'titok'; FLUSH PRIVILEGES;
Használjuk az FTP adatbázist:
USE ftp;
A következő táblákat hozzuk létre:
CREATE TABLE groups ( groupname VARCHAR(16) NOT NULL DEFAULT '', gid SMALLINT(6) NOT NULL DEFAULT '5500', members VARCHAR(16) NOT NULL DEFAULT '', KEY groupname (groupname) ) TYPE=MyISAM COMMENT='ProFTPd csoport tabla'; CREATE TABLE ftpquotalimits ( name VARCHAR(30) DEFAULT NULL, quota_type enum('user','group','class','all') NOT NULL DEFAULT 'user', per_session enum('false','true') NOT NULL DEFAULT 'false', limit_type enum('soft','hard') NOT NULL DEFAULT 'soft', bytes_in_avail INT(10) UNSIGNED NOT NULL DEFAULT '0', bytes_out_avail INT(10) UNSIGNED NOT NULL DEFAULT '0', bytes_xfer_avail INT(10) UNSIGNED NOT NULL DEFAULT '0', files_in_avail INT(10) UNSIGNED NOT NULL DEFAULT '0', files_out_avail INT(10) UNSIGNED NOT NULL DEFAULT '0', files_xfer_avail INT(10) UNSIGNED NOT NULL DEFAULT '0' ) TYPE=MyISAM; CREATE TABLE ftpquotatallies ( name VARCHAR(30) NOT NULL DEFAULT '', quota_type enum('user','group','class','all') NOT NULL DEFAULT 'user', bytes_in_used INT(10) UNSIGNED NOT NULL DEFAULT '0', bytes_out_used INT(10) UNSIGNED NOT NULL DEFAULT '0', bytes_xfer_used INT(10) UNSIGNED NOT NULL DEFAULT '0', files_in_used INT(10) UNSIGNED NOT NULL DEFAULT '0', files_out_used INT(10) UNSIGNED NOT NULL DEFAULT '0', files_xfer_used INT(10) UNSIGNED NOT NULL DEFAULT '0' ) TYPE=MyISAM; CREATE TABLE users ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, userid VARCHAR(32) NOT NULL DEFAULT '', passwd VARCHAR(32) NOT NULL DEFAULT '', uid SMALLINT(6) NOT NULL DEFAULT '5500', gid SMALLINT(6) NOT NULL DEFAULT '5500', 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='ProFTP user table';
A ftpquotatallies táblát a proftpd használja, ahhoz nem kell nyúlni.
Modulok engedése
Modulok engedélyezése:
nano /etc/proftpd/modules.conf
Vegyük ki a megjegyzést a következő sorok esetén:
... LoadModule mod_sql.c ... LoadModule mod_sql_mysql.c ...
SQL beállítás
Készítsünk egy új konfigurációs fájlt.
nano /etc/proftpd/con.d/mysqlUser.conf
A felhasználókat saját könyvtárukba zárjuk
DefaultRoot ~
A fő konfigurációs fájlban keressük meg a Include /etc/proftpd/sql.conf sorokat, vegyük ki a megjegyzést előle:
Include /etc/proftpd/sql.conf
Szerkesszük a sql.conf fájlt:
nano /etc/proftpd/sql.conf
<IfModule mod_sql.c> SQLBackend mysql SQLEngine on SQLAuthenticate on # A jelszavakat a MysQL-ben crypttel titkosítjuk: SQLAuthTypes Crypt Plaintext # Kapcsolódás az MySQL adatbázishoz: SQLConnectInfo ftp@localhost proftpd titok # A felhasználói tábla leírása: SQLUserInfo users userid passwd uid gid homedir shell # A csoport tábla leírása: SQLGroupInfo groups groupname gid members </IfModule>
Ha szükséges még ez is a fentiekhez:
# Felhasználó könyvtárának létrehozása ha nem létezik: SQLHomedirOnDemand on # Minimális UID és GID SQLMinID 500 # A számláló növelése, ha egy felhasználó belép SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser # A módosítás feljegyzése feltöltésről vagy törlésről SQLLog STOR,DELE modified SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
Ugyancsak a fentiekhez ha kell kvóta:
QuotaEngine on QuotaShowQuotas on QuotaDirectoryTally on QuotaDisplayUnits Mb SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies QuotaLimitTable sql:/get-quota-limit QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally RootLogin off RequireValidShell off
Felhasználó felvétele
INSERT INTO 'ftpquotalimits' ('name', 'quota_type', 'per_session', 'limit_type', 'bytes_in_avail', 'bytes_out_avail', 'bytes_xfer_avail', 'files_in_avail', 'files_out_avail', 'files_xfer_avail') VALUES ('mari', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0); INSERT INTO 'ftpuser' ('id', 'userid', 'passwd', 'uid', 'gid', 'homedir', 'shell', 'count', 'accessed', 'modified') VALUES (1, 'mari', 'titok', 5001, 5001, '/srv/vftp/mari', '/sbin/nologin', 0, '', '');
Irodalom
- http://www.proftpd.org/docs/ (2019)