Objectiu:
Aquest tutorial explica com instal·lar samba3 per a que realitzi les funcions servidor de compartició de fitxers i a més gestioni el domini NT de l’organització. Aquest serà sens dubte el tutorial més complex. Sovint sembla que no se sap per què s’estan realitzant certes opcions. La documentació a la pàgina de samba és molt correcta, però com l’aplicació té tantissimes opcions sovint és facil perdre’s.
L’objectiu d’aquest tutorial és múltiple:
- disposar d’una distribució Ubuntu 7.04 Server
- muntar un domini NT amb nom DOMINI
- permetre als usuaris autenticar vers un servidor LDAP
- compartir carpetes d’usuari
Per què Samba?
Des de fa força anys la integració Windows i Linux ha esta motiu de debat. Samba permet que els clients Windows vegin les màquines Linux com una màquina més d’una xarxa Windows. La rendibilitat és excel·lent, les opcions són molt variades i la flexibilitat és sensacional.
Obtenció del software necessari:
Partim de la base que disposem d’un servidor Ubuntu 7.04 Server que executa un servei de noms bind9 i un servei de directori LDAP. És molt recomanable seguir els tutorials d’aquesta mateixa pàgina abans de continuar:
És molt probable que aquest tutorial funcioni sobre d’altres distribucions, però ha estat provat principalment sobre Ubuntu. Utilitzarem la eina apt per aconseguir tot el software necessari. S’ha entrat al sistema utilitzant l’usuari root. Per començar actualitzem les nostres fonts de apt.
$ apt-get update
Els primer que instal·larem serà Samba i Winbind. Aquest és el software del servidor samba i del gestor de connexions des d’un entorn Windows. La comanda per instal·lar-los és:
$ apt-get install samba winbind ldap-utils
La instal·lació és directa, no s’ha de configurar res en aquest moment. Tots els arxius d’instal·lació els trobarem a la carpeta /etc/samba. Concretament el que ens interessa modificar i adpatar a les nostres necessitats és el smb.conf. Si es miren d’altres tutorials per Internet es veurà que tots s’assemblem però tots són diferents, no hi ha una única solució per muntar aquests serveis.
Configuració de LDAP per acceptar objectes de Samba:
Ens interessa que el nostre sistema pugui autenticar amb LDAP, és més, és un requeriment indispensable. El primer que farem doncs és informar al nostre servei LDAP sobre els nous tipus d’objectes que haurà d’acceptar. S’ha de modificar l’arxiu /etc/ldap/slapd.conf. Executarem el següent:
$ cd /etc/ldap/schema $ cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz . $ gunzip samba.schema.gz $ pico /etc/ldap/slapd.conf
La última comanda entra a modificar la configuració de l’LDAP. Assegurem-nos que existeixin les següents línies:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/samba.schema
Recomanació: Per tal de que els usuaris de la xarxa no puguin llegir certs atributs de la base de dades de l’LDAP es recomana d’afegir el següent a la seguretat de l‘slapd.conf:
access to attr=userPassword, shadowLastChange, sambaLMPassword, sambaNTPassword by dn="cn=admin,dc=domini,dc=local" write by anonymous auth by self write by * none
A més l’arxiu /etc/ldap/ldap.conf hauria de ser:
HOST 127.0.0.1 BASE dc=domini, dc=local
La configuració de l’LDAP ja no l’haurem de modificar més. Podem reiniciar el servei:
$ /etc/init.d/slapd restart
Passem ara a configurar el nostre sistema per a que pugui autenticar en LDAP, això és l’Ubuntu, no el Samba, de moment. Haurem d’instal·lar alguns paquets més:
$ apt-get install libnss-ldap libpam-ldap
Si configurem correctament aquests paquets durant la instal·lació és possible que no els haguem de tocar més. Respondrem el següent a les preguntes:
- URI del servidor LDAP: ldap://adreça_ip_del_servidor_ldap
- Nom distingit de la base de la cerca: dc=domini,dc=local
- Versió de LDAP a utilitzar: 3
- Compte LDAP per al superusuari:cn=admin,dc=domini,dc=local
- Contrasenya del compte LDAP del superusuari: secret
- Make local root database admin: Yes
- La base de dades requereix autenticació d’accés?: No
- LDAP account for root: cn=admin,dc=domini,dc=local
- Contrasenya del compte LDAP del superusuari: secret
Ja està, els arxius de configuració d’aquests paquets són:
- libnss-ldap.conf
- libnss-ldap.secret
- pam_ldap.conf
- pam_ldap.secret
Primer, modifiquem l’arxiu pam_ldap.conf. Ens interessa que sapiga on trobar els usuaris i demés en l’LDAP. Modifiquem el següent:
host adreça_ip_del_servei_LDAP base dc=domini,dc=local scope sub pam_password md5 nss_base_passwd ou=Users,dc=domini,dc=local?one nss_base_passwd ou=Computers,dc=domini,dc=local?one nss_base_shadow ou=Users,dc=domini,dc=local?one nss_base_group ou=Groups,dc=domini,dc=local?one ssl no
A més també modifiquem la politica del sistema a l’hora de gestionar l’entrada al sistema. L’arxiu a modificar és /etc/nsswitch.conf. Ha de presentar el següent:
passwd: files ldap group: files ldap shadow: files ldap
Finalment, per que el sistema pugui autenticar amb LDAP configurem els moduls PAM:
$ cd /etc/pam.d
En aquest directori hi ha tota una serie d’arxius que comencen per common-*. Haurien de quedar de la següent manera:
common-auth:
auth required pam_env.so auth sufficient pam_unix.so likeauth nullok auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so
common-account:
account required pam_unix.so account sufficient pam_ldap.so
common-password:
password sufficient pam_unix.so nullok use_authtock md5 shadow password sufficient pam_ldap.so password required pam_deny.so
common-session:
session required pam_limits.so session required pam_unix.so session optional pam_ldap.so
Ara ja podem autenticar amb LDAP en aquest sistema, encara, però no tenim usuaris a la base de dades LDAP per provar-ho. Afegirem usuaris aviat.
En aquest punt, tot i no tenir molt clar que s’ha fet 😉 tenim un sistema preparat per autenticar amb LDAP.
Configuració del Samba:
El següent pas és començar a configurar el samba. Mostro a continuació el contingut de l’arxiu /etc/samba/smb.conf i el comentarem:
[global] workgroup = DOMINI netbios name = PDC-DOMINI security = user username map = /etc/samba/smbusers enable privileges = yes server string = PDC-DOMINI encrypt passwords = yes ldap passwd sync = yes log level = 0 syslog = 0 log file = /var/log/samba/log.%m max log size = 100000 Dos charset = 850 Unix charset = ISO8859-1 domain logons = Yes domain master = Yes preferred master = Yes local master = Yes os level = 65 wins support = yes passdb backend = ldapsam:ldap://adreça_ip_del_servei_LDAP/ ldap admin dn = cn=admin,dc=domini,dc=local ldap suffix = dc=domini,dc=local ldap group suffix = ou=Groups ldap user suffix = ou=Users ldap machine suffix = ou=Computers add user script = /usr/sbin/smbldap-useradd -m "%u" delete user script = /usr/sbin/smbldap-userdel "%u" add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u" add group script = /usr/sbin/smbldap-groupadd -p "%g" delete group script = /usr/sbin/smbldap-groupdel "%g" add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
Segons el que es mostra en la secció global estem dient-li al samba que gestioni un domini NT que s’anomenarà DOMINI. A més li diem que la base de dades d’usuari la té en un backend LDAP. A continuació afegeixo la resta de l’arxiu smb.conf, inclou les carpetes que compartirem com a gestor de fitxers:
[homes] path = /home/%U browseable = no read only = no [public] path = /home/samba/public read only = no public = yes valid users = "@Domain Users" [profiles] path = /home/samba/profiles read only = no create mask = 0600 directory mask = 0700 browseable = No guest ok = Yes profile acls = yes csc policy = disable force user = %U valid users = %U "Domain Admins" [netlogon] path = /home/samba/netlogon/ browseable = No read only = yes
Veiem que les carpetes compartides estan en /home/samba. Aquest directori l’anem a crear ara:
$ mkdir -pv /home/samba/{public,netlogon,profiles} $ chmod 1777 /home/samba/profiles
La veritat és que aquesta part depen molt de les necessitats de cada organització. Aquí tenim:
- [homes]: Es comparteixen les carpetes locals de cada usuari
- [public]: Tenim una carpeta pública, tant de lectura com escriptura
- [profiles]: Carpeta on es guardaran els perfils de Windows dels usuaris quan tanquin una sessió
- [netlogon]: Carpeta que contindrà els arxius .bat a executar a l’entrada d’un client Windows. En el nostre cas s’ha definit un startup.bat en la secció global que té el següent contingut:
$ cat startup.bat net use j: pdc-dominipublic net time pdc-domini /set /yes
El contingut és opcional i a definir a cada organització, evidentment.
També es pot veure en smb.conf que fem menció de l’arxiu /etc/samba/smbusers. La funció d’aquest arxiu és la de mapejar usuaris amb els de Samba. Per exemple, el contingut del nostre és el següent:
root = administrador admin
Això vol dir que sempre que utilitzem els usuaris administrador o admin, el samba farà ús del root. És opcional però còmode.
Reiniciem els dimonis de samba per que tingui constancia de la nova configuració:
$ /etc/init.d/samba stop $ /etc/init.d/winbind stop $ /etc/init.d/samba start $ /etc/init.d/winbind start
Per a que samba pugui utilitzar l’accés a l’LDAP necessita saber la contrasenya de l’administrador. Això es configura amb aquesta comanda:
$ smbpasswd -w secret Setting stored password for "cn=admin,dc=domini,dc=local" in secrets.tdb
Va sent hora d’afegir algun usuari a l’LDAP i provar si tot funciona correctament. Per dur a terme aquesta feina instal·larem encara un paquet més. Aquest són una sèrie d’scripts que ajuden a la gestió d’usuaris en samba i ldap:
$ apt-get install smbldap-tools
Com tot en Linux, hi ha un parell d’arxius que s’han de configurar. Aquests s’han de col·locar en una carpeta que no existeix així que anem a crear-la:
$ mkdir -pv /etc/opt/IDEALX/smbldap-tools
En aquest directori hi hem de crear dos arxius, smbldap.conf i smbldap_bind.conf que mostro a continuació. En el primer arxiu apareix el numero SID. Aquest és importantissim de configurar correctament. S’obté amb la comanda:
$ net getlocalsid DOMINI SID for domain DOMINI is: S-1-5-21-1746055152-389814163-3852199692
$ cat smbldap.conf SID="S-1-5-21-1746055152-389814163-3852199692" sambaDomain="DOMINI" masterLDAP="ip_del_servidor_LDAP" masterPort="389" suffix="dc=domini,dc=local" usersdn="ou=Users,${suffix}" computersdn="ou=Computers,${suffix}" groupsdn="ou=Groups,${suffix}" sambaUnixIdPooldn="sambaDomainName=DOMINI,${suffix}" scope="sub" hash_encrypt="SSHA" crypt_salt_format="%s" userLoginShell="/bin/bash" userHome="/home/%U" userHomeDirectoryMode="700" userGecos="Usuari del Domini" defaultUserGid="513" defaultComputerGid="515" skeletonDir="/etc/skel" defaultMaxPasswordAge="45" userSmbHome="PDC-DOMINI%U" userProfile="PDC-DOMINIprofiles%U" userHomeDrive="H:" userScript="startup.bat" mailDomain="domini.local" with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" with_slappasswd="0" slappasswd="/usr/sbin/slappasswd"
$ cat smbldap_bind.conf masterDN="cn=admin,dc=domini,dc=local" masterPw="secret"
Amb la configuració feta hem d’executar el primer dels scripts, el que prepararà l’estructura de l’LDAP per acollir els usuaris:
$ smbldap-populate Populating LDAP directory for domain DOMINI (S-1-5-21-1746055152-389814163-3852199692) (using builtin directory structure) entry dc=domini,dc=local already exist. adding new entry: ou=Users,dc=domini,dc=local adding new entry: ou=Groups,dc=domini,dc=local adding new entry: ou=Computers,dc=domini,dc=local adding new entry: uid=root,ou=Users,dc=domini,dc=local adding new entry: uid=nobody,ou=Users,dc=domini,dc=local adding new entry: cn=Domain Admins,ou=Groups,dc=domini,dc=local adding new entry: cn=Domain Users,ou=Groups,dc=domini,dc=local adding new entry: cn=Domain Guests,ou=Groups,dc=domini,dc=local adding new entry: cn=Domain Computers,ou=Groups,dc=domini,dc=local adding new entry: cn=Administrators,ou=Groups,dc=domini,dc=local adding new entry: cn=Account Operators,ou=Groups,dc=domini,dc=local adding new entry: cn=Print Operators,ou=Groups,dc=domini,dc=local adding new entry: cn=Backup Operators,ou=Groups,dc=domini,dc=local adding new entry: cn=Replicators,ou=Groups,dc=domini,dc=local entry sambaDomainName=DOMINI,dc=domini,dc=local already exist. Updating it... Please provide a password for the domain root: Changing UNIX and samba passwords for root New password: secret Retype new password: secret
Ja està! Reiniciarem el serveis samba i ldap per si de cas i ja podem començar a crear usuaris!
$ /etc/init.d/samba restart $ /etc/init.d/winbind restart $ /etc/init.d/slapd restart
Anem a crear el primer usuari del domini. Per a realitzar això, de nou, utilitzem els nous scripts, en aquest cas smbldap-adduser. Aquesta comanda té moltes opcions, pel primer usuari farem:
$ smbldap-useradd -m testuser $ smbldap-passwd testuser Changing UNIX password for testuser New password: test Retype new password: test
Provem ara d’entrar al sistema utilitzant aquest nou compte:
$ ssh testuser@adreça_ip_del_servidor
Si tot ha anat bé estarem a la línia de comandes de l’usauri testuser.
Per eliminar l’usuari de prova podem fer (un altre cop amb l’usuari root):
$ smbldap-userdel -r testuser
Explotació:
Crear usuari:
$ smbldap-useradd -m -a -c "Nom Usuari" usuari $ smbldap-passwd usuari
- -m: crea el directori /home/usuari
- -a: crea l’usuari Windows
- -c: modifica el gecos (nom visible)
- es modifica, després, la seva contrasenya
Modificar usuari:
$ smbldap-usermod opcions usuari
Eliminiar usuari:
$ smbldap-userdel -r usuari
- -r: eliminar el directori Home de l’usuari
Afegir màquines Windows al domini.
La manera més senzilla d’afegir màquines al domini és des de l’assistent de Windows. El trobarem a les Propietats del PC, Nom de l’ordinador, Canvia…
Al nom del domini ficarem: DOMINI
Ens demanarà un nom d’usuari i una contrasenya:
- login: root
- password: secret
Quan ens ho demani reiniciarem l’ordinador i ja hem acabat. Ja podem entrar amb els usuaris que anem creant a l’LDAP.