Υπερ-αναλυτικός οδηγός δημιουργίας Home/Small Business File Server με Ubuntu Server 20.04

Ευχαριστούμε για το άρθρο :slight_smile:

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

Καλή δουλειά. Μερικά σχόλια:

  1. Το Ubuntu Server χρησιμοποιεί τώρα το νέο εγκαταστάτη subiquity, εδώ και δύο χρόνια περίπου. Το subiquity είναι το περιβάλλον εγκατάστασης που φαίνεται στις φωτογραφίες, μαύρο χρώμα και πορτοκαλί οριζόντα μπάρα στο πάνω μέρος.
    Περιλαμβάνει γύρω στα 450 μηνύματα για μετάφραση και έχουν μεταφραστεί ελάχιστα από αυτά. Θα ήταν καλό να ολοκληρωθεί η μετάφραση ώστε να είναι διαθέσιμη σε όσους επιθυμούν να εγκαταστήσουν το Ubuntu Server στα ελληνικά. Ωστόσο, υπάρχει το ζήτημα της γραφής ελληνικών στην κονσόλα του Linux (χωρίς γραφικό περιβάλλον), όταν βρίσκεσαι μπροστά στον υπολογιστή (όχι απομακρυσμένο μέσω SSH, κτλ). Όλα αυτά έχουν τεχνικές δυσκολίες που είναι μεγαλύτερες από το ίδιο το Ubuntu Server.
    Δεν ασχολήθηκα με τη δοκιμή στην εγκατάσταση του Ubuntu Server 20.04 LTS, οπότε δεν ξέρω τι να αναμένει ο χρήστης όταν επιλέξει ελληνικά. Είναι καλό να ξέρουμε. Στις γλώσσες κατά την εγκατάσταση αναφέρει «Ελληνικά» διότι όταν πρωτοεμφανίστηκε το subiquity το 2018, έγινε μια αρχική μετάφραση.

  2. Υπάρχει τρόπος και για autoinstall στο Ubuntu Server 20.04 LTS. Υπάρχει αναφορά για αυτό στο wiki του Ubuntu. Για τα autoinstalls, δες την ενότητα Servers στο discourse.ubuntu.com

  3. Παρατηρώ ότι το LXD είναι προεγκατεστημένο ως πακέτο snap στο Ubuntu Server. Το LXD επιτρέπει να δημιουργήσουμε system containers και virtual machines. Κατά την αρχικοποίησή του (sudo lxd init) θα ζητήσει χώρο για να βάλει τα system containers/virtual machines που θα φτιάξουμε μελλοντικά. Με 10GB στο / δεν θα έχει αρκετό χώρο, οπότε θα χρειαστεί να του αποδώσουμε να χρησιμοποιήσει κάποια κατάτμηση. Το LXD χρειάζεται τουλάχιστον 20GB. Δίνουμε το device (π.χ. /dev/sda8) κατά την αρχικοποίηση, και στην κατάτμηση αυτή δεν μορφοποιούμε (format) πιο πριν διότι θα το κάνει το LXD.
    Αυτό με τα system containers στο LXD είναι πολύ χρήσιμο. Μπορείς να φτιάξεις system containers με την επιλογή macvlan/bridged, οπότε θα εμφανίζονται στο δίκτυο ως ξεχωριστοί υπολογιστές. Είναι χρήσιμο για να παραμένει καθαρός ο server.

3 «Μου αρέσει»

πολυ ωραιος οδηγος φαινεται και περιμενουμε τη συνεχεια (και ευχαριστουμε φυσικα)

δε θα ταιριαζε σε τετοιο σερβερ να επιλεχθει το wormhole;
εδω ενα σχετικο λινκ → Wormhole is a Fast, Secure Way to Send Files to Other Users Through the CLI - OMG! Ubuntu

3 «Μου αρέσει»

Ευχαριστώ για τα καλά σας λόγια!
@raik
Το wormhole που αναφέρεις (φοβερή έμπνευση για το όνομα, interstellar η αγαπημένη μου ταινία! ) ξεφεύγει από τις γνώσεις μου, οπότε δεν μπορώ να το προσθέσω, αφού δεν το ξέρω… :wink:

Συνεχίζουμε με το Β μέρος του οδηγού:

Κεφάλαιο B – Απομακρυσμένος έλεγχος του Server με SSH & SFTP

Στην ουσία με τις παραπάνω ενέργειες ολοκληρώσαμε την εγκατάσταση στον Server μας και δεν υπάρχει πια η ανάγκη για φυσική παρουσία μας σε αυτόν. Έτσι λοιπόν, επειδή έχουμε εμπιστοσύνη στον εαυτό μας, αποσυνδέουμε ποντίκι (αν το είχαμε συνδεδεμένο, δεν χρειαζόταν), πληκτρολόγιο και οθόνη, τοποθετούμε τον Server μας στον μόνιμο χώρο διαμονής του, και μεταφερόμαστε σε έναν άλλο υπολογιστή στο δίκτυό μας, ο οποίος τρέχει ένα desktop λειτουργικό.

Φυσικά εμείς θα χρησιμοποιήσουμε μια διανομή Linux για την συνέχεια των εργασιών μας, όμως τα ίδια μπορούν να γίνουν και μέσα από Windows, με το πρόγραμμα PuTTY, που υποστηρίζει SSH σε Windows: https://www.putty.org/

Εμείς λοιπόν για τις ανάγκες του οδηγού θα χρησιμοποιήσουμε μια εγκατάσταση Xubuntu 20.04.

Η σύνδεση στον Server μας θα γίνει μέσω του πρωτοκόλλου επικοινωνίας SSH (= Secure Shell), που παρέχει ασφαλέστατη σύνδεση μεταξύ του server μας και του client pc (π.χ. ένα laptop). Ο ίδιος τρόπος σύνδεσης μπορεί στο μέλλον να χρησιμοποιηθεί και για απομακρυσμένη πρόσβαση στον server μέσω διαδικτύου, δηλαδή από οπουδήποτε στον κόσμο.

Ανοίγουμε λοιπόν ένα τερματικό και δίνουμε την εντολή:

ssh dimix@192.168.0.38

Δηλαδή την εντολή ssh που πραγματοποιεί την σύνδεση δια του ομώνυμου πρωτοκόλλου, ακολουθούμενη από το username μας στον Server (προσοχή σε αυτό) και την διεύθυνση IP του Server που είχαμε ορίσει κατά την εγκατάσταση αυτού.

Μας απαντάει ότι δεν μπορεί να διαπιστωθεί η αυθεντικότητα του Server μας (λογικό, δεν ασχολούμαστε αυτή τη στιγμή με ψηφιακά πιστοποιητικά στον Server μας) και αν θέλουμε να συνεχίσουμε, φυσικά απαντάμε yes .

Στη συνέχεια μας ζητάει τον κωδικό (password) του χρήστη στον Server (και πάλι προσοχή εδώ, όχι του desktop λογαριασμού), και αφού δώσουμε και αυτόν, συνδεόμαστε επιτέλους στον Server μας, όπως φαίνεται στην παρακάτω οθόνη.

Πλέον είμαστε συνδεδεμένοι στον Server μας με πλήρη δικαιώματα και μπορούμε να κάνουμε κυριολεκτικά ό,τι θέλουμε, σαν να καθόμαστε μπροστά του. Όπως βλέπουμε, το prompt στο terminal έχει αλλάξει από dimix@ XubuntuCore (το desktop μας) σε dimix@ ubserver2004 (o Server μας).

Αφού λοιπόν έχουμε επιβεβαιώσει ότι μπορούμε να συνδεθούμε στον Server μας, στη συνέχεια θα αλλάξουμε λίγο τον τρόπο σύνδεσης σε αυτόν, ώστε ο τρόπος αυτός να είναι πολύ πιο ασφαλής.

Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε τα κλειδιά πρόσβασης SSH. Αυτό με λίγα λόγια δουλεύει ως εξής: Δημιουργούμε ένα private key και ένα public key στο client PC. Το private key το φυλάσσουμε στο client PC, ενώ το public key το στέλνουμε ή το εγκαθιστούμε χειροκίνητα στον server. Στη συνέχεια απενεργοποιούμε την δυνατότητα εισόδου στον server με χρήση user password, και η είσοδός μας σε αυτόν γίνεται μόνο με τη χρήση του private key μας. Η διαδικασία αυτή εισόδου είναι απείρως ασφαλέστερη από την είσοδο με κωδικό χρήστη. Όμως ας τα δούμε στην πράξη, ώστε να σας λυθούν και οι όποιες απορίες.

Τερματίζουμε πρώτα την σύνδεσή μας με τον server, με την εντολή exit .

Από το client PC σε terminal δίνουμε την εντολή

ssh-keygen -t rsa -b 4096 -o -a 100

Με την εντολή αυτή δημιουργούμε ένα κλειδί με κρυπτογράφηση RSA και εύρος 4096 bit, στη σύγχρονη μορφή του και με προσθήκη γύρων διαφοροποίησης (key derivation function rounds), από τους πιο ασφαλείς αλγορίθμους που υπάρχουν σήμερα.

Στην επόμενη ερώτηση για το που θα τοποθετηθούν τα κλειδιά αφήνουμε το default, απλά πατώντας enter, ενώ εάν θέλουμε, μπορούμε να προστατεύσουμε ακόμα και το private key μας που δημιουργούμε, με κρυπτογραφημένο κωδικό πρόσβασης (passphrase), τον οποίο δίνουμε στην επόμενη ερώτηση, ενώ αν δεν θέλουμε κωδικό, απλά πατάμε enter:

Τα κλειδιά μας έχουν δημιουργηθεί και είναι τοποθετημένα στον φάκελο / home/ username/. ssh (όπου username αυτό που έχετε χρησιμοποιήσει εσείς). Στο σημείο αυτό να ενημερώσουμε όσους δεν γνωρίζουν, ότι στο Linux όταν σε ένα όνομα αρχείου ή φακέλου προηγείται η τελεία (.), το αρχείο ή φάκελος είναι κρυφό και για να το δούμε, θα πρέπει στον file manager μας να ενεργοποιήσουμε την προβολή κρυφών αρχείων.

Στη συνέχεια στέλνουμε το public key που μόλις δημιουργήσαμε, στον server μας με την εντολή:

ssh-copy-id dimix@192.168.0.38

Δηλαδή χρησιμοποιούμε πάλι, όπως την προηγούμενη φορά που συνδεθήκαμε, το username μας στον Server , ενώ φυσικά όταν μας ζητηθεί, δίνουμε τον κωδικό του username μας στον server , όχι του χρήστη μας στο client PC:

Με αυτό τον τρόπο έχουμε εγκαθιδρύσει δυνατότητα σύνδεσης στον server μας με κρυπτογραφημένα κλειδιά. Συνδεόμαστε ξανά στον server μας με την εντολή:

ssh dimix@192.168.0.38

όπου πλέον παρατηρούμε ότι δεν μας ζητείται κωδικός πρόσβασης, αλλά η είσοδός μας γίνεται αμέσως:

Την ίδια διαδικασία μπορούμε να κάνουμε από οποιοδήποτε άλλο PC μας, από το οποίο θέλουμε να έχουμε απομακρυσμένη πρόσβαση στον server μας.

Στη συνέχεια θα απενεργοποιήσουμε εντελώς την δυνατότητα σύνδεσης με κωδικό στον server μας και θα προβούμε και σε μερικές ακόμα ρυθμίσεις αύξησης της ασφάλειας.

Όλες οι ρυθμίσεις της υπηρεσίας (Service στα Windows, Daemon στο Linux) του SSH Server βρίσκονται στο αρχείο sshd_config που βρίσκεται στον φάκελο / etc/ ssh .

Με την εντολή (στον Server εννοείται)

cd /etc/ssh

μεταφερόμαστε στον παραπάνω φάκελο, ενώ με την εντολή

ll

βλέπουμε αναλυτικά τα αρχεία που βρίσκονται στον φάκελο αυτόν:

Προσοχή: Το αρχείο που μας ενδιαφέρει, είναι το αρχείο sshd_ config , όχι το αρχείο ssh_ config .

Όπως βλέπουμε, είναι αρχείο συστήματος, που ανήκει στον root χρήστη, συνεπώς για να το επεξεργαστούμε χρειαζόμαστε αυξημένα δικαιώματα. Για να τα αποκτήσουμε, θα χρησιμοποιήσουμε την εντολή sudo στο terminal, και με αυτή θα ανοίξουμε στο πρόγραμμα nano το αρχείο μας.

Ο nano είναι επεξεργαστής κειμένου στο τερματικό (terminal), πολύ εύκολος στη χρήση. Δίνουμε λοιπόν την εντολή

sudo nano sshd_config

και αφού δώσουμε τον κωδικό μας, εάν μας ζητηθεί, το εν λόγω αρχείο ανοίγει στο τερματικό ως εξής:

Να εξηγήσουμε εδώ ότι σε όποια γραμμή υπάρχει στην αρχή της η δίεση ( # ) , η γραμμή αυτή αποτελεί σχόλιο και δεν λαμβάνεται υπόψη από το σύστημα. Στην παραπάνω εικόνα μάλιστα όλα τα σχόλια είναι με γαλάζιο χρώμα.

Από όλες αυτές τις ρυθμίσεις, μας ενδιαφέρουν τα εξής:

1. Η γραμμή

#LoginGraceTime 2m

Η οποία καθορίζει σε πόσο χρόνο σε δευτερόλεπτα ή λεπτά θα περιμένει ο server την επικύρωση ταυτότητας (authentication) από τον χρήστη που προσπαθεί να εισέλθει στο σύστημα. Μια πιο λογική τιμή είναι 60 ή ακόμα και 30 για τους πιο τολμηρούς, η οποία και προτείνεται:

LoginGraceTime 30

2. Η γραμμή

#StrictModes yes

Στην οποία αφαιρούμε την δίεση ώστε να τεθεί η ρύθμιση σε ισχύ.

3. Η γραμμή

#MaxStartups 10:30:60

Η οποία ορίζει ότι μεταξύ της 10ης και 60ης προσπάθειας εισόδου στον server, ο server θα αρχίσει να απορρίπτει το 30% των προσπαθειών, μέχρι να φθάσει στο 100% απόρριψης στην 60ή προσπάθεια. Οι αριθμοί αυτοί είναι πολύ ανεκτικοί, οπότε προτείνεται να αφαιρέσουμε την δίεση, ώστε να τεθεί σε ισχύ η ρύθμιση, και να την αλλάξουμε ως εξής:

MaxStartups 2:30:10

Με αυτή τη ρύθμιση, μεταξύ της 2ης και 10ης προσπάθειας εισόδου στον server, ο server θα αρχίσει να απορρίπτει το 30% των προσπαθειών, μέχρι να φθάσει στο 100% απόρριψης στην 10η προσπάθεια. Με λίγα λόγια έχουμε μόνο δύο προσπάθειες εισόδου στον server, πριν αρχίσουν οι απορρίψεις.

4. Η γραμμή

X11Forwarding yes

την οποία αλλάζουμε σε

X11Forwarding no

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

5. Η γραμμή, που είναι και η πιο σημαντική

PasswordAuthentication yes

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

PasswordAuthentication no

6. Τέλος, μπορούμε στο τέλος του αρχείου να προσθέσουμε ποιοι χρήστες και μόνο θα επιτρέπεται να εισέλθουν στον server μέσω ssh. Εμείς θέλουμε μόνο εμείς να εισερχόμαστε, οπότε γράφουμε:

AllowUsers dimix

Με αυτόν τον τρόπο προσθέτουμε ένα ακόμα σοβαρό μέτρο ασφαλείας στον server μας. Μόνο οι ρητά αναγραφόμενοι χρήστες θα μπορούν να εισέλθουν σε αυτόν.

Αποθηκεύουμε το αρχείο μας δίνοντας Ctrl + O και enter , κλείνουμε τον nano με Ctrl + X και είμαστε έτοιμοι!

Πλέον η είσοδος στον server μας είναι δυνατή μόνο με τα κρυπτογραφημένα κλειδιά ssh.

Να αναφέρουμε εδώ ότι στον server τα δημόσια κλειδιά αποθηκεύονται στο αρχείο ~/.ssh/authorized_keys (το σύμβολο ~ αντιπροσωπεύει τον home folder του χρήστη), που όπως όλα σχεδόν τα αρχεία στο linux, είναι αρχείο κειμένου με κάθε κλειδί να καταλαμβάνει μια γραμμή. Απλά για να προσθέσουμε δεύτερο PC, προσθέτουμε σε επόμενη γραμμή το κείμενο του αρχείου id_rsa. pub που δημιουργείται στον φάκελο ~/.ssh του χρήστη του Client PC μας, κατά τη διαδικασία δημιουργίας κλειδιών που περιγράψαμε πιο πάνω.

ΠΡΟΣΟΧΗ : Για να δουλέψει το σύστημα εισαγωγής με κλειδιά, απαιτείται όλα τα αρχεία που περιέχουν τα κλειδιά να έχουν δικαιώματα ανάγνωσης και εγγραφής μόνο από τον owner , δηλαδή rw------- ή αλλιώς 600 . Αν κάνετε κάποια χειροκίνητη τροποποίηση και αλλάξουν τα δικαιώματα αυτά, η είσοδός σας θα αποτυγχάνει. Τα δικαιώματα χρηστών θα εξηγηθούν αναλυτικότατα σε επόμενο κεφάλαιο.

Είσοδος στον Server μέσω SFTP

Εκτός από τον παραπάνω τρόπο εισόδου μέσω SSH και τερματικού, μπορούμε να εισέλθουμε στον Server μας και μέσω γραφικού περιβάλλοντος, μέσω του πρωτοκόλλου SFTP (= Secure FTP, Secure File Transfer Protocol) και να πραγματοποιήσουμε μεταφορές αρχείων από την άνεση του Desktop μας!

Σε όλες τις σοβαρές διανομές Linux ο File Manager υποστηρίζει εγγενώς το πρωτόκολλο SFTP, έτσι εμείς δεν χρειάζεται να εγκαταστήσουμε απολύτως τίποτα.

Εφόσον λοιπόν έχουμε ολοκληρώσει όλα τα παραπάνω σχετικά με την ρύθμιση του SSH, ανοίγουμε τον File Manager μας, εδώ σε XFCE τον Thunar:

Στη γραμμή διεύθυνσης δίνουμε το εξής και στη συνέχεια enter :

sftp://dimix@192.168.0.38

Δηλαδή, όπως και με την σύνδεση μέσω SSH, δίνουμε το username και την διεύθυνση του Server :

Και αμέσως, χωρίς τίποτα άλλο, έχουμε πλήρη πρόσβαση σε ολόκληρο το File System του Server μας, μέσω γραφικού περιβάλλοντος!

Φυσικά, αυτονόητο ότι στο File System αυτό έχουμε όσα δικαιώματα έχει και ο χρήστης του Server μας, τα οποία επιτρέπει παράλληλα το πρωτόκολλο SFTP.

Συνεχίζεται…

9 «Μου αρέσει»

Συνεχίζουμε με τα επόμενα δύο κεφάλαια του οδηγού μας.

Κεφάλαιο Γ – Προσθήκη και διαμόρφωση σκληρών δίσκων

Εισαγωγικά να πούμε ότι αν θέλουμε αν επανεκκινήσουμε τον Server μας, δίνουμε την εντολή

sudo reboot

ενώ αν θέλουμε απλά να τερματίσουμε την λειτουργία του, δίνουμε την εντολή

sudo shutdown now

Ένας server φυσικά δεν θα έχει μόνο ένα σκληρό δίσκο, αλλά συνήθως πολύ περισσότερους. Αφού έχουμε ολοκληρώσει την εγκατάσταση των δίσκων μας στο κουτί του υπολογιστή μας, η προσθήκη στο λειτουργικό σύστημα γίνεται απλούστατα, με την χρήση του εργαλείου parted ( PARTition EDitor) . Το πρόγραμμα parted δεν είναι άλλο από την έκδοση τερματικού του πολύ γνωστού προγράμματος διαχείρισης δίσκων GParted .

Η τεκμηρίωση του προγράμματος ή αλλιώς το manual, όπου μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με όσα εκτίθενται στον παρόντα οδηγό, βρίσκεται εδώ:

https://www.gnu.org/software/parted/manual/

Στο σημείο αυτό να αναφέρουμε ότι στο Linux οι δίσκοι sata αναφέρονται με την μορφή / dev/ sda και τα partitions σε αυτούς με την μορφή / dev/ sda1 . Όπου dev = device, sd = sata disk , τα γράμματα a, b, c κλπ. αναφέρονται στους δίσκους διαδοχικά, ενώ οι αριθμοί που ακολουθούν αναφέρονται στα partitions κάθε δίσκου.

Έχοντας αυτή τη γνώση λοιπόν, ξεκινάμε!

Αρχικά δίνουμε την εντολή

sudo fdisk -l

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

Στην παραπάνω εικόνα βλέπουμε (στο πράσινο πλαίσιο) ότι ο δίσκος των 15 GB έχει το όνομα / dev/ sda , είναι ο δίσκος στον οποίο έχουμε κάνει την εγκατάσταση του λειτουργικού και έχει τέσσερα partitions, τα sda1, sda2, sda3 και sda4 .

Στον Server μας έχουμε προσθέσει και έναν δεύτερο sata δίσκο, μεγέθους μόλις 5 GB, που έλαβε το όνομα / dev/ sdb και όπως βλέπουμε (στο κόκκινο πλαίσιο) δεν έχει καθόλου partitions, καθώς είναι ολοκαίνουριος, του κουτιού.

Θα πρέπει λοιπόν στον δεύτερο δίσκο μας, να δημιουργήσουμε partition table και στη συνέχεια partition , μετά να διαμορφώσουμε file system σε αυτό και να ορίσουμε mount point (σημείο προσάρτησης) αυτού, δηλαδή να ορίσουμε σε ποιον φάκελο της δομής του λειτουργικού συστήματος, θα αντιστοιχεί ο νέος δίσκος μας.

Ξεκινάμε δίνοντας απλά την εντολή

sudo parted

και εισερχόμαστε στο περιβάλλον του προγράμματος, το οποίο όπως βλέπουμε στην παραπάνω εικόνα, αμέσως μας ενημερώνει ότι έχει ήδη επιλέξει τον πρώτο δίσκο του συστήματός μας, τον / dev/ sda . Για να ξέρουμε ότι βρισκόμαστε πάντα εντός του προγράμματος, στο prompt υπάρχει συνεχώς σε παρένθεση το ( parted) .

Δίνοντας, όπως μας προτρέπει το ίδιο το πρόγραμμα,

help

βλέπουμε τις εντολές που δέχεται το πρόγραμμα.

Εμείς θέλουμε να επέμβουμε στον δεύτερο δίσκο του συστήματός μας, οπότε επιλέγουμε αυτόν με την εντολή

select /dev/sdb

και στη συνέχεια δίνουμε την εντολή

print

για να δούμε την κατάσταση του δίσκου. Όπως είναι φυσικό, μας αναφέρει με error ότι δεν υπάρχει καν partition table στον δίσκο, αφού αυτός είναι όπως είπαμε, ολοκαίνουριος.

Φτιάχνουμε λοιπόν νέο partition table (το πρόγραμμα το αποκαλεί label ), με την εντολή

mklabel gpt

και στη συνέχεια δίνουμε ξανά την εντολή

print

οπότε βλέπουμε ότι πλέον έχει δημιουργηθεί ένα gpt partition table , ενώ φυσικά ακόμα δεν υπάρχει partition:

Στη συνέχεια δημιουργούμε ένα νέο partition, το οποίο θα καταλαμβάνει όλο τον δίσκο, αφού αυτός θα χρησιμοποιηθεί αποκλειστικά για αποθήκευση δεδομένων, με την εντολή

mkpart primary 1MiB -1s

ΠΡΟΣΟΧΗ εδώ :

Το primary δεν είναι τύπος partition όταν ο δίσκος είναι σε gpt partition table , αλλά απλά ένα όνομα. Οι άλλες δύο παράμετροι αποτελούν τα σημεία έναρξης και τέλους του partition που δημιουργούμε. Το πρόγραμμα ελέγχει εάν δίνουμε σωστό alignment στο partition που δημιουργούμε, και για να το πετύχουμε αυτό, δίνουμε ως σημείο έναρξης του partition το 1 MiB , που σημαίνει 1048576 bytes. Η επόμενη παράμετρος, -1 s σημαίνει το τέλος του δίσκου (ο τελευταίος sector αυτού). Το πρόγραμμα όπως βλέπουμε πραγματοποιεί έλεγχο και μας ρωτάει αν συμφωνούμε, απαντάμε yes και το partition δημιουργείται αμέσως και επιτυχώς, όπως φαίνεται με την εντολή

print

Τα παραπάνω αναφέρονται ρητά στην τεκμηρίωση του προγράμματος:

“Note that negative numbers count back from the end of the disk, with “-1s” pointing to the last sector of the disk.

Note that as of parted-2.4, when you specify start and/or end values using IEC binary units like “MiB”, “GiB”, “TiB”, etc., parted treats those values as exact, and equivalent to the same number specified in bytes (i.e., with the “B” suffix), in that it provides no “helpful” range of sloppiness. Contrast that with a partition start request of “4GB”, which may actually resolve to some sector up to 500MB before or after that point. Thus, when creating a partition, you should prefer to specify units of bytes (“B”), sectors (“s”), or IEC binary units like “MiB”, but not “MB”, “GB”, etc”.

Πλέον ολοκληρώσαμε την εργασία μας με το parted. Βγαίνουμε από το πρόγραμμα με την εντολή

quit

και μπορούμε να δούμε το νέο μας partition και με την εντολή

lsblk

Στη συνέχεια δημιουργούμε file system στο νέο μας partition, τύπου ext4 , με την εντολή

sudo mkfs.ext4 /dev/sdb1

Προσέχουμε ότι το file system μας έχει δημιουργηθεί επιτυχώς, ενώ αναφέρεται και το Filesystem UUID ( Universally Unique IDentifier) , εδώ το b54ca790-b91c-4744-92d2-83c5b5738eff , το οποίο το χρειαζόμαστε αργότερα. Γι’ αυτό το επιλέγουμε, το αντιγράφουμε και το αποθηκεύουμε σε ένα απλό αρχείο κειμένου. Μην ξεχνάμε ότι βρισκόμαστε στον desktop υπολογιστή μας και μπορούμε να χρησιμοποιήσουμε όλα τα πλεονεκτήματά του:

Αν παρόλα αυτά δεν έχουμε κρατήσει το UUID, μπορούμε να το έχουμε ξανά εύκολα με την εντολή

lsblk -f

Στη συνέχεια, δημιουργούμε έναν φάκελο, στον οποίο θα προσαρτήσουμε το νέο μας partition, με την εντολή

sudo mkdir /mnt/disk01

Προφανώς το όνομα και η διαδρομή του φακέλου είναι ελεύθερη επιλογή μας , απλά διευκολύνει όλοι οι δίσκοι να είναι μαζεμένοι κάτω από την διαδρομή / mnt , που είναι από default το σημείο προσάρτησης δίσκων σε πολλές διανομές Linux.

Κατόπιν προσαρτούμε ( mount ) το νέο μας partition στον παραπάνω φάκελο, με την εντολή

sudo mount /dev/sdb1 /mnt/disk01

και μεταβαίνουμε σε αυτόν με την εντολή

cd /mnt/disk01

Με την εντολή

ls -alhF

(η οποία στην εικόνα παρακάτω έχει αντιστοιχιστεί με alias στο la ) βλέπουμε ότι τόσο ο συγκεκριμένος φάκελος, όσο και τα περιεχόμενά του και ο ανώτερος από αυτόν, ανήκουν στον υπερχρήστη root , οπότε για να δημιουργήσουμε έναν φάκελο δίνουμε την εντολή

sudo mkdir Shares

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

Εδώ βλέπουμε τον δίσκο μας και τον φάκελο που έχουμε δημιουργήσει, μέσω SFTP:

Τέλος πρέπει να ορίσουμε μόνιμο σημείο προσάρτησης του νέου μας partition στο file system του Server, ώστε να προσαρτάται αυτόματα σε κάθε εκκίνηση αυτού. Για τον σκοπό αυτό θα επέμβουμε στο αρχείο fstab που βρίσκεται στην διαδρομή / etc/ fstab , δίνοντας την εντολή

sudo nano /etc/fstab

οπότε το συγκεκριμένο αρχείο ανοίγει στον γνωστό μας πλέον nano :

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

/dev/disk/by-uuid/b54ca790-b91c-4744-92d2-83c5b5738eff /mnt/disk01 ext4 defaults 0 0

αναγράφοντας δηλαδή: 1) το UUID του νέου μας partition που είχαμε αποθηκεύσει παραπάνω, 2) το mount point που θέλουμε, 3) το σύστημα αρχείων ( file system ) που έχουμε δημιουργήσει, 4) τις επιλογές προσάρτησης (το defaults είναι αρκετό) και 5) δύο ακόμα παραμέτρους, όπου δίνουμε τις τιμές 0 0 .

Για περισσότερες πληροφορίες σχετικά με τη δομή του fstab , μπορείτε να διαβάσετε την επίσημη τεκμηρίωση:

https://manpages.ubuntu.com/manpages/focal/man5/fstab.5.html

Επανεκκινούμε τον Server μας με

sudo reboot

και αφού ξαναεισέλθουμε σε αυτόν, δίνοντας την εντολή

lsblk -f

βλέπουμε ότι όλα έχουν καλώς και το νέο partition μας έχει προσαρτηθεί αυτόματα στη θέση που έχουμε ορίσει:

Εδώ ολοκληρώνεται το κεφάλαιο σχετικά με τους σκληρούς δίσκους.

Κεφάλαιο Δ – Προσθήκη χρηστών

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

Να τονίσουμε εξαρχής ότι για να έχουν πρόσβαση οι χρήστες απομακρυσμένα μέσω samba , θα πρέπει να έχουν και τοπικό λογαριασμό στον server μας , unix λογαριασμό όπως λέγεται. Το username τους θα πρέπει να είναι το ίδιο, ενώ ο κωδικός μπορεί να είναι διαφορετικός, κάτι όμως που δεν προτείνεται, για να αποφευχθούν στο μέλλον επιπλοκές και απορίες του στυλ «μα γιατί επιτέλους δεν έχω πρόσβαση στα δεδομένα μου στον server;». Με άλλα λόγια, οι χρήστες θα πρέπει να έχουν το ίδιο username, τόσο στους λογαριασμούς τους σε υπολογιστή με Windows, όσο και στον server μας .

H προσθήκη χρηστών στον server μας μπορεί να γίνει με δύο εντολές. Η πρώτη είναι το useradd , που είναι η πρωταρχική, low level εντολή, ενώ η δεύτερη είναι η adduser , που είναι και αυτή που θα χρησιμοποιήσουμε. Η adduser είναι στην ουσία ένα script , προσαρμοσμένο στις απαιτήσεις των νέων ισχυουσών πολιτικών του Debian/ Ubuntu (αν δεν το γνωρίζετε, το Ubuntu βασίζεται στο Debian), που τρέχει στο υπόβαθρο την εντολή useradd , αλλά είναι πιο φιλική στο χρήστη, φροντίζοντας αυτόματα να κάνει όλα όσα πρέπει για να έχουμε προσθήκη χρηστών σύμφωνα με τα νεότερα πρότυπα του Debian. Τα παραπάνω αναφέρονται και στην επίσημη τεκμηρίωση της εντολής (man page):

“adduser and addgroup add users and groups to the system according to command line options and configuration information in /etc/adduser.conf. They are friendlier front ends to the low level tools like useradd, groupadd and usermod programs, by default choosing Debian policy conformant UID and GID values, creating a home directory with skeletal configuration, running a custom script, and other features”.

Μερικές από τις πιο χρήσιμες λειτουργίες της εντολής adduser , είναι ότι δημιουργεί αυτόματα home folder για τον χρήστη που προσθέτουμε, και group με το ίδιο όνομα με του χρήστη, το οποίο ορίζει ως πρωταρχικό , γεγονός σημαντικό για πολλές λειτουργίες του λειτουργικού συστήματος σχετικά με τα δικαιώματα πρόσβασης.

Η εισαγωγή λοιπόν νέων χρηστών γίνεται με την εντολή

sudo adduser username

και στη συνέχεια ερωτόμαστε για κωδικό πρόσβασης, πραγματικό ονοματεπώνυμο και άλλα στοιχεία που τυχόν θέλουμε να προσθέσουμε για τον χρήστη. Με την εντολή αυτή εμείς δημιουργήσαμε για τις ανάγκες του οδηγού δύο χρήστες, τους user01 και user02 :

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

Η βασική διαχείριση των χρηστών και των groups γίνεται ως εξής:

1. Για να δούμε όλους τους χρήστες του λειτουργικού, ώστε να εξετάσουμε μήπως ξεχάσαμε κάποιον (η παρακάτω εντολή δείχνει και «χρήστες» που δημιουργεί το σύστημα για τις ανάγκες λειτουργίας του, εμείς ασχολούμαστε μόνο με τους χρήστες μας, οι οποίοι συνήθως εμφανίζονται στο τέλος της λίστας):

compgen -u

2. Για να δούμε όλα τα groups:

compgen -g

3. Για να δούμε όλα τα μέλη ενός group:
getent group groupname

4. Για να δούμε την αναλυτική ταυτότητα ενός χρήστη, σε ποια group ανήκει κλπ. (αν δεν δώσουμε username, η εντολή μας επιστρέφει τα δικά μας στοιχεία):

id username

5. Για να δούμε σε ποια group ανήκει ένας χρήστης (αν δεν δώσουμε username, η εντολή μας επιστρέφει τα δικά μας στοιχεία):

groups username

6. Για να προσθέσουμε ένα νέο group στο σύστημα

addgroup groupname

7. Για να προσθέσουμε υπάρχοντα χρήστη σε υπάρχον group:

adduser username groupname

Για περισσότερες πληροφορίες σχετικά με την διαχείριση χρηστών και groups, θα πρέπει να ανατρέξετε στις σελίδες τεκμηρίωσης (man pages) των εντολών adduser , deluser , usermod, καθώς οι δυνατότητες είναι πάρα πολλές και ξεφεύγουν από τα πλαίσια αυτού του οδηγού.

Συνεχίζεται…

9 «Μου αρέσει»

Συνεχίζουμε με το επόμενο κεφάλαιο…

Κεφάλαιο Ε – Δικαιώματα χρηστών στο Linux

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

Πριν όμως προχωρήσουμε στις ρυθμίσεις του 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 σημαίνει r eadable

To w σημαίνει w ritable

Το x σημαίνει e x ecutable

Όπου το δικαίωμα δεν υπάρχει, αναπαρίσταται με απλή παύλα: -

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

Τα δικαιώματα αυτά μπορούμε να τα δούμε σε τερματικό με την εντολή

ls –l

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

drwxr-xr-x dimix dimix

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

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

4 = Read

2 = Write

1 = Execute

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

Για παράδειγμα:

5 σημαίνει read & 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

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

Σημαίνει ότι σε κάθε νέο αρχείο ή φάκελο που δημιουργείται, το λειτουργικό θα αφαιρεί από το σύνολο δικαιωμάτων των τρίτων χρηστών (others), δηλαδή από το 7, το 2. Με απλά ελληνικά, σημαίνει ότι σε κάθε νέο αρχείο ή φάκελο που δημιουργείται, θα αφαιρείται από το λειτουργικό αυτόματα το δικαίωμα εγγραφής για τους τρίτους (others).

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

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

/etc/login.defs

όπου βλέπουμε μεγαλοπρεπώς η ρύθμιση να είναι 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 (όπως εδώ στο παράδειγμά μας είναι dimix dimix), θα έχουν άλλη umask, και αυτή θα εξισώνει τα δικαιώματα του owner με τα δικαιώματα του group owner, και σε default ρύθμιση η umask από 022 θα γίνει 002 για τους συγκεκριμένους χρήστες.

Και φυσικά, στο ίδιο αρχείο πιο κάτω η ρύθμιση USERGROUPS_ENAB είναι πράγματι “ yes ”.

Έτσι λοιπόν όταν ο χρήστης ρωτάει στο terminal την umask, το λειτουργικό βλέπει ότι ο χρήστης έχει το ίδιο username και primary groupname, και του απαντάει ότι η umask είναι 002, ενώ στην πραγματικότητα είναι 022!

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

Η συνέχεια στο επόμενο επεισόδιο…

8 «Μου αρέσει»

Συνεχίζουμε με το τελευταίο κεφάλαιο του οδηγού, το οποίο επειδή είναι πολύ μεγάλο, θα χωριστεί και θα ανεβαίνει σε τμήματα.

Κεφάλαιο ΣΤ – Χορεύοντας σε ρυθμούς Samba

Τμήμα Πρώτο – Εγκατάσταση και Προσθήκη Χρηστών Samba

Για τον διαμοιρασμό των αρχείων από τον Server μας θα χρησιμοποιήσουμε τον Samba file server. Το όνομα samba προέρχεται από το SMB = Server Message Block , το πρωτόκολλο που χρησιμοποιήθηκε αρχικά από τα Microsoft Windows για επικοινωνία των υπολογιστών μέσω δικτύου.

Κατά την εγκατάσταση του Ubuntu Server δεν εγκαθίσταται μαζί και το πακέτο Samba , οπότε πρέπει να το εγκαταστήσουμε εμείς, δίνοντας στο τερματικό:

sudo apt install samba

και σε ελάχιστο χρόνο γίνεται η εγκατάσταση και τίθενται αυτόματα οι απαραίτητες ρυθμίσεις.

Στη συνέχεια πρέπει να προσθέσουμε χρήστες Samba στον Server μας.

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

Η προσθήκη αυτή γίνεται με την εντολή

sudo smbpasswd -a username

Επισημαίνονται τα εξής:

1) Ο χρήστης μας θα πρέπει να έχει το ίδιο username τόσο στην samba, όσο και στον απομακρυσμένο υπολογιστή από τον οποίο θα έχει πρόσβαση, π.χ. από υπολογιστή Windows.

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

3) Ενώ οι λογαριασμοί Unix είναι case sensitive , δηλαδή τα κεφαλαία γράμματα λογίζονται ως διαφορετικά από τα μικρά και επιτρέπονται μόνο μικρά, δεν συμβαίνει το ίδιο κατά την αντιστοίχιση λογαριασμού samba με λογαριασμό Windows. Επειδή στα Windows οι λογαριασμοί είναι case insensitive , η samba ακολουθεί το ίδιο μοτίβο και επομένως δεν έχει σημασία αν ο λογαριασμός χρήστη στα Windows έχει και κεφαλαία γράμματα, ενώ ο λογαριασμός samba δεν έχει.

Με την παραπάνω εντολή λοιπόν και για τις ανάγκες του οδηγού, προσθέσαμε τους χρήστες μας user01 και user02 ως samba χρήστες:

Για να ελέγξουμε ποιους χρήστες έχουμε προσθέσει, χρησιμοποιούμε την εντολή

sudo pdbedit -L

ενώ αν προσθέσουμε και τον διακόπτη - v (verbose) μας δίνει πολύ περισσότερες πληροφορίες:

sudo pdbedit -Lv

Τέλος, για να διαγράψουμε κάποιο χρήστη από την samba, χρησιμοποιούμε την εντολή

sudo smbpasswd -x username

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

sudo smbpasswd -a dimix

Τμήμα Δεύτερο – Προετοιμασία και δομή του αρχείου smb.conf

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

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

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

Επειδή όμως εμείς θα έχουμε μελετήσει τον παρόντα οδηγό ( :wink: ) , τα σχόλια αυτά περισσότερο περιπλέκουν τα πράγματα, παρά βοηθούν, αφού μας εμποδίζουν να έχουμε μια καθαρή εικόνα για τις ρυθμίσεις μας. Έτσι, είναι προτιμότερο αφενός μεν να πάρουμε ένα backup του αρχείου smb.conf, αφετέρου δε να έχουμε ένα καθαρό αρχείο , χωρίς σχόλια.

Τα παραπάνω θα τα πετύχουμε εκτελώντας διαδοχικά τις εξής εντολές:

sudo -i
cd /etc/samba
mv smb.conf smb.conf.master
touch smb.conf
testparm -s smb.conf.master > smb.conf

Με τις παραπάνω εντολές αναβαθμίσαμε τον εαυτό μας σε υπερχρήστη (root), μεταβήκαμε στο φάκελο samba, μετονομάσαμε το αρχείο smb.conf σε smb.conf.master και στη συνέχεια φτιάξαμε ένα νέο αρχείο smb.conf χωρίς σχόλια:

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

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

Η δομή του αρχείου 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 .

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

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

GLOBAL SECTION

workgroup = WORKGPOUPNAME

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

security = user | share

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

usershare allow guests = yes | no

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

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

Καθορίζει τα δικαιώματα με τα οποία θα δημιουργείται ένα νέο αρχείο από τον απομακρυσμένο χρήστη. Ανατρέξτε στο κεφάλαιο Ε του παρόντος οδηγού για περισσότερες πληροφορίες. Default: create mask = 0744 .

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

directory mask = 775

Καθορίζει τα δικαιώματα με τα οποία θα δημιουργείται ένας νέος φάκελος (directory) από τον απομακρυσμένο χρήστη. Ανατρέξτε στο κεφάλαιο Ε του παρόντος οδηγού για περισσότερες πληροφορίες. Default: directory mask = 0755 .

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

force user = username

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

force group = groupname

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

Για περισσότερες πληροφορίες σχετικά με τις ατελείωτες πραγματικά ρυθμίσεις του smb.conf , μπορείτε να ανατρέξετε στην επίσημη τεκμηρίωση

https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html

και από την πλευρά του Ubuntu

https://manpages.ubuntu.com/manpages/focal/man5/smb.conf.5.html

Το ίδιο αρχείο υπάρχει και στο λειτουργικό μας, στο οποίο έχουμε πρόσβαση με την εντολή

man smb.conf

Συνεχίζεται…

6 «Μου αρέσει»

Συνεχίζουμε με τα επόμενα δύο τμήματα του οδηγού, και απομένει κατόπιν μόνο ένα…

Τμήμα Τρίτο – Δημιουργία shares

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

Πρώτα αποφασίζουμε σε ποιο φάκελο θα βρίσκεται το share μας. Εμείς έχουμε δημιουργήσει ήδη, όπως έχουμε πει παραπάνω, τον φάκελο Shares στον δίσκο μας disk01 (βλ. παραπάνω κεφάλαιο Γ), ο οποίος ανήκει στον υπερχρήστη root. Μεταβαίνουμε στον φάκελο disk01 με την εντολή

cd /mnt/disk01

και βλέπουμε τα δικαιώματα με την εντολή

ll

Πρέπει λοιπόν καταρχήν να πάρουμε την ιδιοκτησία του φακέλου, με την εντολή chown (CHange OWNer) :

sudo chown dimix:dimix Shares

και επιβεβαιώνουμε την αλλαγή δίνοντας ξανά

ll

Μέχρι τώρα έχουμε μάθει πλέον τις βασικές εντολές πλοήγησης στο file system μέσω του terminal . Μέσα λοιπόν στον φάκελο Shares δημιουργούμε έναν άλλο φάκελο με την ονομασία MyDocsOnServer με την εντολή

mkdir MyDocsOnServer

και με την εντολή ll βλέπουμε ότι τα δικαιώματα του φακέλου που έχει δημιουργηθεί, σε αντίθεση με τους φακέλους που δημιουργούνται από τον root, είναι drwxrwxr-x ή αλλιώς 775 ή αλλιώς, έχει και το group owner δικαίωμα εγγραφής, ενώ οι τρίτοι δεν έχουν, όπως ακριβώς αναλύσαμε παραπάνω, στο κεφάλαιο Ε, σχετικά με την umask:

Αυτό δεν μας ενοχλεί αυτή τη στιγμή, διότι προς το παρόν θέλουμε, στο share που θα δημιουργήσουμε, να έχουμε πρόσβαση μόνο εμείς, αφού προορίζεται για προσωπικό backup – προσωπικό χώρο στον Server. Έτσι δεν αλλάζουμε κάτι, αλλά προχωρούμε στη δημιουργία του share.

Ανοίγουμε το αρχείο smb.conf με δικαιώματα root με την εντολή:

sudo nano /etc/samba/smb.conf

Προσθέτουμε στις global ρυθμίσεις

workgroup = WORKGPOUP
security = user

Δημιουργούμε ένα share με τις εξής ρυθμίσεις

[Dimix Documents]
comment = Dimix’s Documents
path = /mnt/disk01/Shares/MyDocsOnServer
browsable = yes
read only = no
guest ok = no
valid users = dimix

Αφού αποθηκεύσουμε και κλείσουμε το αρχείο με Ctrl + O, enter και Ctrl + X, ελέγχουμε με την εντολή testparm αν υπάρχει σφάλμα:

cd /etc/samba
testparm

Αν μας πει ότι “Loaded services file OK”, τότε όλα είναι εντάξει με τις ρυθμίσεις μας, τουλάχιστον από τυπικής πλευράς.

Επανεκκινούμε την υπηρεσία samba με την παρακάτω εντολή, ώστε να ενσωματωθούν οι ρυθμίσεις που θέσαμε προηγουμένως:

sudo systemctl restart smbd nmbd

Και στη συνέχεια από υπολογιστή Windows o διαχειριστής Dimix, αν έχουμε ακολουθήσει επακριβώς τον οδηγό μέχρι τώρα, συνδέεται στο συγκεκριμένο Share του Server χωρίς να δώσει ούτε username ούτε password, απλά πλοηγείται μόνο στο τοπικό δίκτυο. Και αυτό χωρίς καμία αλλαγή στις ρυθμίσεις ασφάλειας δικτύου, από πλευράς Windows:

Στη συνέχεια ο διαχειριστής Dimix έχει δημιουργήσει το αρχείο Test.txt:

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

Tip: Στα Windows 10, αν ο Server μας δεν φαίνεται στο Network, απλά πληκτρολογούμε το όνομά του στη γραμμή διεύθυνσης του File Explorer:

\\UBSERVER2004\

Από Linux, δίνουμε στη γραμμή διεύθυνσης του File Manager το πρωτόκολλο σύνδεσης smb ακολουθούμενο από το όνομα του Server μας και το όνομα του Share μας, εδώ π.χ. στον Thunar του XFCE:

smb://ubserver2004/dimix documents/

Τα ίδια βήματα ακολουθούμε για να δημιουργήσουμε παρόμοια Shares και για άλλους χρήστες. Π.χ. για τον user01 του Server μας, μέσα στον παραπάνω φάκελο Shares δημιουργούμε έναν ακόμα φάκελο με σχετικό όνομα, δίνουμε την ιδιοκτησία αυτού στον user01, και στο smb.conf δημιουργούμε ένα νέο share με ανάλογες ρυθμίσεις, στο οποίο όπου dimix βάζουμε user01 .

Τμήμα Τέταρτο – Το 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

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

Έτσι βλέπουμε ότι ο διαχειριστής Dimix αμέσως απέκτησε και το δικό του home share:

Στο επόμενο τμήμα, θα δούμε με ποιο τρόπο δημιουργούμε κοινόχρηστα shares μεταξύ χρηστών, οπότε και θα ολοκληρωθεί ο οδηγός αυτός…

6 «Μου αρέσει»

Συνεχίζουμε με το τελευταίο μέρος του οδηγού!

Τμήμα Πέμπτο – Κοινόχρηστα Shares

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

Έτσι, αν στο share που περιγράψαμε παραπάνω, με τις εξής ρυθμίσεις:

[Dimix Documents]
comment = Dimix’s Documents
path = /mnt/disk01/Shares/MyDocsOnServer
browsable = yes
read only = no
guest ok = no
valid users = dimix

αφαιρέσουμε τη ρύθμιση valid users, στο share θα έχουν πρόσβαση ανάγνωσης όλοι οι χρήστες τους οποίους έχουμε προσθέσει ως samba users (βλ. Τμήμα Πρώτο).

Το να δημιουργήσουμε όμως share στο οποίο θα έχουν δικαίωμα εγγραφής και τροποποίησης περισσότεροι χρήστες, δηλαδή share συνεργασίας όπου κάθε χρήστης θα μπορεί να τροποποιεί το περιεχόμενο του share, δεν είναι το ίδιο εύκολο. Αυτό διότι όπως αναφέραμε σε προηγούμενο σημείο, η samba δεν μπορεί να ξεπεράσει τις ρυθμίσεις και απαγορεύσεις των unix δικαιωμάτων, όποια ρύθμιση και να βάλουμε σε αυτή (βλ. Κεφάλαιο Ε).

Ακόμα δηλαδή και αν βάλουμε στο share τις εξής ρυθμίσεις:

create mask = 666
directory mask = 777

δηλώνοντας ότι επιθυμούμε όλοι ανεξαιρέτως οι χρήστες να έχουν δικαιώματα ανάγνωσης και εγγραφής, αυτό επηρεάζει μόνο τις απαγορεύσεις και περιορισμούς που θέτει ή δεν θέτει η samba, και όχι τις ρυθμίσεις των Unix δικαιωμάτων του λειτουργικού. Αυτές καθορίζονται όπως προαναφέραμε από την Umask, η οποία στην default ρύθμισή της, στο Ubuntu, είναι 022, και στην συνηθισμένη εξαίρεσή της που στην πράξη γίνεται κανόνας, 002 (βλ. Κεφάλαιο Ε). Οπότε στο εν λόγω share μας, τα αρχεία θα δημιουργούνται με δικαιώματα 664 και οι φάκελοι με δικαιώματα 775. Αυτό σημαίνει ότι όταν ένας χρήστης δημιουργεί ένα αρχείο ή φάκελο, ένας άλλος χρήστης που οι ρυθμίσεις samba θα του δίνουν δικαίωμα πρόσβασης και εγγραφής, στην πραγματικότητα δεν θα έχει δικαίωμα εγγραφής και τροποποίησης. Δεν θα πρέπει να ξεχνάμε ότι στην default ρύθμιση το primary group ενός χρήστη είναι το ίδιο με το όνομά του (owner = primary group, π.χ. dimix dimix), οπότε το group δεν προσφέρει ή αλλάζει τίποτα σε σχέση με τα δικαιώματα εγγραφής στο αρχείο ή τον φάκελο.

Για να ξεπεράσουμε το εμπόδιο αυτό, υπάρχουν διάφοροι τρόποι στρατηγικής προσέγγισης, που προτείνονται ανά τόπους στο διαδίκτυο. Ένας απλός αλλά εξαιρετικά επικίνδυνος, είναι να αλλάξουμε την umask σε 000, το οποίο όμως επηρεάζει όλο το λειτουργικό και όχι μόνο τα samba shares, και γι’ αυτό δεν το προτείνουμε.

Από τις διάφορες λύσεις που υπάρχουν, εμείς προκρίνουμε την κατά την άποψή μας πιο ασφαλή και σταθερή, με την ελάχιστη δυνατή παρέμβαση τόσο στις ρυθμίσεις των unix δικαιωμάτων όσο και στην samba.

Η κεντρική ιδέα είναι η εξής: Αλλάζουμε τις ρυθμίσεις του share με βάση ένα group και δίνουμε απεριόριστη πρόσβαση σε αυτό το group, διατηρώντας την απαγόρευση σε τρίτους, θέτουμε ως στόχο δηλαδή το 775 .

Ας το δούμε λοιπόν στην πράξη αναλυτικά.

Δημιουργούμε τον φάκελο του κοινόχρηστου Share, με το όνομα CommonShare .

cd /mnt/disk01/Shares
mkdir CommonShare
ll

Παρατηρούμε ότι owner και group owner είναι ο dimix και ότι ο φάκελος έχει δικαιώματα rwxrwxr-x, δηλαδή μόνο ο διαχειριστής dimix έχει δικαιώματα εγγραφής.

Αλλάζουμε τα δικαιώματα σε rwxrwxrwx (777), χρησιμοποιώντας το πρόγραμμα chmod (CHange MODe), με την εντολή

chmod 777 CommonShare
ll

Με τον τρόπο που πλέον γνωρίζουμε, προσθέτουμε το Share με το όνομα Collaboration στο smb.conf:

[Collaboration]
comment = Common Folder
path = /mnt/disk01/Shares/CommonShare
browsable = yes
read only = no
guest ok = no
create mask = 664
directory mask = 775

Από υπολογιστή Windows, ο χρήστης User01 δημιουργεί τον φάκελο TestFolder01 και το αρχείο TestFile01.txt:

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

Όπως θα έχετε καταλάβει, όπως είναι οι ρυθμίσεις μέχρι τώρα, κάθε χρήστης από τους samba users του server μας, δηλαδή τους dimix, user01 και user02, θα μπορεί να δημιουργεί τους δικούς του φακέλους και αρχεία μέσα στο ίδιο share, αλλά κανείς δεν θα μπορεί να τροποποιεί τα αρχεία του άλλου ή να γράφει μέσα στους φακέλους του.

Για παράδειγμα, ο χρήστης User02 επιχειρεί να δημιουργήσει ένα νέο αρχείο μέσα στον TestFolder01 και λαμβάνει το μήνυμα ότι δεν έχει άδεια να το κάνει:

Για να το αντιμετωπίσουμε λοιπόν αυτό, θα χρησιμοποιήσουμε ένα από τα ειδικά δικαιώματα στους φακέλους, που υπάρχουν στο Unix και που αναφέραμε αμυδρά στο κεφάλαιο Ε. Θα χρησιμοποιήσουμε το 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 και ορίζουμε ως μέλη του τους χρήστες user01, user02 και dimix (για να έχει και ο διαχειριστής μας πλήρη δικαιώματα), εκτελώντας διαδοχικά τις εξής εντολές:

sudo addgroup office
sudo adduser user01 office
sudo adduser user02 office
sudo adduser dimix office

Αλλάζουμε το group owner του φακέλου που περιέχει το share μας ( CommonShare )

cd /mnt/disk01/Shares
sudo chown :office CommonShare
ll

Θέτουμε σε αυτόν τον φάκελο το bit setgid με την εντολή

sudo chmod g+s CommonShare

Πλέον τα δικαιώματα στον εν λόγω φάκελο είναι

rwxrwsrwx

Όλα τα παραπάνω φαίνονται στην εικόνα:

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

Θέτουμε και στο share μας στο αρχείο smb.conf την ρύθμιση

force group = office

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

Tip: Ποτέ δεν ξεχνάμε, όπως έχουμε πει παραπάνω (Τμήμα Τρίτο), όποτε πραγματοποιούμε αλλαγές στο smb.conf , να επανεκκινούμε τον Samba Server με την εντολή:

sudo systemctl restart smbd nmbd

Πλέον, όταν σε υπολογιστή Windows ο χρήστης User02 δημιουργήσει τον φάκελο TestFolder2 και μέσα σε αυτόν, τον φάκελο TestFolder03 και το αρχείο TestFile02.txt:

βλέπουμε ότι όλοι αυτοί οι φάκελοι έχουν με τη σειρά τους το bit setgid τεθειμένο, και ό,τι δημιουργείται στο share ανήκει στο group office, επομένως όλα τα μέλη του group αυτού μπορούν να κάνουν ό,τι θέλουν στο share μας!

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

Mintux

14 «Μου αρέσει»

Συγχαρητήρια και πολλα μπράβο…Θα μπει σίγουρα στα bookmark μου ο οδηγός, πάντα ήθελα κάποια στιγμή να πειραματιστώ με οικιακό file server :wink: ερώτηση σε όποιον ξέρει, σε rasbery pie 4 μπορούμε να τον στήσουμε, για λόγους οικονομίας ρεύματος φυσικά :thinking:

2 «Μου αρέσει»

Ευχαριστώ! :slight_smile:
Φυσικά μπορεί να γίνει στο Raspberry, η διαδικασία είναι πιστεύω ακριβώς η ίδια, καθώς το Rasbian είναι Debian. Ο επόμενος στόχος μου είναι να παίξω και εγώ με ένα τέτοιο.
Στο Rasbian x86 που δοκίμασα πάντως πρόχειρα σε Live VPC δεν είδα διαφορές.

3 «Μου αρέσει»

Είσαι ωραίος!!! Εκπληκτική δουλειά!!!

1 «Μου αρέσει»

Δεν θελω να βαλω rasbian αλλα αυτο που εχεις στον οδηγο, ετσι σκετο χωρις UI…η απορια μου ειναι κυριως αποδοσης…αν ενα rasbery ειναι ικανο να τρεξει ικανοποιητικα ενα τετοιο setup , οπως αυτο του οδηγου σου :wink:

Νομίζω ότι η απάντηση στην ερώτησή σου συναρτάται με το πώς συνδέεται στο raspi το file storage το οποίο θα μοιράσεις με τη samba.

Όσον αφορά την απόδοση το Raspberry δεν έχει θέμα και μπορεί να κάνει πολλά περισσότερα. Μπορείς να βάλεις ένα Nextcloud ακόμα και στα μικρά μοντέλα. Εντάξει προφανώς δεν θα έχει την απόδοση ενός μεγάλου server, αλλά για ελαφρά χρήση ή για εκπαίδευση είναι μια χαρά.

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

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

Όπως είπε και ο @Asfodelus από πάνω, δεν έχω δει να υπάρχει επίσημο Rasbian χωρίς γραφικό περιβάλλον. Μπορείς όμως αφού το εγκαταστήσεις, να το ρυθμίσεις να ξεκινά μέχρι ένα σημείο, χωρίς να φορτώνει το γραφικό περιβάλλον. Οπότε θα είναι ακριβώς αυτό που ζητάς.
Γίνεται σίγουρα, το είχα κάνει παλιότερα σε Ubuntu.

Μαλλον σας μπερδεψα :stuck_out_tongue: θελω να βαλω σε rasberry το ubuntu server , οχι rasbian

:smiley: :smiley: :smiley:
Χα χα!
Σοβαρά τώρα, δυστυχώς αυτό που λες δεν γίνεται. Το Raspberry έχει arm επεξεργαστή, ενώ όλες οι διανομές για τις οποίες συζητάμε είναι x86. Άλλη αρχιτεκτονική επεξεργαστή, και εκεί σταματά το θέμα!

1 «Μου αρέσει»

To Ubuntu Server είναι ουσιαστικά ένα Debian, οπότε ισχύουν ακριβώς τα ίδια.