Dec 16, 2011

File triggers στο Linux

Σήμερα βρέθηκα αντιμέτωπος με την εξής απαίτηση: αρχεία που γίνονται upload μέσω FTP service σε ένα NFS drive, απαγορεύεται να γίνουν delete ή overwrite. Ενώ μπορούμε να απαγορεύσουμε τη δυνατότητα διαγραφής από ένα FTP service, το ίδιο δεν ισχύει με την επανεγγραφή (overwrite) ενός αρχείου. Στην πραγματικότητα, στο Linux έχουμε διάφορες δυνατότητες για να περιορίσουμε την εγγραφή σε ένα αρχείο (πχ δικαιώματα, extended attributes με την εντολή chattr, κλπ) Το να αλλάξουμε αυτά τα δικαιώματα έπειτα από την προσθήκη του αρχείου σε έναν κατάλογο αποτελεί πρόκληση και θυμίζει τη συμπεριφορά ενός trigger. Για καλή μας τύχη, υπάρχει μια σειρά από εργαλεία, που ονομάζεται inotify-tools (https://github.com/rvoicilas/inotify-tools/wiki/), που μας επιτρέπουν να διαχειριστούμε προγραμματιστικά τα συμβάντα που συμβαίνουν σε έναν κατάλογο, όπως αυτό της προσθήκης, μετακίνησης ή διαγραφής αρχείων.

Μόλις εγκαταστήσουμε αυτά τα εργαλεία, μπορούμε να φτιάξουμε το δικό μας script που αλλάζει δικαιώματα σε ένα αρχείο, αμέσως μετά τη δημιουργία του. Θα χρησιμοποιήσουμε λοιπόν το πρόγραμμα inotifywait γι' αυτό το λόγο.

#!/bin/bash
STAGING_DIR=/staging
inotifywait -e create \
-mrq /binaries | while read line; do
chmod -R u-w $STAGING_DIR/`echo "$file" | cut -f3-`
done

Επιπλέον πληροφορίες στο http://www.server-world.info/en/note?os=CentOS_5&p=inotify

2 comments:

javapapo said...

 αντίστοιχα εργαλεία υπάρχουν και στο  Apache Camel...με ενδιαφέρουσες υλοποιήσεις!

http://camel.apache.org/file.html

Serafeim Karapatis said...

Πολύ χρήσιμη προσέγγιση (ιδίως για προγραμματισμό σε Java) και ανεξάρτητη λειτουργικού συστήματος.

Ευχαριστώ!