💾 Archived View for magaz.hellug.gr › 02 › 04_smbconf › index.gmi captured on 2024-08-25 at 00:21:48. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
Μιχάλης Καμπριάνης Φεβ 1998
Για αυτό το δεύτερο τεύχος του 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[1]. Οι ρυθμίσεις του είναι εύκολες, αν γίνουν με τη σωστή σειρά. (Εδώ υποθέτουμε ότι έχουν ρυθμιστεί σωστά τα TCP/IP στο Linux και στα Windows 95).
1: http://www.dlr.de/fresh/linux/src/samba-1.9.18.tar.gz
Στο σημείο αυτό θα ήθελα να ευχαριστήσω το Χρήστο Ρικούδη[2], ο οποίος μου έλυσε πολλές απορίες κατά τη διάρκεια μιας αντιπαράθεσης που είχαμε πρόσφατα στην linux-greek-users λίστα. Χρήστο ευχαριστώ, ελπίζω να τα κατάλαβα επιτέλους :-)
1. Στάδια εγκατάστασης...
2. Έλεγχος σωστής λειτουργίας...
3. Χρήση
3: http://www.dlr.de/fresh/linux/src/samba-1.9.18.tar.gz
Στο 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 :-)
Τώρα που έχουμε σωστά στημένους τους 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[4], ενώ για να τυπώσετε σε SMB shared printer, θα χρειαστείτε το "smbinst"/bin/smbprint. Με το πακέτο smbfs, τα πράγματα είναι απλά. Αυτό, μετά το compile θα σας δώσει δύο αρχεία: smbmount και smbumount. Η χρήση τους είναι η αυτονόητη:
4: ftp://ftp.gwdg.de/pub/linux/misc/smbfs/smbfs.tgz
smbmount (smbumount) //"win95"/"share" "mount-point" [options]
Συνήθως δεν χρειάζονται options, αλλά ένα smbmount -h θα σας δείξει τις πιθανές επιλογές. Το smbprint ωστόσο, δεν είναι εκτελέσιμο αλλά ένα script το οποίο πρέπει εμείς να φτιάξουμε σύμφωνα με το δίκτυό μας. Νομίζω ότι οι οδηγίες που δίνονται στο αρχείο (ως comments) είναι πολύ κατατοπιστικές, οπότε δεν θα ασχοληθώ μια που το καλύτερο που μπορώ να κάνω είναι μια... μετάφραση.
Σίγουρα υπάρχουν πολλά ακόμα πράγματα σχετικά με το Samba. Αυτό που προσπάθησα να κάνω είναι να δείξω πως "στήνουμε και τρέχουμε" ένα Samba server-client στο Linuxάκι μας. Το σημαντικό βημα όμως, το οποίο θα πρέπει να κάνετε μόνοι σας, είναι το γνωστό "finetuning". Βελτιστοποίηση της λειτουργίας (και ασφάλειας) αυτού του server. Καλή τύχη.