Felhasználói eszközök

Eszközök a webhelyen


oktatas:linux:ftp_szerver:pure-ftpd

< Ftp szerver

Pure-ftpd

  • Szerző: Sallai András
  • Copyright © Sallai András, 2011, 2013, 2018
  • Licenc: GNU Free Documentation License 1.3

Az FTP szerverről

Az Interneten az első funkció amit használtak az a fájlok átvitele. Az FTP a File Transfer Protocol angol szavakból alkotott betűszó. Úgy fordíthatjuk, hogy Fájl Átviteli Protokoll.

Alapértelmezetten a 21 porton fogad kapcsolatokat és a 20-as porton szolgálja ki az adatokat.

Passzív módban azonban a 21-es portot használja, vezérlésre, az adatátvitelre pedig 1023 felett egy portot.

Telepítés

apt-get install pure-ftpd

Telepítés után minden linuxos felhasználó hozzáférhet saját könyvtárához FTP kapcsolaton keresztül.

A legújabb verzió beszerezhető itt:

Tesztelés

# ps ax
# ss -lt
# apt install ftp
# adduser mari
$ ftp localhost
Connected to localhost.
220---------- Welcome to Pure-FTPd [privsep]  [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 19:22. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 15 minutes of inactivity.
Name (localhost:janos): mari
331 User mari OK. Password required
Password:
230 OK. Current directory is /home/mari
Remote system type is /home/mari
Using binary mode to transfer files.
ftp>

Virtuális felhasználók

A pure-ftpd beállítása

Először rá kell vennünk a pure-ftpd programot, hogy kezelje saját virtuális felhasználóit:

ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/60PureDB

Létre kell hoznunk a rendszerben egy ftpgroup csoportot és egy ftpuser felhasználót. A pure-ftpd program ezen felhasználó és csoport jogaival fog hozzáférni a fájlrendszerhez:

groupadd -g 5000 ftpgroup
useradd -u 5000 -d /dev/null -c "pureftpd user" -g ftpgroup -s /bin/false ftpuser

Ha készen van, végig kell gondolnunk a virtuális felhasználók könyvtárai hol lesznek. Ez lehet például a /home/virtual-ftp könyvtár. Hozzuk létre:

mkdir /home/virtual-ftp/

Ha egy Joe nevű felhasználónak akarunk hozzáférést adni akkor virtual-ftp könyvtárban készítsunk számára alkönyvtárat:

mkdir /home/virtual-ftp/joe
chown ftpuser.ftpgroup /home/virtual-ftp/joe

A pure-ftpd szerver újraindítása előtt vegyünk fel minimum egy felhasználót, mert másként panaszkodni fog a /etc/pure-ftpd/pureftpd.pdf fájl hiányára.

Felhasználókezelés

Felhasználó felvétele

Vegyük fel a joe virtuális felhasználót:

pure-pw useradd joe -d /home/virtual-ftp/joe -u ftpuser -g ftpgroup -m
/etc/init.d/pure-ftpd restart

Ha az adott könyvtárban az apache webszervernek írni kell, akkor tegyük az ftpuser felhasználót a www-data csoport tagjává.

Felhasználó törlése

pure-pw userdel jozsi -m 

Jelszó megváltoztatása

pure-pw passwd jozsi -m

Felhasználó jellemzőinek megváltoztatása

pure-pw usermod jozsi -d /home/virtual-ftp/ujkonyvtar -m 

A példában a jozsi felhazsnálónak egy másik könyvtárat adunk meg.

Adatbázis aktualizálása

pure-pw mkdb

Virtuális felhasználók MySQL-ben

apt-get install pure-ftpd-mysql mysql-server-5.0
mysql -u root -p
  GRANT ALL PRIVILEGES ON ftpd.* TO 'ftpd'@'localhost' IDENTIFIED BY 'titok';
  FLUSH PRIVILEGES;
 
  CREATE TABLE users (
    User VARCHAR(16) BINARY NOT NULL,
    Password VARCHAR(64) BINARY NOT NULL,
    Uid INT(11) NOT NULL default '-1',
    Gid INT(11) NOT NULL default '-1',
    Dir VARCHAR(128) BINARY NOT NULL,
    PRIMARY KEY  (User)
  );
mcedit /etc/pure-ftpd/conf/db/mysql.conf
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLSocket     /var/run/mysqld/mysqld.sock
MYSQLUser       ftpd
MYSQLPassword   titok
MYSQLDatabase   pureftpd
MYSQLCrypt      cleartext
MYSQLGetPW      SELECT Password FROM users WHERE User="\L"
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L"
/etc/init.d/pure-ftpd restart

Ki kell deríteni az ftpuser userid-jét és a ftpgroup groupid-jét:

cat /etc/passwd | grep ftpuser

Valami ilyesmit láthatunk:

ftpuser:x:1001:1001::/dev/null:/bin/false

Ezek után felvehetjük a felhasználót:

Egy felhasználó felvétele:

mysql -u root -p
INSERT INTO users (User, Password, Uid, Gid, Dir) 
VALUES ('joe', 'titok', 1001, 1001, '/home/virtual-ftp/joe');

TLS

A TLS beállítása

apt-get install openssl

Készítenünk kell egy titkos kulcsot ami egyben tanúsítvány is:

mkdir -p /etc/ssl/private

openssl req -x509 -nodes -newkey rsa:1024 \ 
  -keyout /etc/ssl/private/pure-ftpd.pem \
  -out /etc/ssl/private/pure-ftpd.pem

chmod 600 /etc/ssl/private/*.pem

Beállítjuk a Pure-FTPd rendszert, hogy képes legyen használni a TLS-t:

echo 2 > /etc/pure-ftdp/con/TLS

A TLS kikapcsolása:

echo 0 > /etc/pure-ftdp/con/TLS

TLS és cleartext engedélyezése egyszerre:

echo 1 > /etc/pure-ftdp/con/TLS

Anonymous FTP

Az anonymous elérésről

Az anonymous felhasználó ha be van állítva egy FTP szerveren, akkor olyan felhasználók is hozzáférhetnek FTP szerverünkhöz, akinek nincs semmilyen hozzáférése. Tehát linuxos és virtuális felhasználóként sincs jelen a rendszerben. Ilyet általában akkor szoktunk használni, ha valamit szeretnénk közzé tenni, de nem weboldalon akarjuk ezt megtenni, mert nagy fájlokról van szó. Persze weben is közzé lehet tenni, de nagy fájlok közzétételére találták ki az FTP-t. Az anonymous felhasználó természetesen csak egy könyvtárhoz és persze azok alkönyvtáraihoz férhet majd hozzá.

Beállítások

Anonymous FTP szerverhez létre kell hozni egy felhasználót és egy csoportot akinek a jogaival az FTP szerver hozzáfér majd az anonymous felhasználók könyvtárához. Az anonymous felhasználók könyvtára lehet például a home könyvtárban egy ftp könyvtár.

Az ftp csoport és az ftp felhasználó felvétele:

groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymous FTP"  -g ftp ftp

Be kell állítanunk a szerver konfigurációjában, hogy engedélyezve van az anonymous. Ezt a tiltás tagadásával tehetjük meg. Szerkesszük az NoAnonymous állományt például az mcedit szövegszerkesztővel, vagy használjuk az echo parancsot:

echo no > /etc/pure-ftpd/conf/NoAnonymous

Az állomány tartalmát no-ra állítjuk.

A /home/ftp könyvtár jogait be kell állítanunk:

chmod 555 /home/ftp

Ez anonymous felhasználóknak beálllíthatunk feltöltési lehetőséget is. Erre a célra az incoming nevű könyvtárat szoktuk létrehozni az ftp könyvtáron belül:

mkdir -p /home/ftp/incoming
chown ftp.nogroup /home/ftp/incoming
chmod 311 /home/ftp/incoming

Ha az anonymous felhasználók feltölteni is szeretnének, azt mindig egy „incoming” nevű könyvtárba engedélyezzük. Az incoming könyvtárnak a jogait ilyenkor úgy állítjuk be, hogy oda fel lehessen tölteni, de annak tartalma ne legyen látható, listázható. A fenti beállítások ezt teszik lehetővé.

A beállítások után újra kell indítanunk az FTP szervert:

systemctl restart pure-ftpd

Tesztelés

$ ftp localhost
Connected to localhost.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 18:17. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (localhost:mari): anonymous
230 Anonymous user logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Helytelen beállítás esetén:

$ ftp localhost
Connected to localhost.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 17:51. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (localhost:joska):

Ha azt látjuk a bejelentkezéskor, hogy „220-This is a private system - No anonymous login” akkor nem a beállítások nem jók.

Az „ls” paranccsal ellenőrizhetjük a könyvtár (/home/ftp) tartalmát:

ftp> ls
200 PORT command successful
150 Connecting to port 44620
226-Options: -l 
226 0 matches total
ftp> 

Ez most üres.

A szervert elhagyni:

ftp> bye
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.

A ftp> promt után a „help” parancs további utasításokat ad számunkra.

ftp> help
Commands may be abbreviated.  Commands are:
 
!		debug		mdir		qc		send
$		dir		mget		sendport	site
account		disconnect	mkdir		put		size
append		exit		mls		pwd		status
ascii		form		mode		quit		struct
bell		get		modtime		quote		system
binary		glob		mput		recv		sunique
bye		hash		newer		reget		tenex
case		help		nmap		rstatus		tick
cd		idle		nlist		rhelp		trace
cdup		image		ntrans		rename		type
chmod		lcd		open		reset		user
close		ls		prompt		restart		umask
cr		macdef		passive		rmdir		verbose
delete		mdelete		proxy		runique		?
ftp> 

Egyéb beállítások

Névfeloldás tiltása

echo yes > /etc/pure-ftpd/conf/DontResolve

Ha szerverünk IP címe nem oldható fel host névvé, illetve domain névvé, akkor a /var/log/syslog fájlban a következőhöz hasonló hibaüzeneteket találunk:

Sorry, invalid address given

Ilyenkor lebeszélhetjük a Pure-FTPd szervert arról, hogy fel akarja oldani az IP címet valamilyen névvé.

/etc/init.d/pure-ftpd restart

Kapcsoló között meg kell jelenjen a következők valamelyike:

-H
--dontresolve

Chroot mindenki számára

echo yes > /etc/pure-ftpd/conf/ChrootEveryone

Home könyvtár automatikus létrehozása

echo yes > /etc/pure-ftpd/conf/CreateHomeDir

Aktívmód erőltetése

echo yes > /etc/pure-ftpd/conf/NATmode

Ezzel a beállítással nem használhatjuk a passzívmódot.

Kapcsolóval:

-N

Passzívmód portjai

Passzívmódhoz beszoktuk korlátozni, milyen portokat használhat a Pure-FTPd.

Például:

echo "29799 29899" > /etc/pure-ftpd/conf/PassivePortRange

Kapcsolóval:

-p 41000:41100

Kapcsolat irányának figyelése

apt install tcpick
tcpick

Maximális kliensszám

Gondoljunk arra, hogy minden kapcsolathoz két port kell.

echo 50 > /etc/pure-ftpd/conf/MaxClientsNumber

Bőbeszédű napló

echo 'yes' > /etc/pure-ftpd/conf/VerboseLog

Nem törölhető fájlok

echo yes > /etc/pure-ftpd/conf/KeepAllFiles

pure-ftpd-wrapper

A Debian alatt a pure-ftpd-wrapper teszi lehetővé, hogy a beállításokat a /etc/pure-ftpd/conf fájlból olvassa.

Több parancsért lásd a pure-ftpd-wrapper kézikönyvet:

man pure-ftpd-wrapper

Hibakezelés

Jelenség alapján

* A kapcsolat lassan épül fel.

A szerver szeretné feloldani az kliens IP címét névvé, de nem tudja.

Oldjuk meg, hogy a kliens IP címe feloldható legyen. Ez megoldható a szerveren egy /etc/hosts fájl bejegyzéssel is. Vagy beszéljük le a szervert a névfeloldásról, lásd Beállítások fejezet.

Ellenőrzőlista

Mit ellenőrzünk és hogyan?

  1. Fut-e az FTP szerver?
    1. ps ax | grep pure-ftpd
  2. nyitva van-e port
    1. netstat -t -n -l
    2. nmap localhost
  3. Működik-e a szerveren helyben (localhost) az FTP elérés?
    1. ftp localhost
  4. Létezik-e az a felhasználó akinek a nevében be akarunk lépni?
    1. Linuxos
      1. cat /etc/passwd
    2. Virtuális
      1. cat /etc/pure-ftpd/pureftpd.passwd
  5. Létezik a felhasználónak a könyvtára?
    1. cat /etc/pure-ftpd/pureftpd.passwd és
    2. ls /home/virtual-ftp/ kimenetét összehasonlítjuk
    3. Feltételezve, hogy a felhasználónak a /home/virtual-ftp könyvtárban van könyvtára.
  6. Naplófájlok
    1. tail -f /var/log/syslog
    2. tail -f /var/log/auth.log
  7. Használható-e a hálózati kártya
    1. ping 192.168.5.2
    2. Feltételezve, hogy ez a saját gépünk IP címe.
  8. Van-e kapcsolat a belső hálózaton más gépekkel vagy a routerrel:
    1. ping 192.168.5.1
    2. Feltételezve, hogy ez a router IP címe.
  9. Van-e kapcsolat az Internet egy gépével
    1. ping 152.66.115.35
  10. Van-e kapcsolat az Internet egy gépével:
    1. ping kulsodomain.hu

FTP a tűzfalon

Szükségünk lesz a ip_conntrack_ftp modulra. Betöltéséről gondoskodjunk, mert nem töltődik be automatikusan.

Irodalom

oktatas/linux/ftp_szerver/pure-ftpd.txt · Utolsó módosítás: 2021/04/30 23:58 szerkesztette: admin