Apparmor (synonyms: selinux, crap)

Today’s fun was with apparmor. What was a simple MySQL statement to load a bunch of data from a file to a database:


mysql> LOAD DATA INFILE '/var/tmp/some_log_file'
-> INTO TABLE entries
-> FIELDS TERMINATED BY ',';
ERROR 29 (HY000): File '/var/tmp/cosmote.ro.osn1z0.web_access.log.0.4' not found (Errcode: 13)

… was constantly failing for no good reason. It took something like 30′ of pointless online searching until it hit me:


# tail -0f /var/log/syslog
Feb 8 19:11:44 hs21-a kernel: [15359.215686] type=1400 audit(1328721104.742:113): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/var/tmp/cosmote.ro.osn1z0.web_access.log.0.4" pid=15623 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=105 ouid=0

Well I guess it’s just like SELinux. There is a parallel universe out there where apparmor just works. Just not this one.

ARGH!

(Prev)

Advertisements

Tags: , ,

8 Responses to “Apparmor (synonyms: selinux, crap)”

  1. thanosk Says:

    Σωστά δεν σε αφήνει ρε φίλε. Το AppArmour και το SELinux αυτός είναι ο σκοπός τους. Να μην επιτρέπουν ενέργειες που δεν έχεις επιτρέψει ρητά.

    Δεν καταλαβαίνω που βρίσκεις το λάθος

  2. mperedim Says:

    Δεν καταλαβαίνω που βρίσκεις το λάθος

    Το user-perceived λάθος είναι πως όταν στήνω τη MySQL περιμένω να δουλεύει η MySQL. ΔΕΝ περιμένω να μισο-δουλεύει.

    Το πρώτο ουσιαστικό λάθος είναι πως η συγγραφή ενός selinux και κατά τα φαινόμενα και apparmor profile μάλλον πρόκειται για NP complete πρόβλημα. Όπως είπα και στο twitter, ακόμα και για τη Red Hat φαίνεται να είναι κάτι τόσο δύσκολο που λίγο πολύ λένε “δε βαριέσαι, δε θα το φτιάξουμε εξαρχής”.

    Το δεύτερο ουσιαστικό λάθος είναι πως όταν χτυπάς σε κάποιο apparmor ή selinux restriction απλά μένεις να κοιτάς σαν ηλίθιος την οθόνη προσπαθώντας να αποκρυπτογραφήσεις είτε ένα εντελώς ακατανόητο μήνυμα λάθους ή ένα μήνυμα που είσαι 100% σίγουρος ότι δεν έχει λόγο ύπαρξης. Αν στην τελική θεωρούν οι πάσης φύσεως διανομές τόσο βασικό feature το selinux/apparmor ας βρουν ένα γαμημένο τρόπο να παίρνει ο χρήστης ένα “selinux error”. Όχι ένα “file not found error”.

  3. thanosk Says:

    Συμφωνώ πως είναι user perceived το πρόβλημα.
    Και συμφωνώ πως τα μυνήματα λάθους είναι πολλές φορές τουλάχιστον παράξενα. (αν και σε graphical env σου εμφανίζει SΕ violation μύνημα στο Fedora τουλάχιστον).

    Από την άλλη τα έτοιμα profiles είναι στημένα για μια εντελώς απλή χρήση του συστήματος που δεν ξεφεύγει από τα συνηθισμένα. Αν θέλεις να κάνεις παραπάνω απλά τα αλλάζεις. Όπως αλλάζεις και permissions σε files/folders κοκ.

    Είπαμε security comes with a price που στην συγκεκριμένη περίπτωση είναι το convenience.

  4. adamo Says:

    @thanosk:
    Είναι λάθος. Σε ένα τέτοιο σύστημα υπάρχουν προεγκατεστημένες αποφάσεις για την συμπεριφορά του για τις οποίες ο διαχειριστής του δεν έχει αποφασίσει / θυμάται / κ.ο.κ. Είναι ένα ακόμα σημείο που πρέπει να σκέφτεσαι όταν το πρόγραμμα παρουσιάζει heisen-behavior.

    Είναι λάθος εφόσον σε κάποιον έμπειρο devop όπως ο mperedim χρειάζονται 30 λεπτά για να ψάξει εκεί που περιγράφεται το πρόβλημα.

    Είναι λάθος που είναι enabled by default, ενώ θα έπρεπε να έχει τη “συνηθισμένη” συμπεριφορά και με “flashing neon signs” να σε προτρέπει να αλλάξεις.

    Ναι έτσι θα μετακινηθείς πιο αργά προς το SELinux και το AppArmor, αλλά ομαλότητα και χρηστικότητα πάνω από όλα. Αλλιώς να το κλείσουμε το μηχάνημα να είμαστε ΟΚ και από ρεύμα:

    All the desired operations should be allowed, and all the undesired operations should be disallowed

  5. thanosk Says:

    @adamo Συμφωνώ πως είναι λάθος να είναι από default σε enforcing mode ειδικά όταν στήνεις ένα μηχάνημα.

    Η πολιτική είναι πως το βάζεις σε permissive mode, στήνεις το μηχάνημα, βλέπεις τι SELinux violations εμφανίζει. Επιτρέπεις αυτά που χρειάζονται για να λειτουργεί ο server σου και κλειδώνεις τα υπόλοιπα.

    Δεν διαφωνώ πως είναι ιδιαίτερα στριφνό σύστημα αλλά δεν είναι broken by default.

  6. mtrench Says:

    Σοβαρα; Το “permission denied” (errcode: 13) ειναι ακατανοητο μηνυμα λαθους;

    And if you thought whitelisting sucks, you shouldn’t use MAC.

    • mperedim Says:

      Όχι, το συγκεκριμένο ανήκει στην κατηγορία “μήνυμα που είσαι 100% σίγουρος ότι δεν έχει λόγο ύπαρξης” (file existed, permissions were OK).

  7. adamo Says:

    @mtrench: Παρακάτω το εξήγησε: “ας βρουν ένα γαμημένο τρόπο να παίρνει ο χρήστης ένα “selinux error”. Όχι ένα “file not found error”.

    Εάν το default έρχεται με MAC enabled, αυτό συνεχίζεται και στις αναβαθμίσεις και στο patch management να θεωρείται το default από μια πλειάδα maintainers που προϋποθέτουν πως ο τυχαίος χρήστης στον κόσμο δεν πολυβγαίνει έξω από αυτά τα default. Επομένως το να το αλλάξει “καρφωτά” στο να μην το έχει, ενώ είναι η default προϋπόθεση στη διανομή που έχει μπροστά του (και που μπορεί να μην είναι η επιλογή του) σημαίνει πως παίρνει το ρίσκο να μην ξέρει τι θα “σκάσει” σε ένα τυχαίο upgrade ή όταν σε κάποιο patch η διαδικασία θα λειτουργήσει ως: “Α! Το SELinux είναι απενεργοποιημένο! Αυτό είναι λάθος! Το ενεργοποιώ (σιωπηρά)”.

    Inter-dependencies break things in weird ways at the worst of times. Η επιλογή του MAC πρέπει να ανήκει στο διαχειριστή και να μην έρχεται by default. Και από ότι καταλαβαίνω αυτό έγινε στην περίπτωση του mperedim.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: