chroot (k.a. security-related)

Antonis Christofides anthony at itia.ntua.gr
Tue Feb 27 17:27:04 EET 2007


Γεια σε όλους,

καταρχήν βρήκα απάντηση σε μια ερώτηση που έκανα σε αρκετό κόσμο αλλά
δεν είχαμε βρει κάτι καλό.  Η ερώτηση ήταν: έχω file server, οι
χρήστες μπαίνουν από windows με samba, θέλουν όμως να βλέπουν και τα
αρχεία από μακριά.  Πώς;

 * Το ftp δεν αρέσει γιατί είναι unencrypted.
 * Το scp/sftp δε μας άρεσε γιατί πρέπει (νομίζαμε) να έχεις πρόσβαση
   στο server με ssh => μπορείς να πάρεις prompt.
 * Προτάθηκε ftp over ssl, αλλά αυτό έχει, μεταξύ άλλων, το
   μειονέκτημα ότι χρησιμοποιεί δύο κανάλια και δεν νομίζω ότι περνάει
   πάνω από NAT.  Το απλό ftp περνάει, υποθέτω, γιατί οι router
   σνιφάρουν την κίνηση και κάνουν αυτόματο port forwarding, κάτι που
   δεν γίνεται όταν χρησιμοποιείται ssl.

Η λύση είναι restricted shell που να επιτρέπει μόνο scp/sftp.  Τέτοια
είναι το scponly και το rssh.  Χρησιμοποίησα scponly, και στους
χρήστες μου συνιστώ το WinSCP, και φαίνεται να δουλεύει τζάμι (με
sftp).  Είναι πολύ τζιτζί γιατί έχω και δυο χρήστες που ενώ δεν
χρειάζονται prompt χρησιμοποιούν ssh tunneling, που δουλεύει θαυμάσια.

Πάμε στο επόμενο ερώτημα.  Θέλω τόσο οι χρήστες που χρειάζονται
prompt, όσο και οι sftp only, να βλέπουν ένα chrooted κομμάτι του
filesystem. 

Καταρχήν, όσον αφορά τα [s]ftp, μου κάνει εντύπωση πως ενώ υπάρχουν
εύκολες σχεδόν out-of-the-box λύσεις για να chroot στη home directory
του χρήστη, δεν βρήκα τρόπο να chroot στη /home.  Εν τω μεταξύ το
κουφό είναι ότι αν chroot στη $HOME τότε πρέπει να φτιάξω jail για
κάθε χρήστη.  Θα με κουφάνετε;  Ή έχω καταλάβει κάτι λάθος;  Εν πάση
περιπτώσει θέλω και για κάτι άλλους λόγους να chroot στη /home.

Δεύτερον, όσον αφορά το login, βρήκα μια υπόδειξη, να αλλάξω το shell
του χρήστη σε ένα scriptάκι που θα κάνει το εξής:
  /usr/sbin/chroot /home /bin/bash --login
Όμως, αυτό καταρχήν δεν δουλεύει (πρώτον, για κάποιο λόγο που δεν έχω
ανακαλύψει, το bash δεν φαίνεται να δίνει σημασία στο --login, και
δεύτερον, ξεκινάει στη /home αντί στη $HOME).  Επιπλέον, απαιτεί να
κάνω chmod u+s /usr/sbin/chroot, πράγμα ιδιαίτερα επικίνδυνο, αφού
όπως διαπίστωσα στη συνέχεια, με ένα
  chroot / cat /etc/shadow
μπορεί οποιοσδήποτε (non-chrooted) χρήστης να δει τα περιεχόμενα του
/etc/shadow και προφανώς να κάνει και άλλα κακά πράγματα.

Τρίτο πρόβλημα που έχω είναι ότι θέλω να κάνω chroot τον απάτση.  Έχω
βρει tutorials (π.χ. http://www.securityfocus.com/infocus/1694), ενώ
επιπλέον υπάρχει και το mod_chroot.  Αυτό το τελευταίο δεν φαίνεται να
είναι πολύ δημοφιλές όμως, γιατί; Υπάρχει κάποιος standard τρόπος με
τον οποίο το κάνουν οι ντεμπιανάδες;  Ή να ακολουθήσω απλά το
παραπάνω link;

Για το jail των χρηστών έχω χρησιμοποιήσει το cdebootstrap για να
εγκαταστήσω debian, από το οποίο εννοείται ότι έχω αφαιρέσει όλα τα
κακά πράγματα.  Να κάνω το ίδιο για το jail του apache;

Υπάρχει κάποιο caveat;  Υπάρχει επίσης τρόπος να εμποδίσω την εκτέλεση
προγραμμάτων των χρηστών, όπως κάνει το rbash, αλλά χωρίς να
απενεργοποιήσω το chmod και χωρίς να συνοδεύεται από τα υπόλοιπα
εκνευριστικά του rbash και χωρίς να κάνω mount noexec;




More information about the Linux-greek-users mailing list