HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Vicceskedés az SSH szerverrel

2009.09.14. 14:00 bagoj ur

Már írtam két bejegyzést is SSH szerver és SFTP témában [1,2], de ez a téma kimeríthetetlen.

2008. áprilisa óta, az OpenSSH 4.9-es verziójával lehetőség nyílt, hogy a korábbi körülményes(ebb) és neheze(bbe)n karbantartható módszerek helyett (és ezek között a jailer szerintem a legkiválóbb, köszi Höltzl Peti!) immár natív módon is készíthessünk Chroot-ot az SFTP bejelentkezésekhez.

Az alapprobléma, ha esetleg nem ugrana be valakinek, hogy az SFTP a teljes fájlrendszerhez hozzáférést ad, és hát a rendszerünkben nyilván van egy rakás fájl, amely bár minden felhasználó számára olvasható kell legyen, mi mégsem szeretnénk ha olyan helyen kolbászolnának, ahol nem kéne. Az SFTP pedig már eléggé alap elvárás mostanában a sima, titkosítatlan FTP helyett, ahol a jelszó is átmegy mindenféle titkosítás nélkül. Jó lenne tehát egy olyan megoldás, ami bizonyos felhasználókat az általunk kívánt könyvtárakban tart.

1. Frissítsük fel emlékezetünket az sshd_conf-ról

Ez ugyebár úgy működik, hogy a globális szekció után a "Match" kulcsszóval szűkíthetjük a feltételeket felhasználókra, csoportokra, host nevekre vagy IP-címekre. A feltétel után használt konfigurációs parancsok pedig felülírják a globális szekciót (bár nem mindegyik parancs használható természetesen, pl. a portot nem tudjuk változtatni user függvényében, ez gyorsan belátható).

2. Tegyünk hozzá egy csipet chroot-ot

A 4.9-es (igazából a 4.8-as, de asszem az csak BSD-re jelent meg) evrziótól használhatunk többek között egy ChrootDirectory parancsot is, amely "bezárja" a feltételnek megfelelő felhasználókat, csoportokat stb. az adott könyvtárba, felfelé nem léphet. Természetesen ez azt is jelenti, hogy az sftp binárist nem tudja meghívni az sshd szerver, hiszen a root könyvtár megváltozott; ennek kivédésére a fejlesztők belefejlesztettek magába az sshd-ba egy belső sftp szevrert, amit elmésen internal_sftp-nek kereszteltek el. Ha használni akarjuk a chrootot, akkor vagy ezt használjuk, vagy a chrooton belül létre kell hozni a szükséges könyvtárszerkezetet, bele a libeket és az sftp futtathatót, ami a karbantartást megint nehézkessé tenné (hiszen minden chroot-tal ezt meg kéne tennünk), tehát lehetőleg használjuk inkább a beépítettet.

AllowUsers god adam@192.168.0.10 eve
Match User adam,eve
    AllowTcpForwarding no
    X11Forwarding no
    ForceCommand internal-sftp
    ChrootDirectory /var/paradise
A fenti kis szösszenetben god, adam és eve léphet be az ssh-ra. Isten nincs korlátozva, Ádám és Éva pedig be vannak zárva a Paradicsomba. A régebbről ismert trükkel letiltjuk a Tcp és X11 forwardingot is.

3. Ha ennél finomabb jogok megadására van szükség: Apparmor

Ha szeretnénk tovább cizellálni a dolgot, például hogy Évának és Ádámnak is adjunk némi magánéletet, és legyen egy közös területük is, azt már az sftp/ssh szerver nem igazán tudja megoldani (persze nem is feladata). Ha azonban mégis többen használnak egyetlen területet, és a jogokat szabályoznánk, akkor képbe jöhet az AppArmor. Mostanában olvastam, hogy frankón lehet egy profilt létrehozni az sftp program számára is.

Az AppArmor egy olyan biztonsági megoldás, amely lehetővé teszi a programok biztonsági profilokkal való társítását, amely profil lekorlátozza az adott program erőforrásokhoz való hozzáférését, s így lehetővé teszi a lehető legkisebb privilégiumszintű futtatást. Ilyen módon kiegészíti a felhasználóhoz/csoportokhoz kötött jogokat azzal, hogy a program számára újabb megkötéseket ad. Ezzel sok biztonsági résre alapuló támadás kivédhető, hiszen a programot alapból csak a legszükségesebbekhez engedjük hozzá. Hasonló megoldás még a SELinux, amely abból a szempontból jobb, hogy annak nem döglődik a fejlesztése; de amíg az Ubuntu az Apparmor-t támogatja, ezt kell használnunk.

Fontos megérteni tehát ismét: nem a felhasználóknak hozunk létre profilt, hanem az sftp futtathatónak! Ezt pedig létrehozhatjuk úgy, hogy beírjuk ezt a /etc/apparmor.d/openssh-sftpd fájlba:

#include <tunables/global>
/usr/lib/openssh/sftp-server {
  #include <abstractions/base>
  #include <abstractions/nameservice>
 
  # A szülő könyvtárakra muszáj r access
  / r,
  /var/ r,
  /var/paradise/ r,
  /var/paradise/**/ r,

  owner /var/paradise/** rwkl,
  /var/paradise/shared/** rwkl,
}
A fentiek magyarázata: A /var/paradise/-ig szükség van az olvasási (r) jogra, aztán a /var/paradise/ alatti összes könyvtárra is megadjuk a read jogot (a kettős csillag jelentése: minden karakter, beleértve a perjelet is. A lezáró perjel pedig azért kell, mert csak könyvtárnevekre adunk jogot, a fájlokra nem). A /var/paradise/** azt jelenti, hogy az összes könyvtár és fájl a Paradicsomban, tehát ha Ádám vagy Éva létrehoz egy könyvtárat, akkor az abban lévő fájlokat már csak Ő fogja látni. Utolsóként pedig ott a shared könyvtár, amelyet mindenki elérhet.

Ha megalkottuk a profilt, élesíteni kell a

apparmor_parser -r /etc/apparmor.d/openssh-ftpdparanccsal (ha már egyszer bezúztuk, akkor használnunk kell a --replace opciót). Ezek után Ádám és Éva csak a megadott helyen huncutkodhat.

1 komment

Címkék: linux biztonság profil ubuntu ssh példa parancssor apparmor

A bejegyzés trackback címe:

https://bagojur.blog.hu/api/trackback/id/tr41372776

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Meta Morphozis 2009.12.16. 08:20:52

hihi: Megfelelő helyen....