Felhasználói eszközök

Eszközök a webhelyen


oktatas:linux:ftp_szerver:proftpd

< FTP szerver

ProFTPd

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

oktatas/linux/ftp_szerver/proftpd.txt · Utolsó módosítás: 2021/05/01 00:24 szerkesztette: admin