Sunday, October 24, 2010

FreeBSD Samba Domain Controller!

Εδώ και αρκετό καιρό είχα αποφασίσει να ξεφορτωθώ το Windows 2003 Server του δεύτερου σχολικού μας εργαστηρίου. Ο λόγος αρκετά απλός: είναι ένα μηχάνημα με οθόνη, πληκτρολόγιο το οποίο αν και παρέχει τις υπηρεσίες του στο δίκτυο των Windows του εργαστηρίου χρησιμοποιείται επίσης και ως κανονικός σταθμός εργασίας, συνήθως από τον όποιο καθηγητή διδάσκει, με όλα τα προβλήματα που συνεπάγεται κάτι τέτοιο.


Το συγκεκριμένο εργαστήριο είχε και ένα debian server σε εντελώς γυμνή μορφή (motherboard, τροφοδοτικό, δίσκος μέσα στο rack με τα δικτυακά). Το συγκεκριμένο μηχάνημα εξυπηρετούσε το debian το οποίο ήταν dual boot στο εργαστήριο, ως NIS/NFS server. Με την φετινή επανεγκατάσταση του εργαστηρίου, τα μηχανήματα δεν είναι πλέον dual boot (αν και έχει μείνει χώρος στους δίσκους αν θελήσουμε να το κάνουμε αργότερα). Όλα τα μαθήματα που σχετίζονται με *NIX διδάσκονται στο FreeBSD XDMCP εργαστήριο μας. Το μηχάνημα αυτό λοιπόν περισσεύει και θα μπορούσε να γίνει άριστος Domain Controller.


Θα μπορούσα φυσικά να εγκαταστήσω τον (αγορασμένο) Windows 2003 Server σε αυτό το μηχάνημα, αλλά γιατί; Σκέφτηκα ότι δεν έχει κάτι ιδιαίτερο να μου προσφέρει: το μόνο που χρειάζομαι είναι SMB file sharing, Domain login και roaming profiles. Κάτι το οποίο μπορεί να γίνει με το γνωστό μας Samba. Διαβάστε λοιπόν πως να κάνετε το FreeBSD Server σας Windows Domain Controller!



Εγκατάσταση Samba


Πολύ απλή ιστορία: Απλά εγκαταστήστε το port net/samba34. Χρησιμοποίησα τις παρακάτω επιλογές κατά τη μεταγλώττιση (επιλογή στο διάλογο config που εμφανίζεται):

WITHOUT_LDAP=true
WITHOUT_ADS=true
WITHOUT_CUPS=true
WITH_WINBIND=true
WITHOUT_SWAT=true
WITHOUT_ACL_SUPPORT=true
WITHOUT_AIO_SUPPORT=true
WITHOUT_FAM_SUPPORT=true
WITHOUT_SYSLOG=true
WITHOUT_QUOTAS=true
WITHOUT_UTMP=true
WITHOUT_PAM_SMBPASS=true
WITHOUT_DNSUPDATE=true
WITHOUT_AVAHI=true
WITHOUT_EXP_MODULES=true
WITH_POPT=true
WITHOUT_MAX_DEBUG=true
WITHOUT_SMBTORTURE=true


Δεν έχω ανάγκη για LDAP και ούτε για CUPS καθώς το εργαστήριο δεν έχει εκτυπωτή. Αντίθετα ενεργοποίησα το Winbind (WINS server) γιατί σε προηγούμενες εμπειρίες μου με αντίστοιχα πειράματα είχα προβλήματα όταν έλειπε. Με την εγκατάσταση του Samba server χρειάζεται να προσθέσουμε στο /etc/rc.conf:

samba_enable="YES"
winbindd_enable="YES"


Ένα απλό αρχείο για το configuration είναι το παρακάτω. Αποθηκεύστε το στο /usr/local/etc/smb.conf:

#======================= Global Settings =====================================
[global]
workgroup = THEDOMAIN
server string = THESERVER (SMB)
security = user
log file = /var/log/samba34/log.%m
max log size = 50
passdb backend = tdbsam
os level = 35
domain master = yes
preferred master = yes
domain logons = yes
logon path = \\%L\Profiles\%U
logon drive = H:
wins support = yes


#============================ Share Definitions ==============================
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
map hidden = yes
create mask = 0755

[netlogon]
comment = Network Logon Service
path = /usr/local/samba/lib/netlogon
guest ok = yes
admin users = root, sonic
writable = no

[Profiles]
path = /usr/local/samba/profiles
read only = no
browseable = no
guest ok = yes


Ξεκινήστε την υπηρεσία δίνοντας:

# /usr/local/etc/rc.d/samba start


Δημιουργία Χρηστών


Για να προσθέσετε ένα χρήστη στο Samba server, θα πρέπει να διαθέτει UNIX account. Χρησιμοποιήστε το adduser script (ή την pw αν προτιμάτε) για να προσθέσετε έναν. Στο παράδειγμα μας, έστω ότι έχουμε προσθέσει το χρήστη student. Μπορείτε να του δώσετε ως shell το nologin. Για να τον προσθέσετε στο Samba server, δώστε:

# pdbedit -a -u student


Προσθέστε το χρήστη root καθώς και το δικό σας λογαριασμό στο Samba server:

# pdbedit -a -u root
# pdbedit -a -u sonic


Για όλους αυτούς τους λογαριασμούς θα χρειαστεί να δώσετε password. Δεν είναι απαραίτητο να είναι ίδιος με το UNIX password.

Δημιουργήστε ένα group ntadmins στο οποίο θα βάλετε το δικό σας account και το root. Έτσι θα μπορείτε να διαχειρίζεστε ως domain admin τα μηχανήματα. Δημιουργήστε επίσης ένα group users στο οποίο θα προσθέσετε όλους τους απλούς χρήστες των windows. Μπορείτε να χρησιμοποιήσετε την εντολή pw ή το sysinstall για να προσθέσετε αυτά τα groups εύκολα. Αμέσως μετά:

# pw groupmod ntadmins -m sonic,root
# pw groupmod users -m student


Και τώρα το σημαντικό: Θα πρέπει το group ntadmins να αντιστοιχισθεί στους Domain Admins του Windows network. Αντίστοιχα, θα πρέπει να γίνει αντιστοίχιση του group users στους Domain Users:

# net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d
# net groupmap add ntgroup="Domain Users" unixgroup=users rid=513 type=d


Τέλος, δημιουργήστε τους καταλόγους που απαιτούνται για τα logon scripts και τα profiles των χρηστών:

# mkdir -p /usr/local/samba/lib/netlogon/scripts
# mkdir -p /usr/local/samba/profiles


Δημιουργία Λογαριασμών Μηχανημάτων


Δημιουργήστε το group machines μέσω του pw ή του sysinstall. Θα πρέπει να δημιουργήσετε ένα λογαριασμό για κάθε μηχάνημα που θα ανήκει στο domain. Παρακάτω δείχνουμε ένα παράδειγμα μέσω του adduser, όπου προσθέτουμε το μηχάνημα PC1:

# adduser

Username: PC1$
Full name: Workstation 1
Uid (Leave empty for default):
Login group [PC1$]: machines
Login group is machines. Invite PC1$ into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash rbash nologin) [sh]: nologin
Home directory [/home/PC1$]: /dev/null
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]: yes
Lock out the account after creation? [no]:
Username : PC1$
Password :
Full Name : Workstation 1
Uid : 2038
Class :
Groups : machines
Home : /dev/null
Home Mode :
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes


Καθώς βλέπετε, στο λογαριασμό του μηχανήματος πρέπει να προσθέσουμε στο όνομα ένα $. Έπειτα προσθέτουμε το λογαριασμό αυτό στη βάση δεδομένων του Samba server, αλλά εδώ χωρίς το $:

# pdbedit -a -m PC1


Τελικές ρυθμίσεις


Στον κατάλογο profiles, δημιουργήστε τον κατάλογο που θα αποθηκεύσει τις ρυθμίσεις του λογαριασμού student:

# mkdir -p /usr/local/samba/profiles/student
# chown -R student:users /usr/local/samba/profiles/student


Στο μηχάνημα Windows (PC1 στο παράδειγμα μας), κάντε login ως τοπικός administrator και χρησιμοποιήστε την τυπική διαδικασία για να δηλώσετε το μηχάνημα ως μέλος του domain. Συνίσταται επίσης να ενεργοποιήσετε το Wins resolution από τις ρυθμίσεις δικτύου και να δηλώσετε ως wins server το IP του server σας. Μια καλή ιδέα είναι επίσης να ενεργοποιήσετε το DNS και να ρυθμίσετε το FreeBSD σας και ως DNS server.

Μετά την επιτυχή είσοδο του μηχανήματος στο domain, κάντε login ως student. Το προφίλ του λογαριασμού θα αποθηκευθεί στο /usr/local/samba/profiles/student. Μετά την επιτυχή πρώτη είσοδο και ρύθμιση του προφίλ, μπορείτε να το κλειδώσετε αν θέλετε (mandatory profile):

# cd /usr/local/samba/profiles/student
# mv NTUSER.DAT NTUSER.MAN


Χρησιμοποιήστε την ίδια διαδικασία για να προσθέσετε όσα άλλα μηχανήματα και χρήστες χρειάζεστε. Συγχαρητήρια, έχετε ένα Windows Domain Controller χωρίς ιούς! Τυχαίο;

No comments: