Hello mindenkinek,
Régóta foglalkoztatott , hogy hogyan lehet megoldani azt, hogy egy ssh-val be engedett felhasználót, hogyan tudunk oly módon bezárni a saját kis világába, hogy az alaprendszert ne veszélyeztesse, de szabadon tudjon dolgozni.
Sokáig keresgéltem az interneten, és a chroot megoldás tűnt a legjobbnak. A chroot egy olyan virtuális környezetet tud biztosítani ssh hozzáférés esetén amelyben a távoli felhasználó korlátok nélkül tevékenykedhet szinte bármit megcsinálhat, és az üzemeltető szerveren mégsem tesz kárt.
Megpróbálok minden részletre kiterjedő leírást adni. Leírom a chroot környezet kialakítását, az sshd démon konfigurációját , valamint a pam.d démon beállítását chroot környezeti felhasználó számára.
croot környezet kialakítása
Mivel én Centos rendszert használtam (RedHat klón) ezért a rendszerhez kapcsolodó programokat és rendszerelemeket használtam. A yum csomagkezelő lehetővé teszi, hogy az rpm csomagokat egy tetszőleges helyre telepítsük. A tetszőleges könyvtár jelen esetben a chroot környezet maga. Ez a gépen bárhol lehet, ajánlott mégis egy olyan helyre tenni amit utána könnyen tudunk kezelni.
$ssh_user - a felhasználó akit be szeretnél zárni.
$chroot_dir - a könyvtár ahova az
[root@host /] chroot_dir=/home/temp/chroot/ [root@host /] yum -c /etc/yum.conf --installroot=$chroot_dir install rootfiles [root@host /] yum -c /etc/yum.conf --installroot=$chroot_dir install shadow-utils bind-utils gnupg vim-enhanced vixie-cron crontabs passwd which kudzu dhclient pciutils eject alsa-utils mkisofs |
A $chroot_dir/etc/passwd fájlból el kell távolítani a root usert. EZ NAGYON FONTOS HA EZT NEM TESZED MEG HIÁBA VOLT MINDEN !!!
Az új környezethez még létre kell hozni egy két szükséges device-t és processzt.
[root@host /] cd $chroot_dir [root@host /] mount null -t proc proc [root@host /] mount null -t sysfs sys [root@host /] mount --bind /dev dev/ [root@host /] mount devpts -t devpts dev/pts |
Ezeket a gyökér fájlrendszerből csatoljuk be. A proc a dev és a sys a chroot környezet működéséhez kell. A pts fájlrendszert először nem csatlakoztattam, ha ezt nem teszzük meg akkor távoli elérés esetén az alábbi hibaüzenet jelenleh meg a /var/log/secure logban.
Accepted password for $ssh_user from $remote_ip port 50884 ssh2 pam_unix(sshd:session): session opened for user $ssh_user by (uid=0) pam_chroot(sshd:session): chroot(/$chroot_dir) succeeded error: openpty: No such file or directory error: session_pty_req: session 0 alloc failed |
A root fájl rendszerből még egy két konfigurációs állományt át kell másolnunk
[root@host /] cp /etc/sysconfig/authconfig $chroot_dir/etc/sysconfig/ |
Ezek után biztonság kedvéért távolítsuk el az ssh programot valamint az rpm csomagkezelőt a chroot környezetből. Természetesen ha ezekre szükségetek van akkor nem kell eltávolítani, nekem nem volt rá szükségem ezért eltávolítottam.
[root@host /] yum -c /etc/yum.conf --installroot=$chroot_dir remove rpm [root@host /] yum -c /etc/yum.conf --installroot=$chroot_dir remove openssh-clients [root@host /] yum -c /etc/yum.conf --installroot=$chroot_dir remove openssh |
A chroot környezet jogosultságait az alábbiak szerint állítsuk be. A $chroot_dir arra könyvtárra mutat ahova a useert be akarjuk zárni, ennek a szülő könyvtárát a root userhez kell hozzárendelni. Nekem a chroot környezet a /$dir1/$dir2/$dir3/ alatt volt
[root@host /$chroot_dir] cd .. ; ls -latr drwxr-xr-x 4 root root 4096 Sep 16 13:53 .. [root@host /$dir1/$dir2/$dir3/] ls -latr drwxrwxrwx 21 root root 4096 Sep 16 14:28 tmp |
Ezek után rá térhetünk a root környezetben lévő chroot konfigurációs állományra (/etc/security/chroot.conf)
[root@host /] more /etc/security/chroot.conf |
Be kell még állítani az ssh session-hoz tartozó pam konfigurációt (/etc/pam.d/ssh)
[root@host /] more /etc/pam.d/ssh # a fájl végére szúrd be a következő sort session required pam_chroot.so |
Ha a $ssh_user command promptját is akarod módosítani akkor a felhasználó bashrc fájlját kell módosítani. A PS1 változó beállításáról itt találsz további információt
[root@host /$chroot_dir/home/$ssh_user] more .bashrc [$ssh_user@hostname: $aktuális könyvtár nem teljes útvonalla] $ |