Σε αυτόν τον σχεδιασμό μπερδεύονται δύο διαφορετικά δικαιώματα: ποιος επιτρέπεται να χρησιμοποιεί έναν κατάλογο και ποιες διευθύνσεις επιτρέπεται να συνδέονται καθόλου. Το να γράψεις μια λίστα λογαριασμών δίπλα σε μια λίστα πηγών μοιάζει με ζευγάρωμα, όμως ο Samba αξιολογεί τις δύο λίστες ως ανεξάρτητα κατηγορήματα. Γίνεται δεκτός όποιος ικανοποιεί και τα δύο, που είναι ευρύτερος κανόνας από ό,τι σκοπεύουν οι περισσότεροι διαχειριστές. Η διόρθωση είναι είτε διαφορετική διάταξη κοινόχρηστου είτε ένα επίπεδο πολιτικής που μπορεί να εκφράσει το ζεύγος.

Ο μύθος: δύο λίστες κάνουν έναν κανόνα

Η αναφορά του smb.conf ορίζει τα valid users και hosts allow ως δύο άσχετες παραμέτρους, και η ρύθμιση και των δύο σε ένα κοινόχρηστο είναι εκεί όπου αρχίζει η σύγχυση. Ορίστε τα valid users = mira, tomas και hosts allow = 10.77.0.21, 10.77.0.22 και γίνονται δεκτοί τέσσερις συνδυασμοί: η Μίρα από οποιαδήποτε από τις δύο διευθύνσεις, ο Τόμας από οποιαδήποτε από τις δύο διευθύνσεις. Τίποτα στη διαμόρφωση δεν δένει το πρώτο όνομα με την πρώτη διεύθυνση, και η σειρά με την οποία εμφανίζονται τα ονόματα δεν έχει κανένα νόημα. Η αναδιάταξή τους, η προσθήκη μιας δεύτερης γραμμής hosts allow ή η τοποθέτηση ενός ονόματος ανά γραμμή δεν αλλάζει τίποτα. Το αποτέλεσμα είναι το γινόμενο δύο λιστών, όχι μια αντιστοίχιση μεταξύ τους.

Αυτό που θέλουν πραγματικά οι περισσότεροι είναι στενότερο: η Μίρα μόνο από μία διεύθυνση, ο Τόμας μόνο από άλλη. Ένας ορισμός κοινόχρηστου δεν έχει σύνταξη για αυτή τη δέσμευση, και καμία έξυπνη σειρά δεν τη δημιουργεί. Αυτό είναι ένα σχήμα πολιτικής που ο Samba δεν εκφράζει μέσα σε ένα κοινόχρηστο, και εκεί επιβιώνει ο μύθος.

Τι αξιολογεί ο Samba και με ποια σειρά

Τα στάδια εκτελούνται με σταθερή σειρά, και η λάθος σειρά δίνει λάθος διάγνωση. Ένας πελάτης ανοίγει μια σύνδεση· ένας καθολικός έλεγχος κόμβου εκτελείται αν έχει ρυθμιστεί· η ρύθμιση συνεδρίας επαληθεύει τον λογαριασμό· μετά ο πελάτης συνδέεται σε ένα κοινόχρηστο, όπου εφαρμόζονται η δική του λίστα κόμβων, τα valid users και η ρύθμιση μόνο για ανάγνωση· και μόνο όταν ανοίξει ένα αρχείο αποφασίζουν τα δικαιώματα του συστήματος αρχείων της επαληθευμένης ταυτότητας. Κάθε στάδιο μπορεί να απορρίψει το αίτημα μόνο του, και το πέρασμα από ένα δεν λέει τίποτα για το επόμενο. Η σημαντική συνέπεια είναι ότι ο λογαριασμός είναι γνωστός όταν αξιολογείται η λίστα κόμβων του κοινόχρηστου, και η λίστα κόμβων εξακολουθεί να μην έχει τρόπο να ονομάσει αυτόν τον λογαριασμό.

Γι' αυτό ένα κοινόχρηστο δεν μπορεί να δεσμεύσει έναν χρήστη σε μία διεύθυνση: τα hosts allow και valid users είναι χωριστά κατηγορήματα που εφαρμόζονται στο ίδιο στάδιο σύνδεσης δέντρου, και το καθένα απαντά στο δικό του ερώτημα. Το κατηγόρημα κόμβου δεν παίρνει ποτέ το όνομα λογαριασμού ως είσοδο, άρα δεν μπορεί να γραφτεί ανά χρήστη. Μόνο ένα δεύτερο κοινόχρηστο ή ένα επίπεδο πολιτικής έξω από τον Samba μπορεί να εκφράσει το ζεύγος.

Οι καθολικές τιμές έχουν σημασία λόγω του τρόπου κληρονομικότητας. Ένα κοινόχρηστο που παραλείπει τα hosts allow κληρονομεί την καθολική τιμή, και ένα κοινόχρηστο που ορίζει τη δική του χρησιμοποιεί αυτή την τιμή στη θέση της καθολικής, όχι επιπλέον αυτής. Έτσι μια ευρεία καθολική λίστα διευρύνει τα κοινόχρηστα που δεν ορίζουν ποτέ την παράμετρο και δεν κάνει τίποτα σε ένα κοινόχρηστο που ορίζει το δικό του. Εκτελέστε το testparm -s και διαβάστε τις τιμές ανά κοινόχρηστο που εκτυπώνει, γιατί αυτή η έξοδος είναι η πραγματική πολιτική και όχι το αρχείο στον δίσκο.

Ο περιορισμός ενός κοινόχρηστου επίσης δεν κάνει τίποτα για τον υπόλοιπο διακομιστή. Άλλα κοινόχρηστα, ουρές εκτυπωτών και η σύνδεση IPC κρατούν τους δικούς τους κανόνες, οπότε ένας σχεδιασμός που βασίζεται στη λίστα διευθύνσεων ενός κοινόχρηστου προστατεύει μία διαδρομή και όχι τον κόμβο.

Δύο ονόματα κοινόχρηστου πάνω σε έναν κατάλογο

Όταν ο ίδιος κατάλογος πρέπει να είναι προσβάσιμος από δύο ανθρώπους από δύο διευθύνσεις, εκθέστε τον δύο φορές με διαφορετικά ονόματα. Κάθε ενότητα φέρει έναν λογαριασμό και μία πηγή, που μετατρέπει το ζεύγος σε κάτι που η διαμόρφωση μπορεί να επιβάλει. Το κόστος είναι ότι κάθε άτομο χρησιμοποιεί διαφορετικό όνομα κοινόχρηστου για να φτάσει στα ίδια αρχεία, και αυτό πρέπει να είναι σκόπιμη αλλαγή στην πλευρά του πελάτη.

[shared-mira]
    path = /srv/shared
    guest ok = no
    read only = yes
    valid users = mira
    hosts allow = 10.77.0.21
    hosts deny = ALL

[shared-tomas]
    path = /srv/shared
    guest ok = no
    read only = yes
    valid users = tomas
    hosts allow = 10.77.0.22
    hosts deny = ALL

Μια πύλη κοινόχρηστου δεν είναι δικαίωμα συστήματος αρχείων. Και οι δύο ταυτότητες χρειάζονται ακόμη πρόσβαση στον κατάλογο μέσω του υποκείμενου ACL, και η ρύθμιση μόνο για ανάγνωση είναι δεύτερο επίπεδο και όχι το μοναδικό. Δώστε δικαίωμα εγγραφής μόνο αν το απαιτεί η ροή εργασίας, και μετά ελέγξτε ότι τα αρχεία που δημιουργεί η μία ταυτότητα παραμένουν χρησιμοποιήσιμα από την άλλη.

Και οι δύο ενότητες δείχνουν σε μία διαδρομή, άρα μια αλλαγή στον κατάλογο επηρεάζει και τα δύο κοινόχρηστα. Αυτό είναι συνήθως το νόημα, αλλά σημαίνει επίσης ότι ένα λάθος δικαιωμάτων είναι ορατό και στους δύο χρήστες ταυτόχρονα.

Τι μπορεί να αποδείξει η διεύθυνση πηγής

Η διεύθυνση που βλέπει ο Samba είναι η διεύθυνση που έφτασε στον διακομιστή, όχι αυτή που ο πελάτης νομίζει ότι έχει. Μια πύλη VPN που μετατρέπει κάθε πελάτη σε μία διεύθυνση πηγής καταργεί τη διάκριση: όλοι οι πελάτες φτάνουν ως ο ίδιος κόμβος και η λίστα πηγών δεν μπορεί πλέον να τους ξεχωρίσει. Η σταθερή κατανομή ανά πελάτη και μια πύλη που διατηρεί την πηγή είναι προϋποθέσεις για να χρησιμοποιούνται διευθύνσεις ως πολιτική καθόλου. Χωρίς και τα δύο, ο περιορισμός μετρά την πύλη και όχι τον χρήστη.

Ακόμη και τότε, μια διεύθυνση δεν είναι συσκευή. Δύο φορητοί υπολογιστές πίσω από μία διεύθυνση σήραγγας, μια εκ νέου εκχωρημένη μίσθωση και ένας κοινόχρηστος σταθμός εργασίας καταρρίπτουν όλα την υπόθεση ότι μια πηγή ταυτοποιεί ένα πρόσωπο. Αντιμετωπίστε τον περιορισμό ως εύρος δικτύου και κρατήστε τους επαληθευμένους λογαριασμούς SMB ως επίπεδο ταυτότητας, με διαπιστευτήριο συσκευής όπως ένα πιστοποιητικό αν χρειάζεστε εξουσιοδότηση συσκευής.

Γι' αυτό ο σχεδιασμός φράσσει κοινόχρηστα και όχι τον διακομιστή. Ένα ζεύγος που απορρίπτεται μπορεί ακόμη να ανοίξει συνεδρία, να φτάσει σε άλλο κοινόχρηστο ή να απαριθμήσει τον διακομιστή, που είναι διαφορετικό αποτέλεσμα από αποτυχία επαλήθευσης κατά τη σύνδεση. Αν η απαίτηση είναι απόρριψη πριν από την επαλήθευση, οι παράμετροι κοινόχρηστου του Samba είναι το λάθος εργαλείο.

Αποδείξτε το με διασταυρούμενα ζεύγη

Επικυρώστε τη διαμόρφωση και μετά δοκιμάστε τους τέσσερις συνδυασμούς με νέες συνδέσεις και όχι με επαναχρησιμοποιημένη συνεδρία. Το επιδιωκόμενο ζεύγος πρέπει να φτάσει στον κατάλογο και τα δύο διασταυρούμενα ζεύγη πρέπει να αποτύχουν. Μια συνεδρία από προσωρινή μνήμη παλαιότερης δοκιμής θα απαντήσει ευχαρίστως για τον λάθος συνδυασμό και θα κάνει έναν σπασμένο κανόνα να φαίνεται σωστός.

testparm -s
smbclient //fileserver/shared-mira -U mira -c 'ls'
smbclient //fileserver/shared-tomas -U tomas -c 'ls'
smbstatus --shares

Ένας έλεγχος σύνταξης αποδεικνύει μόνο ότι το αρχείο αναλύεται. Τα διαπιστευτήρια, τα ACL και η απόφαση κόμβου ασκούνται από πραγματική σύνδεση, οπότε εκτελέστε την εντολή του πελάτη από τη διεύθυνση που θέλετε να δοκιμάσετε και παρακολουθήστε ποιο στάδιο την απορρίπτει. Αν ένα διασταυρούμενο ζεύγος πετύχει, η πραγματική λίστα κόμβων είναι ευρύτερη από ό,τι υποδηλώνει η ενότητα, και το testparm -s είναι το πρώτο που πρέπει να διαβάσετε. Αν ένα διασταυρούμενο ζεύγος αποτύχει για λάθος λόγο, ο λογαριασμός ή το ACL είναι ο ύποπτος.

Η παρακολούθηση συνεδριών με το smbstatus και ο τερματισμός τους είναι ενέργεια απόκρισης μετά την έναρξη της πρόσβασης, όχι έλεγχος εισδοχής. Ο αποκλεισμός μιας ολόκληρης παρατηρούμενης διεύθυνσης μπορεί επίσης να αποσυνδέσει άσχετους χρήστες πίσω από το ίδιο NAT, γι' αυτό η απόφαση ανήκει στον ορισμό του κοινόχρηστου και η παρακολούθηση στη διαδικασία απόκρισης. Κρατήστε τα δύο χωριστά και ο σχεδιασμός παραμένει ειλικρινής για το τι επιβάλλει.

Σχετικά άρθρα