+++
title = 'SAMBA made easy\...'
date = '1998-02-01T00:00:00Z'
description = ''
author = 'Μιχάλης Καμπριάνης'
issue = ['Magaz 02']
issue_weight = 4
+++

----------------------------------------------------------------------------------------------------------------------------------------------------------------

*Για αυτό το δεύτερο τεύχος του Magaz σας ετοίμασα ένα case study. Πως μπορεί το Linux box που προφανώς έχετε, να επικοινωνήσει με τα Win 95 που έχουν οι
συνάδελφοι / φίλοι σας στον ίδιο χώρο (και προφανώς στο ίδιο ethernet).*

----------------------------------------------------------------------------------------------------------------------------------------------------------------

Ας μην μπερδευτούμε. Αυτό δεν είναι ένα HOW-TO (εξάλλου υπάρχει πολύ documentation για το SAMBA, σε αυτό θα αναφερθώ). Αυτό θέλω να είναι ένα dummy\'s guide.
Όχι, δεν θεωρώ κανένα dummy. Μόνο εμένα που πολλά από αυτά που γράφω με δυσκόλεψαν :-) Μία λύση είναι να στήσετε το πρωτόκολλο TCP/IP και στα Win95. Μετά με τα
γνωστά (Telnet, Ftp) μπορείτε να έχετε την ίδια σύνδεση με τα Win95 όπως και με τα άλλα Linux/Unix μηχανήματα. Για να κάνετε όμως mount τους δίσκους τους (και
να κάνουν αυτοί mount τους δικούς σας), χρειάζεται NFS. NFS server καθώς και NFS client έχετε στο Linuxακι σας. Τα ίδια προγράμματα για Win95 δεν υπάρχουν παρά
μόνο Shareware. Και η χρήση τους προϋποθέτει ρυθμίσεις στα μηχανήματα με Win95. Επειδή όμως εσείς είστε οι ειδήμονες και όχι οι Win95 users, ας δούμε πως
μπορείτε να έχετε σύνδεση, χωρίς πολλές παράξενες ρυθμίσεις στα Win95. Μπορείτε λοιπόν να χρησιμοποιήσετε το πρωτόκολλο για Peer-to-Peer σύνδεση που έχουν τα
Win95. Αυτό \"χρησιμοποιεί\" τις λέξεις SMB, NETBeui και NETBIOS. Το τι είναι τι, είναι λίγο μπερδεμένο. Όπως λέει το documentation του Samba, το NETBeui είναι
ένα low-level πρωτόκολλο, και το NetBIOS είναι ένα high-level πρωτόκολλο, που μπορεί να δουλέψει είτε πάνω από TCP/IP, ή πάνω από NETBeui, ή ακόμα και πάνω από
IPX/SPX. Η υλοποίηση που θα δούμε, χρησιμοποιεί το TCP/IP ως underlaying layer. Το πρόγραμμα που σας δίνει αυτή τη δυνατότητα λέγεται
[Samba](http://www.dlr.de/fresh/linux/src/samba-1.9.18.tar.gz). Οι ρυθμίσεις του είναι εύκολες, αν γίνουν με τη σωστή σειρά. (Εδώ υποθέτουμε ότι έχουν ρυθμιστεί
σωστά τα TCP/IP στο Linux και στα Windows 95).

Στο σημείο αυτό θα ήθελα να ευχαριστήσω το [Χρήστο Ρικούδη](mailto:ricudis@paiko.gr), ο οποίος μου έλυσε πολλές απορίες κατά τη διάρκεια μιας αντιπαράθεσης που
είχαμε πρόσφατα στην linux-greek-users λίστα. Χρήστο ευχαριστώ, ελπίζω να τα κατάλαβα επιτέλους :-)

**1. Στάδια εγκατάστασης\...**
--------------------------------------------------------

**2. Έλεγχος σωστής λειτουργίας\...**
---------------------------------------------------------------

**3. Χρήση**
--------------------------------------


### [1. Στάδια εγκατάστασης\...]{#s1}

-   Θα χρειαστεί να ξαναδημιουργήσουμε τον πυρήνα (recompile του kernel), ενεργοποποιώντας στα Filesystems, τα SMB support και SMB Win95 bug workaround. Καλό θα
    ήταν επίσης να ενεργοποιηθεί το Win95 vfat. Αυτό δεν είναι για να δούνε τα Win95 μηχανήματα τους δίσκους μας, αλλά για να δούμε εμείς τους δικούς τους. Θα
    επανέλθουμε σε αυτό αργοτερα.
-   Κάνουμε extract το [Samba](http://www.dlr.de/fresh/linux/src/samba-1.9.18.tar.gz) στο \"smbtar\" directory. Στο Makefile που βρίσκεται στο directory
    \"smbtar\"/source πρέπει (αν θέλουμε να μην κάνουμε πολλές ρυθμίσεις αργότερα) να δηλώσουμε ως workgroup αυτό στο οποίο θέλουμε να ανήκουμε (δηλαδή αυτό στο
    οποίο ανήκουν οι πιο συχνά χρησιμοποιούμενοι PC). Επίσης ορίζουμε το default guest account, το οποίο εξ ορισμού είναι το nobody (μάλλον όχι και τόσο καλή
    ιδέα, όπως λέει και το ίδιο το Makefile, αφού αυτό το account στα Unix μηχανήματα δεν έχει δυνατότητα εκτύπωσης). Το default guest account είναι αυτό που
    χρησιμοποιείται όταν κάποιος συνδεθεί στο μηχάνημά μας χωρίς username και password. Προσοχή, πρέπει να υπάρχει αυτό το account στο μηχάνημά μας (ένας
    έλεγχος στο /etc/passwd θα σας επιβεβαιώσει την ύπαρξή του ή όχι).
-   Οι υπόλοιπες ρυθμίσεις στο Makefile (directories, compiler κλπ) είναι θέμα του κάθε μηχανήματος. Έστω ότι ορίζουμε εγκατάσταση στο \"smbinst\" directory.
-   Μετά τα (τυπικά) make, make install, έχουμε τα αρχεία που χρειαζόμαστε στο directory που ορίσαμε, εκτός από το smb.conf, το οποίο δεν υπάρχει και πρέπει να
    δημιουργήσουμε. Για αρχή, είναι αρκετό να αντιγράψουμε το smb.conf από το directory \"smbtar\"/examples/simple στο \"smbinst\"/lib, και να αλλάξουμε το
    guest account (το οποίο έχει ένα όνομα pcguest), σε αυτό που δηλώσαμε στο Makefile.
-   Από το \"smbinst\"/bin, εκτελούμε to testparm, το οποίο ελέγχει το \"smbinst\"/lib/smb.conf για λάθη. Φυσιολογικά δεν πρέπει να υπάρχουν λάθη, οπότε
    μπορούμε να συνεχίσουμε. Αν υπάρχουν όμως λάθη, μπορούμε απλά να κάνουμε comment τις γραμμές που μας δημιουργούν πρόβλημα. Αν χρειαζόμαστε όμως αυτές τις
    υπηρεσίες, πρέπει να βρούμε που είναι το λάθος.


### [2. Έλεγχος σωστής λειτουργίας\...]{#s2}

-   Στο directory \"smbinst\"/bin υπάρχουν τα αρχεία nmbd και smbd. Αυτά είναι οι servers. Το μεν nmbd είναι ο NETBios Name server ενώ το smbd είναι ο SMB
    server. Αυτοί οι servers, πρέπει να αρχίζουν όποτε καλούνται για να έχουμε πάντα σύνδεση. Συνεπώς πρέπει να τους προσθέσουμε στο γνωστό /etc/inetd.conf,
    όπου ήδη υπάρχουν (ως comments) οι απαραίτητες γραμμές. Αν δεν υπάρχουν, είναι οι εξής:

        netbios-ssn     stream  tcp     nowait  root    "smbinst"/bin/smbd  smbd
        netbios-ns      dgram   udp     wait    root    "smbinst"/bin/nmbd  nmbd

-   Καιρός να δοκιμάσουμε άλλη μία εντολή από το \"smbinst\"/bin. Γράφουμε

        nmblookup -B <linux-name> __SAMBA__

    Το αποτέλεσμα πρέπει να είναι η IP διεύθυνση του μηχανήματος.

        π.χ. 192.168.0.2 __SAMBA__ 

    Αν δεν πάρουμε αυτή την απάντηση, κάτι δεν πάει καλά με το nmbd (NETBios nameserver). Aν οι αναφορές στο inetd.conf είναι όπως γράφονται παραπάνω, δεν
    πρέπει να έχουμε πρόβλημα. Ένα συνηθισμένο πρόβλημα είναι ότι το port 137 είναι κατηλειμμένο. Ας το εξακριβώσουμε. Με την εντολή netstat -a \| grep netbios
    μπορούμε να ελέγξουμε ότι πράγματι το netbios-ssn είναι σε LISTEN mode, καθώς και ότι τα netbios-ns και netbios-dgm είναι ενεργοποιημένα (αυτά δεν πρέπει να
    είναι σε LISTEN mode).

        tcp        0      0 *:netbios-ssn           *:*                     LISTEN
        udp        0      0 *:netbios-ns            *:*
        udp        0      0 *:netbios-dgm           *:*             

    Αν κάποια γραμμή από τις παραπάνω λείπει, πράγματι μία από τις υπηρεσίες δεν λειτουργεί. Γι\' αυτό ελέγχουμε το αρχείο /etc/services στο οποίο πρέπει να
    υπάρχουν δηλωμένα τα sockets στα οποία ακούν αυτοί οι daemons.

        netbios-ns      137/tcp                         # NETBIOS Name Service
        netbios-ns      137/udp
        netbios-dgm     138/tcp                         # NETBIOS Datagram Service
        netbios-dgm     138/udp
        netbios-ssn     139/tcp                         # NETBIOS session service
        netbios-ssn     139/udp                                

    Με ένα kill -HUP \"pid-of-inetd\" υποχρεώνουμε τον inetd να διαβάσει ότι αλλαγές κάναμε στα /etc/inetd.conf και /etc/services. Αν δοκιμάσουμε τώρα να
    γράψουμε

        nmblookup -B "win95-pc" '*'

    πρέπει να δούμε την IP διεύθυνση του WIN95 μηχανήματος.

        π.χ. 192.168.0.1 * 

Tip \#1: Αν όλα τα παραπάνω πήγαν καλά, είμαστε σίγουροι ότι το nmdb (Netbios name-server) δουλεύει σωστά. Αν δεν δουλεύει σωστά, θα μπορούμε πάλι να
χρησιμοποιήσουμε το SMB αλλά με κάποιους περιορισμούς (στη χρήση των ονομάτων των μηχανημάτων). Εν ολίγοις, αν πρόκειται να δουλέψετε μόνο με IP διευθύνσεις,
δεν το χρειάζεστε.

Tip \#2: Αν κάνετε accounts στο Linux, με username τα ονόματα των Win95 μηχανημάτων, το SMB θα ζητάει και password (το password του account) για τη σύνδεση από
τα Win95 στο Linux. To εύκολο σε αυτό είναι ότι ο χρήστης μπορεί να κάνει login στα Windows95 με το username του account που έχει στο Linux.

Tip \#3: Δεν θα ήταν άσχημο εδώ, να ρίξουμε μια ματιά στο /etc/hosts.allow για να μην κάνουμε διαθέσιμους τους δίσκους μας σε όλο το Internet :-)

### [3. Χρήση]{#s3}

-   Τώρα που έχουμε σωστά στημένους τους daemons, καιρός να δούμε πως θα χρησιμοποιήσουμε την υπηρεσία αυτή. Ένα άλλο αρχείο που υπάρχει στο \"smbinst\"/bin
    είναι το smbclient, το οποίο μας δίνει τα shares που υπάρχουν σε συγκεκριμένο host. Η σύνταξή του στην απλή της μορφή είναι smbclient -L \"hostname\" και οι
    πληροφορίες που δίνει είναι αρκετές: Domain, OS, Server, User, Workgroup, Shares, όλα στα χέρια μας. Η αλήθεια είναι ότι ήδη ξέρουμε τα Domain, OS, Server,
    User και Workgroup (αφού εμείς τα ορίσαμε) αλλά είναι καλό να δίνονται αυτές οι πληροφορίες για troubleshooting. Τα shares τα οποία αναφέρονται είναι μία
    καινούρια πληροφορία, η οποία έρχεται από το αρχείο \"smbinst\"/lib/smb.conf. Ήρθε λοιπόν η ώρα να \"πειράξουμε\" το αρχείο αυτό.Αυτό το αρχείο αποτελείται
    από δηλώσεις, χωρισμένες σε sections. Το section \"global\" έχει τις επιλογές:\
    browsable = {yes/no} αν θα μπορεί κάποιος να δει το PC μας από το Network Neighborhood. Για να δουλέψει αυτό, πρέπει να δουλεύει σωστά το nmbd.\
    printing = {sysv/bsd/aix} ανάλογα με το πως έχουμε στήσει την υπηρεσία printing στο μηχάνημά μας (για Linux με ή χωρίς /etc/printcap, η επιλογή είναι bsd,
    εκτός αν έχετε εσείς αλλάξει κάτι).\
    printcap name = {/etc/printcap} μόνο για bsd, το full path για το αρχείο printcap.\
    load printers = {yes/no} αν θα υπάρχει υπηρεσία εκτύπωσης από τα Win95 μηχανήματα.\
    guest account = {guest} Το account που δηλώσαμε στο Makefile (στάδιο 2), το οποίο ανταποκρίνεται σε οποιονδήποτε συνδέεται στο PC μας χωρίς account. Πρέπει
    αυτό το account να υπάρχει στο μηχάνημα (συνήθως χωρίς δυνατότητα login και με πολύ λίγα δικαιώματα).\
    log file = {\"smbinst\"/log.%m} μία επιλογή για να γίνεται διαφορετικό logging για κάθε μηχάνημα που συνδέεται (%m).\
    lock directory = {\...} share modes = yes Αυτά τα δύο πρέπει να οριστούν αν θέλετε πολλοι χρήστες να χρησιμοποιούν τα ίδια αρχεία. Το lock directory πρέπει
    να είναι world readable.\
    Το section \"Homes\" έχει τις επιλογές:\
    comment = {\...} Το όνομα με το οποίο θα εμφανίζεται το home directory του κάθε χρήστη στον υπολογιστή του (στο Network Neghborhood).\
    browsable = {yes/no} Όπως και στο section global. Μπορεί να γίνει και comment, για να χρησιμοποιηθούν οι ρυθμίσεις του global\
    read only = {yes/no} Αυτονόητο\
    create mode = {\...} Default Mask για νέα αρχεία (όχι umask, όπως σε standard Unix)\
    Το section \"printers\" έχει τις επιλογές\
    comment = {\...} Όπως ανωτέρω\
    browsable = {yes/no} Όπως ανωτέρω\
    printable = {yes/no} Δυνατότητα εκτύπωσης\
    public = {yes/no} αν θα μπορούν να έχουν δυνατότητα και guests (εκτός από normal users).\
    Για τα ανωτέρω sections, υπάρχουν και άλλες επιλογές, λιγότερο συχνά χρησιμοποιούμενες. Η ανάλυσή τους θα ήθελε πολύ χρόνο, οπότε\... man smb.conf Επίσης,
    καλό θα ήταν να προστεθεί ένα section \"tmp\" για άτομα χωρίς account.

         "tmp"
           comment = Temporary file space
           path = /tmp
           read only = yes
           public = yes  

    To νέο smb.conf θα διαβαστεί την επόμενη φορά που θα ξεκινήσει ο smbd.

-   Το εκτελέσιμο \"smbinst\"/bin/smbstatus μας δίνει τις \"ανοιχτές\" συνδέσεις Το εκτελέσιμο \"smbinst\"/bin/smbrun χρησιμοποιείται από το smbd. Το εκτελέσιμο
    \"smbinst\"/bin/smbtar έχει ακριβώς την ίδια χρήση όπως το tar, αλλά για SMB shares.

-   Για να κάνετε και εσείς mount τα shares (δίσκους ή directories από Win95) θα χρειαστείτε το πακέτο
    [smbfs](ftp://ftp.gwdg.de/pub/linux/misc/smbfs/smbfs.tgz), ενώ για να τυπώσετε σε SMB shared printer, θα χρειαστείτε το \"smbinst\"/bin/smbprint. Με το
    πακέτο smbfs, τα πράγματα είναι απλά. Αυτό, μετά το compile θα σας δώσει δύο αρχεία: smbmount και smbumount. Η χρήση τους είναι η αυτονόητη:

        smbmount (smbumount) //"win95"/"share" "mount-point" [options]

    Συνήθως δεν χρειάζονται options, αλλά ένα smbmount -h θα σας δείξει τις πιθανές επιλογές. Το smbprint ωστόσο, δεν είναι εκτελέσιμο αλλά ένα script το οποίο
    πρέπει εμείς να φτιάξουμε σύμφωνα με το δίκτυό μας. Νομίζω ότι οι οδηγίες που δίνονται στο αρχείο (ως comments) είναι πολύ κατατοπιστικές, οπότε δεν θα
    ασχοληθώ μια που το καλύτερο που μπορώ να κάνω είναι μια\... μετάφραση.

Σίγουρα υπάρχουν πολλά ακόμα πράγματα σχετικά με το Samba. Αυτό που προσπάθησα να κάνω είναι να δείξω πως \"στήνουμε και τρέχουμε\" ένα Samba server-client στο
Linuxάκι μας. Το σημαντικό βημα όμως, το οποίο θα πρέπει να κάνετε μόνοι σας, είναι το γνωστό \"finetuning\". Βελτιστοποίηση της λειτουργίας (και ασφάλειας)
αυτού του server. Καλή τύχη.

