Rendszergazda & webfejlesztő devblog Laczkó Zoltán blogja

30Már/100

.ftpaccess – FTP hozzáférés korlátozás

Egyszerű, univerzális FTP hozzáférés korlátozási módszer, amit az összes (el)ismert ftp szerver támogat.


Aki kicsit is jártas a webfejlesztésben, az már találkozott a .htaccess fájlokkal, amit többnyire a weblap gyökerében, vagy bármelyik tetszőleges könyvtárában létrehozható. Használatával beállításokat tudunk elvégezni, vagy korlátozni a hozzáférést. A működéséhez nagyon hasonlít az .ftpaccess fájléra, vagyis minden könyvtár megnyitása előtt a szerver ellenőrzi a fájl létezését, ha van, akkor értelmezi azt.

Mit kell beállítani, hogy működjön?

A legelterjedtebb ftp szerver programokban semmit nem kell beállítani, alapértelmezettként ismeri és értelmezi a .ftpaccess fájlokat. Ha nem vagyunk biztosak, hogy az általunk használt program kezeli-e, akkor nézzük meg a program dokumentációját, weblapját.

A lenti példákban szerepelni fog domain alapú szűrés is, ehhez viszont alapfeltétel, hogy a szerverünk konfigurációs fájljában a névfeloldás be legyen kapcsolva.

# proftpd.conf
UseReverseDNS on

Mit tudok korlátozni és mi alapján?

Tömören az adott könyvtárban bármelyik FTP parancs használatát. Így akár a könyvtár tartalmának listázását, fájlok létrehozását, olvasását, vagy törlését tudjuk szabályozni a felhasználó IP címe, hostja, domainje, vagy egyszerűen a felhasználói neve alapján. Mivel sok FTP parancs létezik, ezért létrehoztak csoportokat is az egyszerűbb használhatóság kedvéért.

  • ALL: Minden FTP parancs
  • LOGIN: Minden belépéssel kapcsolatos parancs
  • DIRS: Minden könyvtárakkal kapcsolatos parancs (CDUP, CWD, LIST, MDTM, NLST, PWD, RNFR, STAT, XCUP, XCWD, XPWD)
  • READ: Minden fájl olvasással kapcsolatos parancs (RETR, SIZE)
  • WRITE: Minden fájl írással kapcsolatos parancs (APPE, DELE, MKD, RMD, RNTO, STOR, STOU, XMKD, XRMD)

Formátum

A .ftpaccess fájlok hagyományos szöveges fájlok strukturált konfigurációs tartalommal. Felépítésük a következő:

<Limit {parancs lista}>
   Order allow,deny
   Allow [from] {feltétel}
   Deny [from] {feltétel}
</Limit>

Összesen 3 fontos vezérlő parancs van, amit tudunk kombinálni egy Limit -en belül. Egy fájlban lehet egymás után több Limit is.

Order

Az utána következő Allow és Deny feltételek értelmezését befolyásolja. Lehetséges érteke az allow,deny (megengedő) és a deny,allow (korlátozó).

Az allow,deny esetében elsőnek az Allow feltételeket értelmezi. Amennyiben egy Allow feltétel teljesül, akkor a Deny feltételek sose lesznek értelmezve és a parancs engedélyezett lesz. Ha nem teljesül egy Allow feltétel sem, és egyetlen egy Deny feltétel sem tiltja meg egyértelműen, akkor a parancs engedélyezett lesz.

A másik beállítási lehetőség a deny,allow esetében a Deny feltételek lesznek elsőnek értelmezve. Ha Deny feltétel teljesül, akkor a parancs tiltott lesz. Ha nem teljesül egy Deny feltétel sem, és egyetlen egy Allow feltétel sem engedélyezi, akkor a parancs tiltott lesz.

Az alapértelmezett a értéke az allow,deny.

Allow és Deny

A vezérlő parancs után következik egy opcionális from, majd a feltételt, ami lehet egy konkrét IP cím (192.168.1.2), tartomány (10.0.0.0/8), host (www.laczko.net), domain (.laczko.net, vagy *.laczko.net), illetve all (mindenki) és none (senki). Az utóbbi kettőre van egy-egy rövidítése AllowAll, DenyAll néven.

Létezik még ezen kívül természetesen több parancs is (AllowUser, AllowGroup, AllowClass, stb), de ezekről most nem írok.

Példák

Nézzük pár példát a gyakorlatból

Az alábbi példa erősen ajánlott minden tárhely gyökerébe, megakadályozni az ftp vírust terjesztő programok belépését.

<Limit ALL>
   Order allow,deny
   Allow from *.hu
   Deny ALL
</Limit>

Korlátozzuk minden parancsot minden felhasználónak, kivéve azoknak, akinek a hostja .hu -ra végződik.

<Limit WRITE>
   Order allow,deny
   Allow .laczko.net
   Allow 10.0.0.0/8
   DenyAll
</Limit>

Korlátozzuk az összes írási parancs használatát minden felhasználónak, akinek a hostja nem végződik .laczko.net -re, vagy nem a 10.0.0.0/8 -as tartományba tartozó IP címmel rendelkezik.