Wij hebben servers waarop SCPonly is geïmplementeerd als een veilige file transfer oplossing.
Met het script in /usr/share/doc/scponly/setup_chroot heb ik in de home folders van familie en klanten een jailed root gemaakt met alleen de commandoset die een SSH cliënt mag gebruiken.
De home folder van onze privé server als voorbeeld nemend, ziet dat er nu zo uit:
De jailed home directory zelf en de subdirectories met systeemgereedschappen zijn eigendom van root, zodat de gebruikers daarin geen bestanden kunnen vervangen om zodoende door de beveiliging heen te kunnen breken. In dit geval is de 'Video' map in beheer van een andere gebruiker, read-only voor de gastgebruiker.
Met Fugu als client kan ik op de server inloggen en bestanden kopiëren, en er is voorheen ook probleemloos een oudere versie van WinSCP gebruikt. Maar met de nieuwste WinSCP werkt het niet. Er zijn 2 problemen, waarvan ik vermoedelijk de eerste al heb opgelost:
Probleem 1 (opgelost, maar misschien niet helemaal goed):
Een gebruiker met WinSCP kon wel inloggen maar werd er daarna meteen uitgeknikkerd. Op de server stond dit in /var/log/auth.log:
Het bleek dat de client het commando 'groups' gebruikt in /home/gast/usr/bin/, maar dit is een shell-script, en de shell scripting omgeving is afwezig in de jailed root. Het leek me een beetje dom dat het SCPonly pakket het shell script wel dupliceert naar de home folders, om er vervolgens een omgeving van te maken waar de shell is afgeschermd. Maar goed, het installatie-script teruglezend zag ik dat ie wel aangeeft dat het probleem bestaat en ook een hint geeft om het op te lossen.
In /usr/share/doc/scponly staat een vervanging voor het 'groups' shell-script: 'groups.c'. Volgens de handleiding zou er een binary programma moeten staan 'groups', ik zag alleen 'groups.c', dus ik heb maar 'gcc groups.c' gedaan en het gecompileerde resultaat op de plek '/home/gast/usr/bin/groups' gezet in plaats van het oude shellscript. Als je vanaf de command line het /home/gast/usr/bin/groups opstart geeft ie 'root' terug, hetzelfde als het shell script in het gewone systeem.
Probleem 2:
Nu krijgt de WinSCP client deze foutmelding te zien:
In de server logs niets bijzonders verder:
Met het script in /usr/share/doc/scponly/setup_chroot heb ik in de home folders van familie en klanten een jailed root gemaakt met alleen de commandoset die een SSH cliënt mag gebruiken.
De home folder van onze privé server als voorbeeld nemend, ziet dat er nu zo uit:
code:
1
2
3
4
5
6
7
8
9
| drwxr-xr-x 10 root root 4096 Jul 3 2006 . drwxr-xr-x 6 root root 4096 Jul 3 2006 .. drwxrwxr-x 513 myth myth 12288 Feb 10 18:56 Music drwxrwxr-x 2 gast users 4096 Jul 25 2006 Documents drwxrwxr-x 8 myth myth 4096 Feb 10 20:40 Video drwxr-xr-x 2 root root 4096 Jun 3 2006 bin drwxr-xr-x 2 root root 4096 Jun 3 2006 etc drwxr-xr-x 3 root root 4096 Jun 3 2006 lib drwxr-xr-x 4 root root 4096 Jun 3 2006 usr |
De jailed home directory zelf en de subdirectories met systeemgereedschappen zijn eigendom van root, zodat de gebruikers daarin geen bestanden kunnen vervangen om zodoende door de beveiliging heen te kunnen breken. In dit geval is de 'Video' map in beheer van een andere gebruiker, read-only voor de gastgebruiker.
Met Fugu als client kan ik op de server inloggen en bestanden kopiëren, en er is voorheen ook probleemloos een oudere versie van WinSCP gebruikt. Maar met de nieuwste WinSCP werkt het niet. Er zijn 2 problemen, waarvan ik vermoedelijk de eerste al heb opgelost:
Probleem 1 (opgelost, maar misschien niet helemaal goed):
Een gebruiker met WinSCP kon wel inloggen maar werd er daarna meteen uitgeknikkerd. Op de server stond dit in /var/log/auth.log:
code:
1
2
3
4
5
| Feb 11 19:24:03 myth sshd[3920]: Accepted keyboard-interactive/pam for gast from xx.xx.xx.xx port 62549 ssh2 Feb 11 19:24:03 myth sshd[3927]: (pam_unix) session opened for user gast by (uid=0) Feb 11 19:24:03 myth scponly[3928]: running: /usr/bin/groups (username: gast(1001), IP/port: xx.xx.xx.xx 62549 2222) Feb 11 19:24:03 myth scponly[3929]: failed: /usr/bin/groups with error No such file or directory(2) (username: gast(1001), IP/port: xx.xx.xx.xx 62549 2222) Feb 11 19:24:03 myth sshd[3927]: (pam_unix) session closed for user gast |
Het bleek dat de client het commando 'groups' gebruikt in /home/gast/usr/bin/, maar dit is een shell-script, en de shell scripting omgeving is afwezig in de jailed root. Het leek me een beetje dom dat het SCPonly pakket het shell script wel dupliceert naar de home folders, om er vervolgens een omgeving van te maken waar de shell is afgeschermd. Maar goed, het installatie-script teruglezend zag ik dat ie wel aangeeft dat het probleem bestaat en ook een hint geeft om het op te lossen.
In /usr/share/doc/scponly staat een vervanging voor het 'groups' shell-script: 'groups.c'. Volgens de handleiding zou er een binary programma moeten staan 'groups', ik zag alleen 'groups.c', dus ik heb maar 'gcc groups.c' gedaan en het gecompileerde resultaat op de plek '/home/gast/usr/bin/groups' gezet in plaats van het oude shellscript. Als je vanaf de command line het /home/gast/usr/bin/groups opstart geeft ie 'root' terug, hetzelfde als het shell script in het gewone systeem.
Probleem 2:
Nu krijgt de WinSCP client deze foutmelding te zien:
code:
1
| Error getting name of current remote directory |
In de server logs niets bijzonders verder:
code:
1
2
3
4
| Feb 13 09:51:45 myth sshd[14856]: Accepted keyboard-interactive/pam for gast from xx.xx.xx.xx port 64215 ssh2 Feb 13 09:51:45 myth sshd[14865]: (pam_unix) session opened for user gast by (uid=0) Feb 13 09:51:46 myth scponly[14866]: running: /usr/bin/groups (username: gast(1001), IP/port: xx.xx.xx.xx 64215 2222) Feb 13 09:51:46 myth sshd[14865]: (pam_unix) session closed for user gast |