Domini Samba (samba i openLDAP)

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.