Υπερ-αναλυτικός οδηγός δημιουργίας Home/Small Business File Server με Ubuntu Server 16.
#21
Kim, post: 24690, member: 1778 είπε κι ελάλησε:Έκανες όντως μία παρουσίαση εξαιρετική. Περιμένω με ανυπομονοσία και το υπόλοιπο. Μήπως μπορείς να κάνεις έναν παρόμοιο οδηγό με lamp, thin clients κλπ; Θα είσαι ο μόνος που θα έχεις κάνει τόσο αναλυτική παρουσίαση σε κάτι που είναι εξαιρετικά χρήσιμο, όχι μόνο σε σχολεία αλλά και σε βιβλιοθήκες κλπ

Σε ευχαριστώ για τα καλά σου λόγια!

Lamp server είχα φτιάξει πολύ παλιότερα, και μάλιστα σε OpenSuse, αλλά τώρα και για το άμεσο μέλλον δεν προβλέπεται να ξαναχρειαστεί, οπότε ...
Linux Mint KDE laptop, Linux Mint Mate netbook, Lubuntu old desktop, Windows 7 main desktop, Ubuntu File Server
  Απάντηση
#22
6 Κεφάλαιο Ε – Χορεύοντας με ρυθμούς Samba!

Όλα όσα προηγήθηκαν, αποτελούσαν στην ουσία το πρόγευμα αυτού που θέλουμε να φτιάξουμε, που δεν είναι άλλο από έναν κοινόχρηστο File Server. Ήλθε η ώρα λοιπόν να περάσουμε στο κυρίως γεύμα!

6.1 Δικαιώματα χρηστών στο Linux
Πριν όμως προχωρήσουμε στις ρυθμίσεις του Samba Server, πρέπει να κολυμπήσουμε στα άδυτα των δικαιωμάτων πρόσβασης στα αρχεία του Linux.
Αυτό διότι για να έχει ένας χρήστης πρόσβαση στα αρχεία του server μας μέσω του πρωτοκόλλου Samba, πρέπει να έχει πρώτα πρόσβαση σε αυτά ως χρήστης του server μας, πρέπει δηλαδή να έχει και δικαιώματα Unix, όπως λέγεται.
Τα δικαιώματα χρήστη, επί φακέλων ή αρχείων, χωρίζονται σε τρεις κατηγορίες:
1. Δικαιώματα ιδιοκτήτη (owner)
2. Δικαιώματα ομάδας ιδιοκτήτη (group)
3. Δικαιώματα κάθε άλλου τρίτου (others)

Κάθε ένα από τα παραπάνω δικαιώματα χωρίζεται επίσης σε τρία μέρη:
1. Δικαίωμα ανάγνωσης (read)
2. Δικαίωμα εγγραφής (write)
3. Δικαίωμα εκτέλεσης (execute)

Τα παραπάνω δικαιώματα αναπαρίστανται με 3 τριάδες συμβόλων, η πρώτη για τον ιδιοκτήτη, η δεύτερη για την ομάδα και η τρίτη για τους τρίτους, ως εξής:
owner (u) - group (g) - others (o)
r w x - r w x - r w x
Το r σημαίνει readable
To w σημαίνει writable
Το x σημαίνει executable

Όπου το δικαίωμα δεν υπάρχει, αναπαρίσταται με απλή παύλα: -
To δικαίωμα executable στα αρχεία σημαίνει ότι μπορεί ο χρήστης να το εκτελέσει (απλό, έτσι; ), στους φακέλους όμως σημαίνει ότι μπορεί ο χρήστης να τους ανοίξει (πρόσβαση). Συνεπώς για να μπορεί κάποιος να διαβάσει το περιεχόμενο ενός φακέλου, θα πρέπει να έχει δικαιώματα read και execute.

Τα δικαιώματα αυτά μπορούμε να τα δούμε σε τερματικό με την εντολή
Κώδικας:
ls –l
[Εικόνα: UbuntuServer_120.png]

όπου στο παραπάνω παράδειγμα βλέπουμε το home directory μας, και για παράδειγμα ο φάκελος Documents έχει τα εξής δικαιώματα:
Κώδικας:
drwxr-xr-x adminuser adminuser

Το παραπάνω σημαίνει ότι ο owner [adminuser] έχει πλήρη δικαιώματα ανάγνωσης και εγγραφής στο φάκελο, το group owner [adminuser] έχει δικαιώματα μόνο πρόσβασης και ανάγνωσης, ενώ και οι τρίτοι έχουν επίσης δικαιώματα πρόσβασης και ανάγνωσης. Το πρώτο γράμμα [d] σημαίνει directory και το συναντάμε μόνο όταν εξετάζουμε δικαιώματα σε φακέλους.

Τώρα, τα δικαιώματα αυτά μπορούν να αναπαρασταθούν και με αριθμητικό σύστημα, το οκταδικό. Με το σύστημα αυτό τα δικαιώματα αναπαρίστανται ως εξής:
4 = Read
2 = Write
1 = Execute

με το σύνολο να κυμαίνεται από το μηδέν (0) μέχρι το (7). Αν κάνετε τις μαθηματικές πράξεις, θα δείτε ότι κάθε αριθμός από το 0 έως το 7 δίνει μοναδικό συνδυασμό πρόσθεσης των ανωτέρω τριών ( 1 - 2 - 4 ), συνεπώς μόνο από το άθροισμα καταλαβαίνουμε τα δικαιώματα.

Για παράδειγμα:
3 σημαίνει write & execute
6 σημαίνει read & write
7 σημαίνει read, write & execute
0 σημαίνει κανένα δικαίωμα.

Για την τριάδα μας λοιπόν δικαιωμάτων owner, group και others, μας αρκεί ένας μόνο τριψήφιος αριθμός, με ψηφία από το 0 έως το 7, ένα ψηφίο για κάθε μία κατηγορία χρήστη. Για παράδειγμα ο αριθμός
Κώδικας:
640
σημαίνει ότι ο owner έχει δικαιώματα ανάγνωσης και εγγραφής (το 6), το group owner έχει δικαιώματα μόνο ανάγνωσης (το 4), ενώ οι others (κάθε άλλος τρίτος) (το 0), δεν έχει καθόλου δικαιώματα πρόσβασης.

Να τονίσουμε εδώ ότι κανονικά τα ψηφία αριθμητικής αναπαράστασης δικαιωμάτων είναι τέσσερα, με το πρώτο από τα τέσσερα να αναπαριστά ειδικά δικαιώματα, τα οποία προς το παρόν δεν θα αναλυθούν εδώ. Αρκεί να γνωρίζουμε ότι όταν λείπει το πρώτο ψηφίο, όταν δηλαδή βλέπουμε ή δίνουμε σε εντολή τρία ψηφία, το πρώτο αυτό ψηφίο λογίζεται (θεωρείται) ως 0, δηλαδή κανένα ειδικό δικαίωμα.

Τα καταφέραμε μέχρι εδώ; Έχει και άλλα! ;)

Τα δικαιώματα χρήσης σε αρχεία που δημιουργούνται, δηλαδή σε νέα αρχεία, καθορίζονται από την ρύθμιση umask, που είναι ενιαία για όλο το λειτουργικό. Ποια ρύθμιση έχει στο δικό μας λειτουργικό, μπορούμε να την δούμε, πληκτρολογώντας απλά στο τερματικό:
Κώδικας:
umask
[Εικόνα: UbuntuServer_121.png]

Όπου βλέπουμε ότι το umask στον server μας είναι 0002. Θυμάστε τι είπαμε μόλις παραπάνω για τα τέσσερα ψηφία; Το πρώτο μηδενικό λοιπόν δεν το υπολογίζουμε προς το παρόν, και αντιλαμβανόμαστε ότι η umask μας είναι 002. Τι σημαίνει αυτό;

Σημαίνει ότι σε κάθε νέο αρχείο ή φάκελο που δημιουργείται, το λειτουργικό θα αφαιρεί από το σύνολο δικαιωμάτων των τρίτων χρηστών (others), δηλαδή από το 7, το 2. Με απλά ελληνικά, σημαίνει ότι σε κάθε νέο αρχείο ή φάκελο που δημιουργείται, θα αφαιρείται από το λειτουργικό αυτόματα το δικαίωμα εγγραφής για τους τρίτους (others).
Κάθε ψηφίο λοιπόν από τα τρία της umask, χρησιμοποιείται σαν κάλυπτρο (μάσκα), για να καλύψει (αφαιρέσει) από το σύνολο δικαιωμάτων της αντίστοιχης κατηγορίας (owner, group & others), που είναι το 7, τον αντίστοιχο αριθμό, εδώ το 2. Προσοχή, το umask δεν αφαιρεί από το ήδη υφιστάμενο δικαίωμα που εμείς ενδεχομένως με κάποια εντολή δίνουμε, αλλά από το σύνολο, από το 7. Η λειτουργία της μοιάζει πολύ με τις μάσκες που χρησιμοποιούμε στα layers σε προγράμματα επεξεργασίας φωτογραφίας, για όσους γνωρίζουν. Καλύπτουν, δεν αφαιρούν.

Τώρα, νομίζετε ότι πράγματι στο παραπάνω παράδειγμά μας, το umask είναι 002; Όχι!! Την πραγματική ρύθμιση της umask την βλέπουμε στο αρχείο
Κώδικας:
/etc/login.defs
[Εικόνα: UbuntuServer_122.png]

[Εικόνα: UbuntuServer_123.png]

όπου βλέπουμε μεγαλοπρεπώς η ρύθμιση να είναι 022!
Με αυτή τη ρύθμιση το group owner χάνει το δικαίωμα εγγραφής σε όλα τα νέα αρχεία και φακέλους που δημιουργούνται, γεγονός σημαντικότατο όταν στον samba server μας θέλουμε να έχουμε κοινόχρηστους φακέλους όπου ένα group θα έχει δικαιώματα και εγγραφής!

Τότε γιατί η εντολή umask που τρέξαμε παραπάνω μας έδειξε 002;
Γιατί στο παραπάνω αρχείο login.defs εξηγεί ότι:
Κώδικας:
If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
for private user groups, i. e. the uid is the same as gid, and username is
the same as the primary group name: for these, the user permissions will be
used as group permissions, e. g. 022 will become 002.
Δηλαδή, αν η ρύθμιση USERGROUPS_ENAB στο ίδιο αρχείο είναι σε “yes”, τότε οι χρήστες, των οποίων το username είναι το ίδιο με το primary groupname (όπως εδώ στο παράδειγμά μας είναι adminuser adminuser), θα έχουν άλλη umask, και αυτή θα εξισώνει τα δικαιώματα του owner με τα δικαιώματα του group owner, και σε default ρύθμιση η umask από 022 θα γίνει 002!

Και φυσικά, στο ίδιο αρχείο πιο κάτω η ρύθμιση USERGROUPS_ENAB είναι πράγματι “yes”!
[Εικόνα: UbuntuServer_124.png]

Θυμάστε τώρα τι λέγαμε όταν εξηγούσαμε γιατί χρησιμοποιήσαμε την εντολή adduser, αντί της εντολής useradd; Αυτός ήταν ο κύριος λόγος!

Γιατί τώρα αναφέραμε όλα τα παραπάνω, θα αναρωτιέστε σίγουρα. Μα γιατί η Samba, ό,τι ρύθμιση και να της περάσεις, δεν ξεπερνά με τίποτα την umask του λειτουργικού, κατά την απομακρυσμένη δημιουργία νέων αρχείων ή φακέλων από το χρήστη στον Server!

Η συνέχεια στο επόμενο επεισόδιο…
Linux Mint KDE laptop, Linux Mint Mate netbook, Lubuntu old desktop, Windows 7 main desktop, Ubuntu File Server
  Απάντηση
#23
6.2 Προσθήκη Χρηστών Samba

Είπαμε και νωρίτερα, κατά την προσθήκη χρηστών στον server μας (Κεφάλαιο Δ), ότι ένας χρήστης του πρωτοκόλλου Samba θα πρέπει πρωτίστως να έχει τοπικό λογαριασμό στον server μας, ώστε στη συνέχεια να μπορεί να έχει πρόσβαση σε αυτόν μέσω Samba. Αφού λοιπόν δημιουργήσαμε όπως παραπάνω είπαμε, τους χρήστες μας στον server, τώρα θα πρέπει να τους προσθέσουμε και ως χρήστες samba, ως χρήστες δηλαδή που θα έχουν δικαίωμα απομακρυσμένης πρόσβασης στον server μέσω samba.
Η προσθήκη αυτή γίνεται φυσικά από το τερματικό, με την εντολή
Κώδικας:
sudo smbpasswd -a username

Επισημαίνονται τα εξής:
1) Ο χρήστης μας θα πρέπει να έχει το ίδιο username τόσο στην samba, όσο και στον απομακρυσμένο υπολογιστή από τον οποίο θα έχει πρόσβαση, π.χ. από υπολογιστή Windows.
2) Υπάρχουν όπως καταλάβατε, τρεις (3) λογαριασμοί για κάθε χρήστη, τους οποίους θα πρέπει να έχουμε υπόψη μας: Ο λογαριασμός Unix στον server, ο λογαριασμός Samba στον server και ο λογαριασμός στον απομακρυσμένο υπολογιστή Windows. Για αποφυγή οποιασδήποτε απροσδόκητης δυσκολίας, το username πρέπει να είναι το ίδιο και στους τρεις λογαριασμούς. Ο κωδικός Unix δεν είναι απαραίτητο να είναι ίδιος με τους άλλους δύο, ωστόσο ο γράφων προτείνει να είναι ο ίδιος, προς αποφυγή δυσκολιών στο μέλλον.
3) Ενώ οι λογαριασμοί Unix είναι case sensitive, δηλαδή τα κεφαλαία γράμματα λογίζονται ως διαφορετικά από τα μικρά και επιτρέπονται μόνο μικρά, δεν συμβαίνει το ίδιο κατά την αντιστοίχιση λογαριασμού samba με λογαριασμού Windows. Επειδή στα Windows οι λογαριασμοί είναι case insensitive, η samba ακολουθεί το ίδιο μοτίβο και επομένως δεν έχει σημασία αν ο λογαριασμός χρήστη στα Windows έχει και κεφαλαία γράμματα, ενώ ο λογαριασμός samba δεν έχει.

Με την παραπάνω εντολή λοιπόν και για τις ανάγκες του οδηγού, προσθέσαμε τους χρήστες μας user1, user2 και user3 στην samba:
[Εικόνα: UbuntuServer_130.png]

Για να ελέγξουμε ποιους χρήστες έχουμε προσθέσει, χρησιμοποιούμε την εξής εντολή:
Κώδικας:
sudo pdbedit -L

ενώ αν προσθέσουμε και τον διακόπτη -v (verbose) μας δίνει πολύ περισσότερες πληροφορίες:
Κώδικας:
sudo pdbedit -Lv
[Εικόνα: UbuntuServer_131.png]

Τέλος, για να διαγράψουμε κάποιο χρήστη από την samba, χρησιμοποιούμε την εντολή
Κώδικας:
sudo smbpasswd -x username

Σημείωση: Φυσικά, αν θέλουμε και ο διαχειριστής να έχει πρόσβαση σε shares, πρέπει να προστεθεί και αυτός ως χρήστης samba, με την εντολή:
Κώδικας:
sudo smbpasswd -a adminuser


6.3 Προσθήκη Samba Shares

6.3.1 Προετοιμασία
Και φθάνουμε επιτέλους και ουσιαστικά στην καρδιά αυτού του οδηγού, αφού τα samba shares (διαμοιραζόμενοι φάκελοι) ήταν ο πρωταρχικός σκοπός μας εξ αρχής, όταν αποφασίσαμε να φτιάξουμε έναν File Server!

Όλες οι ρυθμίσεις για τα Samba Shares βρίσκονται σε ένα και μόνο αρχείο, το smb.conf το οποίο βρίσκεται στη διαδρομή /etc/samba/smb.conf:
[Εικόνα: UbuntuServer_132.png]

Εάν ανοίξουμε αυτό το αρχείο, θα δούμε ότι είναι γεμάτο με σχόλια, έρχεται δηλαδή εξ αρχής έτσι, με την εγκατάσταση του λειτουργικού. Τα σχόλια αυτά έχουν σκοπό να βοηθήσουν τον χρήστη στη ρύθμισή του:
[Εικόνα: UbuntuServer_133.png]

Επειδή όμως εμείς θα έχουμε μελετήσει τον παρόντα οδηγό :) , τα σχόλια αυτά περισσότερο περιπλέκουν τα πράγματα, παρά βοηθούν, αφού μας εμποδίζουν να έχουμε μια καθαρή εικόνα για τις ρυθμίσεις μας. Έτσι, είναι προτιμότερο αφενός μεν να πάρουμε ένα backup του αρχείου smb.conf, αφετέρου δε να έχουμε ένα καθαρό αρχείο, χωρίς σχόλια.
Τα παραπάνω θα τα πετύχουμε εκτελώντας διαδοχικά τις εξής εντολές:
Κώδικας:
sudo -i
cd /etc/samba
mv smb.conf smb.conf.master
touch smb.conf
testparm -s smb.conf.master > smb.conf

Με τις παραπάνω εντολές μεταβήκαμε στο φάκελο samba, μετονομάσαμε το αρχείο smb.conf σε smb.conf.master και στη συνέχεια φτιάξαμε ένα νέο αρχείο smb.conf χωρίς σχόλια:
[Εικόνα: UbuntuServer_134.png]

Πολύ καλύτερα, δεν νομίζετε;

Tip: η παραπάνω εντολή testparm -s ενδεχομένως να μην δουλεύει με το πρόθεμα sudo μπροστά. Γι’ αυτό αναχθήκαμε εξ ολοκλήρου σε χρήστη root, με την εντολή sudo -i.

6.3.2 Η δομή του αρχείου smb.conf

Πριν προσθέσουμε τα πρώτα shares μας, θα πρέπει να πούμε δυο λόγια για τη δομή του αρχείου smb.conf:
1) Το αρχείο χωρίζεται σε sections (τομείς), οι οποίοι διακρίνονται με την ένταξή τους σε αγκύλες [ ], όπως μπορείτε να δείτε στο παραπάνω screenshot. Το πρώτο section, με όνομα [global], περιέχει γενικές ρυθμίσεις, οι οποίες αφενός μεν περιέχουν γενικές ρυθμίσεις για τον samba server, αφετέρου εφαρμόζονται σε όλα τα shares.
2) Κάθε share έχει το δικό του section. Το όνομα μέσα στις αγκύλες [ ], είναι και αυτό που θα βλέπουμε ως όνομα share από τον απομακρυσμένο υπολογιστή, από τον οποίο θα έχουμε πρόσβαση στον server.
3) Οι ρυθμίσεις δίνονται πάντα με την μορφή «Ρύθμιση = προτίμηση», δηλαδή μετά το όνομα της ρύθμισης ακολουθεί κενό, το σύμβολο =, μετά κενό και μετά η προτίμησή μας. Προσοχή διότι αν δεν τεθεί ακριβώς αυτή η μορφή, η ρύθμιση δεν θα ληφθεί υπόψιν.
4) Για διευκόλυνσή μας, πριν από κάθε ρύθμιση πατάμε το tab, ώστε οι ρυθμίσεις να είναι ευθυγραμμισμένες και να ξεχωρίζουν εύκολα τα share sections.
5) Το ελάχιστο προαπαιτούμενο για κάθε share είναι το όνομά του και η διαδρομή του συστήματος αρχείων στην οποία θα βρίσκεται (δηλαδή θα αντιστοιχεί). Σε όλες σχεδόν τις ρυθμίσεις υπάρχουν defaults επιλογές, οι οποίες χρησιμοποιούνται από τον samba server, αν εμείς δεν τις διευκρινίσουμε. Καλό είναι όμως κάποιες βασικές να τις περιλαμβάνουμε, όπως θα δούμε παρακάτω.
6) Τα ονόματα των groups τα οποία θέλουμε να περιλάβουμε σε κάποια ρύθμιση, τίθενται με το σύμβολο @ μπροστά, δηλαδή @groupname.

6.3.3 Βασικές και χρήσιμες επιλογές (ρυθμίσεις) στο αρχείο smb.conf

[Το σύμβολο | σημαίνει διάζευξη, δηλαδή μόνο μία ρύθμιση τίθεται πάντοτε]

6.3.3.1 GLOBAL SECTION
workgroup = WORKGPOUPNAME
Καθορίζει το Workgroup στο οποίο θα ανήκει ο samba server. Διευκολύνει φυσικά να είναι το ίδιο με όλους τους υπολογιστές Windows.

security = user | share
Καθορίζει τον τρόπο που ο samba server θα ενεργεί την πιστοποίηση των απομακρυσμένων χρηστών. Για τις ανάγκες του server μας, η σωστή ρύθμιση είναι η user.

usershare allow guests = yes | no
Καθορίζει αν χρήστες στους οποίους θα έχουμε επιτρέψει να δημιουργούν shares, θα μπορούν να επιτρέπουν σε αυτά τα shares, πρόσβαση από τρίτους που δεν έχουν λογαριασμό samba user.

6.3.3.2 SHARES SECTION
comment = (όποιο σχόλιο θέλουμε)
Εμφανίζει μια περιγραφή του share όταν ο απομακρυσμένος χρήστης φέρνει το ποντίκι (hover) πάνω από το share.

path = /some/directory
Η διαδρομή στο file system του server όπου βρίσκεται το share.

browsable = yes | no
Καθορίζει αν το share θα φαίνεται στον απομακρυσμένο υπολογιστή, ανεξαρτήτως αν ο απομακρυσμένος χρήστης έχει ή όχι δικαίωμα πρόσβασης στο share. Default: browsable = yes.

read only = yes | no
Καθορίζει αν το share θα είναι μόνο για ανάγνωση ή θα επιτρέπεται και η εγγραφή. Η ίδια ακριβώς ρύθμιση επιτυγχάνεται και με την επόμενη, αλλά από την αντίθετη σκοπιά. Default: read only = yes.

writable = yes | no
Καθορίζει αν το share θα είναι εγγράψιμο ή μόνο για ανάγνωση. Το ίδιο με την αμέσως παραπάνω ρύθμιση, αλλά από την αντίθετη σκοπιά. Default: writeable = no.

guest ok = yes | no
Καθορίζει αν τρίτοι, χωρίς να έχουν λογαριασμό samba user, θα έχουν πρόσβαση στο share. Default: guest ok = no.

valid users = username, @groupname
Καθορίζει ποιοι χρήστες ή ομάδες χρηστών (groups) και μόνο, θα έχουν πρόσβαση στο share.

invalid users = username, @groupname
Καθορίζει σε ποιους χρήστες ή groups ονομαστικά, θα απαγορεύεται η πρόσβαση.

read list = username, @groupname
Καθορίζει χρήστες ή groups ονομαστικά, οι οποίοι θα έχουν μόνο δικαίωμα ανάγνωσης, ακόμα και αν το share είναι εγγράψιμο (writable).

write list = username, @groupname
Καθορίζει χρήστες ή groups ονομαστικά, οι οποίοι θα έχουν δικαίωμα εγγραφής, ακόμα και αν το share είναι μόνο για ανάγνωση (read only).

create mask = 664
Καθορίζει τα δικαιώματα με τα οποία θα δημιουργείται ένα νέο αρχείο από τον απομακρυσμένο χρήστη. Ανατρέξτε στο κεφάλαιο 6.1 του παρόντος οδηγού για περισσότερες πληροφορίες. Default: create mask = 0744.
Προσοχή: Η ρύθμιση που θα θέσουμε εδώ, δεν υπερκεράζει (ξεπερνά) την ρύθμιση unix που έχει ο server μας στον φάκελο του συγκεκριμένου share. Δηλαδή αν από την unix πλευρά τα δικαιώματα είναι πιο περιορισμένα από την ρύθμιση που θέτουμε ή και την default, θα ισχύσουν τα περιορισμένα unix δικαιώματα.

directory mask = 775
Καθορίζει τα δικαιώματα με τα οποία θα δημιουργείται ένας νέος φάκελος (directory) από τον απομακρυσμένο χρήστη. Ανατρέξτε στο κεφάλαιο 6.1 του παρόντος οδηγού για περισσότερες πληροφορίες. Default: directory mask = 0755.
Προσοχή: Η ρύθμιση που θα θέσουμε εδώ, δεν υπερκεράζει (ξεπερνά) την ρύθμιση unix που έχει ο server μας στον φάκελο του συγκεκριμένου share. Δηλαδή αν από την unix πλευρά τα δικαιώματα είναι πιο περιορισμένα από την ρύθμιση που θέτουμε ή και την default, θα ισχύσουν τα περιορισμένα unix δικαιώματα.

force user = username
Ορίζει ότι οποιοσδήποτε χρήστης και αν συνδέεται στο share, θα θεωρείται ότι συνδέεται σε αυτό ο χρήστης που τίθεται στη ρύθμιση. Έτσι όλοι όσοι συνδέονται στο share, θα έχουν τα δικαιώματα πρόσβασης του χρήστη που τίθεται στη ρύθμιση.

force group = groupname
Ορίζει ότι σε οποιοδήποτε πρωταρχικό (primary) group και αν ανήκει ο χρήστης που συνδέεται στο share, θα θεωρείται ότι ανήκει στο primary group που τίθεται στη ρύθμιση. Έτσι όλοι όσοι συνδέονται στο share, θα έχουν τα δικαιώματα πρόσβασης του primary group που τίθεται στη ρύθμιση. Πολύ χρήσιμη ρύθμιση σε περιπτώσεις ομαδικών shares. Εννοείται ότι ο χρήστης θα πρέπει πράγματι να ανήκει και στο συγκεκριμένο group, από την πλευρά των unix groups.

Για περισσότερες πληροφορίες σχετικά με τις ατελείωτες πραγματικά ρυθμίσεις του smb.conf, μπορείτε να ανατρέξετε στην επίσημη τεκμηρίωση. Το ίδιο αρχείο υπάρχει και στο λειτουργικό μας, στο οποίο έχουμε πρόσβαση με την εντολή
Κώδικας:
man smb.conf

6.3.4 Δημιουργία shares

Ας δημιουργήσουμε λοιπόν μερικά shares στον server μας!

Πρώτα αποφασίζουμε σε ποιο φάκελο θα βρίσκεται το share μας. Δημιουργούμε στον φάκελο disk1data του server μας (βλέπετε κεφάλαιο 5.2 του οδηγού) ένα νέο φάκελο με την ονομασία Share1Docs:
[Εικόνα: UbuntuServer_135.png]

Παρατηρούμε ότι τα δικαιώματα του φακέλου είναι rwxrwxr-x, δηλαδή οι τρίτοι πλην του owner του φακέλου (αφού και το primary group είναι το ίδιο με του owner), δεν θα έχουν δικαίωμα εγγραφής στο φάκελο, όπως ακριβώς θα έπρεπε να είναι, με βάση την ρύθμιση umask που εξετάσαμε παραπάνω (κεφάλαιο 6.1):
[Εικόνα: UbuntuServer_136.png]

Προς το παρόν όμως θέλουμε, στο share που θα δημιουργήσουμε, να έχουμε πρόσβαση μόνο εμείς. Έτσι δεν αλλάζουμε κάτι, αλλά προχωρούμε στη δημιουργία του share.
Ανοίγουμε το αρχείο smb.conf με δικαιώματα root με την εντολή:
Κώδικας:
gksudo leafpad /etc/samba/smb.conf
[Εικόνα: UbuntuServer_137.png]

Προσθέτουμε στις global ρυθμίσεις
Κώδικας:
workgroup = WORKGPOUP
security = user

Δημιουργούμε ένα share με τις εξής ρυθμίσεις
Κώδικας:
[Documents Admin]
    comment = Admin’s Documents
    path = /disks/disk1data/Share1Docs
    browsable = yes
    read only = no
    guest ok = no
    valid users = adminuser
[Εικόνα: UbuntuServer_138.png]

Αφού αποθηκεύσουμε και κλείσουμε το αρχείο, ελέγχουμε με την εντολή testparm αν υπάρχει σφάλμα:
Κώδικας:
cd /etc/samba
testparm
[Εικόνα: UbuntuServer_139.png]

Αν μας πει ότι “Loaded services file OK”, τότε όλα είναι εντάξει με τις ρυθμίσεις μας, τουλάχιστον από τυπικής πλευράς.
Επανεκκινούμε την υπηρεσία samba με την παρακάτω εντολή, ώστε να σιγουρευτούμε ότι ενσωματώθηκαν οι ρυθμίσεις που θέσαμε προηγουμένως:
Κώδικας:
sudo systemctl restart smbd.service nmbd.service

Και στη συνέχεια βλέπουμε ότι υπάρχει ελεύθερη πλέον η πρόσβαση από τον χρήστη adminuser, από υπολογιστή Windows. Ο χρήστης AdminUser έχει δημιουργήσει το αρχείο Test.txt:
[Εικόνα: UbuntuServer_142.png]

Το οποίο όπως βλέπουμε, έχει δημιουργηθεί με δικαιώματα 744, όπως θα έπρεπε, ακολουθώντας την default ρύθμιση της samba για την create mask που εξετάσαμε παραπάνω:
[Εικόνα: UbuntuServer_140.png]

Υπενθυμίζουμε για άλλη μια φορά ότι πιο πριν, έχουμε προσθέσει και τον adminuser στους samba users.

6.3.5 Το Homes Share

Με παρόμοιο τρόπο με τον παραπάνω μπορούμε να δημιουργήσουμε και άλλα shares. Όμως στον samba server υπάρχει και το ειδικό share [homes], το οποίο αν το θέσουμε σε λειτουργία, δημιουργεί αυτόματα ένα share για κάθε χρήστη, το οποίο είναι ο home folder του στον server. Με αυτό τον απλό τρόπο και με μια απλή ρύθμιση, κάθε χρήστης τον οποίο έχουμε προσθέσει όπως παραπάνω, αποκτά το δικό του share και έτσι δεν χρειάζεται να φτιάχνουμε ατομικά shares, εφόσον ο home folder στον server μας έχει επαρκή χωρητικότητα για τους χρήστες μας και τη χρήση που προβλέπουμε ότι θα γίνει.

Το ειδικό αυτό share ενεργοποιείται θέτοντας στο smb.conf τις εξής ρυθμίσεις:
Κώδικας:
[homes]
    comment = Home of %S
    valid users = %S
    read only = no
    browsable = no
[Εικόνα: UbuntuServer_141.png]

Η παράμετρος %S παίρνει το όνομα του εκάστοτε χρήστη που ζητεί πρόσβαση στον server, και έτσι με την επιλογή valid users ο κάθε χρήστης έχει πρόσβαση μόνο στο δικό του home share. Επίσης θέτουμε no στην browsable, ώστε ο κάθε χρήστης να βλέπει μόνο το δικό του share.
Έτσι βλέπουμε ότι ο AdminUser αμέσως απέκτησε και το δικό του home share:
[Εικόνα: UbuntuServer_143.png]

Στο επόμενο επεισόδιο, θα δούμε με ποιο τρόπο δημιουργούμε κοινόχρηστα shares μεταξύ χρηστών, οπότε και πιθανότατα θα ολοκληρωθεί ο οδηγός αυτός…
Linux Mint KDE laptop, Linux Mint Mate netbook, Lubuntu old desktop, Windows 7 main desktop, Ubuntu File Server
  Απάντηση
#24
6.3.6 Κοινόχρηστα Shares

Όπως ήδη θα καταλάβατε, είναι πολύ εύκολο να δημιουργήσουμε κοινόχρηστα shares, όπου περισσότεροι του ενός χρήστες θα έχουν πρόσβαση σε αυτό και δικαιώματα ανάγνωσης. Για την ακρίβεια, η default ρύθμιση της samba είναι να φτιάχνει shares με δικαιώματα ανάγνωσης για όλους τους samba users.
Έτσι, αν στο share που περιγράψαμε παραπάνω, με τις εξής ρυθμίσεις:
Κώδικας:
[Documents Admin]
    comment = Admin’s Documents
    path = /disks/disk1data/Share1Docs
    browsable = yes
    read only = no
    guest ok = no
    valid users = adminuser

αφαιρέσουμε τη ρύθμιση valid users, στο share θα έχουν πρόσβαση ανάγνωσης όλοι οι χρήστες τους οποίους έχουμε προσθέσει ως samba users (βλέπετε κεφάλαιο 6.2).
Το να δημιουργήσουμε όμως share στο οποίο θα έχουν δικαίωμα εγγραφής και τροποποίησης περισσότεροι χρήστες, δηλαδή share συνεργασίας όπου κάθε χρήστης θα μπορεί να τροποποιεί το περιεχόμενο του share, δεν είναι το ίδιο εύκολο. Αυτό διότι όπως αναφέραμε σε προηγούμενο σημείο, η samba δεν μπορεί να ξεπεράσει τις ρυθμίσεις και απαγορεύσεις των unix δικαιωμάτων, όποια ρύθμιση και να βάλουμε σε αυτή (βλέπετε κεφάλαιο 6.1).
Ακόμα δηλαδή και αν βάλουμε στο share τις εξής ρυθμίσεις:
Κώδικας:
create mask = 666
directory mask = 777
δηλώνοντας ότι επιθυμούμε όλοι ανεξαιρέτως οι χρήστες να έχουν δικαιώματα ανάγνωσης και εγγραφής, αυτό επηρεάζει μόνο τις απαγορεύσεις και περιορισμούς που θέτει ή δεν θέτει η samba, και όχι τις ρυθμίσεις των Unix δικαιωμάτων του λειτουργικού. Αυτές καθορίζονται όπως προαναφέραμε από την Umask, η οποία στην default ρύθμισή της, στο Ubuntu, είναι 022, και στην συνηθισμένη εξαίρεσή της που στην πράξη γίνεται κανόνας, 002 (βλέπετε κεφάλαιο 6.1). Οπότε στο εν λόγω share μας, τα αρχεία θα δημιουργούνται με δικαιώματα 664 και οι φάκελοι με δικαιώματα 775. Αυτό σημαίνει ότι όταν ένας χρήστης δημιουργεί ένα αρχείο ή φάκελο, ένας άλλος χρήστης που οι ρυθμίσεις samba θα του δίνουν δικαίωμα πρόσβασης και εγγραφής, στην πραγματικότητα δεν θα έχει δικαίωμα εγγραφής και τροποποίησης. Δεν θα πρέπει να ξεχνάμε ότι στην default ρύθμιση το primary group ενός χρήστη είναι το ίδιο με το όνομά του (owner = primary group, π.χ. adminuser adminuser), οπότε το group δεν προσφέρει ή αλλάζει τίποτα σε σχέση με τα δικαιώματα εγγραφής στο αρχείο ή τον φάκελο.

Και πως ξεπερνάμε το εμπόδιο αυτό; Υπάρχουν διάφοροι στρατηγικοί τρόποι προσέγγισης, με τρεις να είναι οι πιο συχνά αναφερόμενοι:
1) Αλλάζουμε την umask σε 000. Δεν προτείνεται διότι επηρεάζει όλο το λειτουργικό και όχι μόνο τα samba shares και κρίνεται ως (πολύ) επικίνδυνη για την ασφάλεια του υπολογιστή μας.
2) Αλλάζουμε τις ρυθμίσεις του share ώστε κάθε unix χρήστης να έχει δικαίωμα ανάγνωσης και εγγραφής, θέτουμε ως στόχο δηλαδή το 777.
3) Αλλάζουμε τις ρυθμίσεις του share με βάση ένα group και δίνουμε απεριόριστη πρόσβαση σε αυτό το group, διατηρώντας την απαγόρευση σε τρίτους, θέτουμε ως στόχο δηλαδή το 775.

Ο γράφων προτείνει την τρίτη λύση και αυτή θα παρουσιάσουμε αναλυτικά.
Ας το δούμε λοιπόν στην πράξη.
Δημιουργούμε τον φάκελο του κοινόχρηστου Share, με το όνομα CommonShare:
[Εικόνα: UbuntuServer_150.png]

Παρατηρούμε ότι owner και group owner είναι ο adminuser και ότι ο φάκελος έχει δικαιώματα rwxrwxr-x, δηλαδή μόνο ο adminuser έχει δικαιώματα εγγραφής:
[Εικόνα: UbuntuServer_152.png]

Αλλάζουμε τα δικαιώματα σε rwxrwxrwx με την εντολή
Κώδικας:
chmod 777 /disks/disk1data/CommonShare
[Εικόνα: UbuntuServer_153.png]

Με τον τρόπο που πλέον γνωρίζουμε, προσθέτουμε το Share με το όνομα Collaboration στο smb.conf:
Κώδικας:
[Collaboration]
    comment = Common Folder
    path = /disks/disk1data/CommonShare
    browsable = yes
    read only = no
    guest ok = no
    create mask = 664
    directory mask = 775
[Εικόνα: UbuntuServer_154.png]

Από υπολογιστή Windows, ο χρήστης User1 δημιουργεί το αρχείο Test.txt και τον φάκελο TestFolder1:
[Εικόνα: UbuntuServer_171.png]

Όπως βλέπουμε, δικαίωμα ανάγνωσης και εγγραφής έχουν ο owner και το group owner, δηλαδή οι user1 user1, στην πράξη ο χρήστης που έφτιαξε τον φάκελο και το αρχείο.
[Εικόνα: UbuntuServer_155.png]

Όπως θα έχετε καταλάβει, όπως είναι οι ρυθμίσεις μέχρι τώρα, κάθε χρήστης από τους samba users του server μας, δηλαδή τους user1, user2 και user3, θα μπορεί να δημιουργεί τους δικούς του φακέλους και αρχεία μέσα στο ίδιο share, αλλά κανείς δεν θα μπορεί να τροποποιεί τα αρχεία του άλλου ή να γράφει μέσα στους φακέλους του.
[Εικόνα: UbuntuServer_173.png]

Για να το πετύχουμε αυτό, θα χρησιμοποιήσουμε ένα από τα ειδικά δικαιώματα στους φακέλους, που υπάρχουν στο Unix και που αναφέραμε αμυδρά στο κεφάλαιο 6.1. Θα χρησιμοποιήσουμε το bit setgid όπως λέγεται (set group id), το οποίο συμβολίζεται με το γράμμα s και έχει την εξής λειτουργία: Όταν δημιουργείται ένα αρχείο ή φάκελος μέσα στον φάκελο στον οποίο έχει τεθεί το setgid, τότε στο δημιουργούμενο αυτό αρχείο ή φάκελο, αντί να τεθεί ως group owner το primary group του χρήστη που το δημιουργεί (που είναι το ίδιο με το όνομά του στην default ρύθμιση, όπως έχουμε δει), κληρονομείται το group owner του φακέλου στον οποίο έχουμε θέσει το setgid.

Έτσι αν βάλουμε τους χρήστες που θέλουμε σε ένα group, το ορίσουμε ως group owner του φακέλου που περιέχει το share μας, θέσουμε το setgid στον φάκελο αυτόν και θέσουμε την ρύθμιση force group στο smb.conf, όλοι οι χρήστες μας στο εν λόγω share θα μπορούν να κάνουν κυριολεκτικά ό,τι θέλουν!

Πάμε να το δούμε στην πράξη:
Προσθέτουμε στον server μας το group office και ορίζουμε ως μέλη του τους χρήστες user1, user2 και adminuser (για να έχει και ο διαχειριστής μας πλήρη δικαιώματα), εκτελώντας διαδοχικά τις εξής εντολές:
Κώδικας:
sudo addgroup office
sudo adduser user1 office
sudo adduser user2 office
sudo adduser adminuser office
[Εικόνα: UbuntuServer_156.png]

Αλλάζουμε το group owner του φακέλου που περιέχει το share μας (CommonShare) με την εντολή:
Κώδικας:
sudo chown :office /disks/disk1data/CommonShare
[Εικόνα: UbuntuServer_157.png]

[Εικόνα: UbuntuServer_158.png]

Θέτουμε σε αυτόν τον φάκελο το bit setgid με την εντολή
Κώδικας:
sudo chmod g+s /disks/disk1data/CommonShare
[Εικόνα: UbuntuServer_159.png]

Παρατηρούμε πλέον ότι τα δικαιώματα στον εν λόγω φάκελο είναι
Κώδικας:
rwxrwsrwx
[Εικόνα: UbuntuServer_161.png]

Αυτό σημαίνει ότι οτιδήποτε δημιουργείται μέσα στον φάκελο αυτόν από οποιονδήποτε unix χρήστη, θα έχει πλέον ως group owner το group office.

Θέτουμε και στο share μας στο αρχείο smb.conf την ρύθμιση
Κώδικας:
force group = office
[Εικόνα: UbuntuServer_162.png]

Και πλέον και από την πλευρά της samba οποιοσδήποτε χρήσης συνδέεται στο share, θα υποδεικνύεται ότι έχει ως primary group το office.

Πλέον, όταν σε υπολογιστή Windows ο χρήστης User2 δημιουργήσει τον φάκελο TestFolder2 και μέσα σε αυτόν, τον φάκελο TestFolder3 και το αρχείο Test2.txt:
[Εικόνα: UbuntuServer_174.png]

βλέπουμε ότι όλοι αυτοί οι φάκελοι έχουν με τη σειρά τους το bit setgid τεθειμένο, και επομένως όλα τα μέλη του group office μπορούν να κάνουν ότι θέλουν στο share μας!
[Εικόνα: UbuntuServer_163.png]



Και εδώ πλέον ολοκληρώθηκε η μεγάλη αυτή πραγματικά διαδρομή, στην προσπάθειά μας για δημιουργία ενός κοινόχρηστου File Server με μόνα όπλα μας την όρεξη για μάθηση και το ανοιχτό δωρεάν λογισμικό, αυτό το υπέροχο λειτουργικό που ακούει στο όνομα Linux. Ελπίζουμε να συνταξιδέψατε μαζί μας και να απολαύσατε τη διαδρομή της γνώσης, όπως έκανε και ο γράφων!

Αν έχετε οποιοδήποτε σχόλιο, παρατήρηση, προσθήκη ή ό,τι άλλο, είμαστε στη διάθεσή σας. Ευχαριστούμε που δείξατε την υπομονή να μείνετε μαζί μας μέχρι το τέλος!
Δημήτρης.
Linux Mint KDE laptop, Linux Mint Mate netbook, Lubuntu old desktop, Windows 7 main desktop, Ubuntu File Server
  Απάντηση
#25
dim_mint, post: 25113, member: 1892 είπε κι ελάλησε:[...] Και εδώ πλέον ολοκληρώθηκε η μεγάλη αυτή πραγματικά διαδρομή, στην προσπάθειά μας για δημιουργία ενός κοινόχρηστου File Server με μόνα όπλα μας την όρεξη για μάθηση και το ανοιχτό δωρεάν λογισμικό, αυτό το υπέροχο λειτουργικό που ακούει στο όνομα Linux. Ελπίζουμε να συνταξιδέψατε μαζί μας και να απολαύσατε τη διαδρομή της γνώσης, όπως έκανε και ο γράφων!

Αν έχετε οποιοδήποτε σχόλιο, παρατήρηση, προσθήκη ή ό,τι άλλο, είμαστε στη διάθεσή σας. Ευχαριστούμε που δείξατε την υπομονή να μείνετε μαζί μας μέχρι το τέλος!
Δημήτρης.
Εμείς σ' ευχαριστούμε Δημήτρη για τον υπέροχο και πραγματικά μοναδικό οδηγό σου.
respect enot
 Σοβαρότητα (λέμε τώρα…), διαφάνεια (ΤΩΡΑ!) και Ελεύθερη πρόσβαση σε όλα.
  Απάντηση
#26
Δημήτρη εύγε! Η παγκόσμια κοινότητα και ειδικά η Ελληνική είναι ακόμα πιο πλούσια σε γνώσεις!
  Απάντηση


Ίσως Σχετικά Νήματα...
Νήμα Άτομο Απαντήσεις Βλεφαριάσματα Τελευταία Ανάρτηση
  Οδηγός Εγκατάστασης openSUSE 12.3 apache 5 3.311 11.08.2018 14:15
Τελευταία Ανάρτηση: Efstathios Iosifidis
  Οδηγός επισκευών για linux Vanzetti 0 1.344 11.07.2017 15:52
Τελευταία Ανάρτηση: Vanzetti
  Οδηγός Εγκατάστασης MatLab σε Ubuntu Based Διανομές diman91 0 1.233 07.02.2017 00:26
Τελευταία Ανάρτηση: diman91
  MariaDB is a default database server pre-configured in Slackware 14.1 replacing the MySQL server. magicdespellll 0 1.085 19.03.2016 12:45
Τελευταία Ανάρτηση: magicdespellll
  Χρησιμοποιήσε το DDG ως xmpp server jemadux 6 2.176 28.07.2014 17:56
Τελευταία Ανάρτηση: jemadux

Πάμε στο Forum:


Πλάσματα σουλατσάρουν στο νήμα: 1 Επισκέπτης(ες)