Instalación de Servidor de Dominio y Ficheros
Servidor de dominio Windows PDC con Samba sobre Debian GNU/Linux
Versión 2 rc1 - Enero de 2007
2007 Güimi (http://guimi.net)
Está permitido copiar, distribuir y/o modificar los documentos bajo los términos de la licencia
"Reconocimiento-Compartir bajo la misma licencia 3.0 España" de Creative Commons.
Puede ver una copia de esta licencia completa.
|
Índice
Un gran trabajo mucho más ambicioso que este, pero un poco desactualizado es "Integración de redes con OpenLDAP, Samba, CUPS y PyKota" de Sergio González.
Resumen
El servidor que vamos a instalar debe cumplir las siguientes expectativas:
- RAID de nivel 1 (mirror)
- Servidor de ficheros (SAMBA)
- Directorios de uso personal y exclusivo (con sistema de cuotas)
- Directorio de intercambio temporal (con borrado automático diario)
- Directorio público de solo lectura
- Directorios de trabajo de uso restringido
- Controlador primario de dominio -PDC- (SAMBA)
- Identificación de usuarios
- Gestión de perfiles de usuario
- Ejecución de procesos de conexión (logon scripts)
- Gestión segura
- Copia de seguridad en DVD
- Gestión de cuotas
Para ello vamos a utilizar Debian GNU/Linux con, principalmente, Samba.
Notas sobre el documento
Algunos de los ficheros de configuración se muestran incompletos. en ese caso las lineas aquí mostradas son únicamente las que ha sido necesario modificar o añadir.
Las versiones de los paquetes Debian utilizadas al realizar este documento han sido:
- Debian Etch RC1 (Copia diaria del 9 de Enero de 2007)
- linux-image-2.6.18-3-686
- mdadm-2.5.6-8
- samba-3.0.23d-4
- quota-3.14-4
- quotatools-1.4.9-2
Planificación
Red(es)
Elegimos las redes a utilizar en las distintas ubicaciones, dentro de los rangos reservados.
Rangos de direcciones IP reservadas (Intranets):
- 1 Clase A 10.x.x.x
- 16 Clase B 172.16-172.31
- 256 Clase C 192.168.0-192.168.255
Para una red local sencilla se suele utilizar 192.168.0.0/24
Particionado del servidor
Para poder implantar cuotas de uso hay que tener en cuenta que el sistema funciona por sistemas de ficheros (FSs),
por lo que hay que crear una partición específicamente para ello.
Son convenientes:
- Una partición para el sistema de arranque (/)
- Una partición para copias de seguridad del sistema (/copia)
- Una partición swap
- Una partición para usuarios -directorios personales- con cuotas, dentro de /home (/home/personal)
(Esto nos permite mantener los usuarios propios del sistema en /home y que no se mezclen).
- Una partición para trabajo -directorios de grupos- con cuotas, dentro de /home (/home/trabajo) que contenga:
- Directorio "publico"
- Directorio "temporal"
- Directorios por proyectos, grupos, departamentos...
Recogida de información
Antes de comenzar con la instalación del sistema deberemos disponer de:
- Lista de hardware sobre el que vamos a trabajar (para asegurar su compatibilidad)
- Configuración de red:
- IP y Máscara
- Pasarela o gateway
- Servidores de DNS
- Proxy (si procede)
- CD de Debian GNU/Linux
- Información sobre los grupos que se van a crear, que permisos deben tener, que usuarios los componen...
Definición de políticas de uso del servidor de ficheros
Para realizar la configuración del sistema, debemos establecer las políticas de uso del servidor de ficheros. Unas políticas generales que vamos a seguir en este documento son:
- El servidor comparte los siguientes recursos:
- \\(servidor)\netlogon - Para realizar el proceso de conexión (Incluye netlogon/scripts/)
- \\(servidor)\profiles - Para gestionar los perfiles de usuario
- \\(servidor)\(nombre de usuario) - Directorios personales
- \\(servidor)\publico - Acceso público de solo-lectura
- \\(servidor)\temporal - Acceso público de lectura-escritura con borrado diario automático
- \\(servidor)\grupo1 - Recurso para el grupo 1
- \\(servidor)\grupo2 - Recurso para el grupo 2
- ...
- Cada usuario tiene acceso de lectura a 'netlogon\scripts' para ejecutar el proceso de conexión (logon script) y de lectura y escritura en 'netlogon\profiles\(usuario)' para guardar su perfil. Ambos se usan de modo
automático y no deberían usarse directamente por el usuario.
- Cada usuario tiene acceso exclusivo a su directorio personal (residente en o /home/personal/(nombre de usuario))
- Todos los usuarios tienen acceso de solo lectura al directorio "público"
- El usuario 'admin' tiene acceso de escritura al directorio "público"
- Todos los usuarios pueden leer y escribir en el directorio "temporal"
- Cada noche se borra el contenido del directorio "temporal" de forma automática
- Todos los usuarios tienen acceso a los recursos de grupo, si bien según sus permisos solo podrán leer y escribir en los directorios de los grupos a los que pertenezcan.
- El script de conexión (netlogon/scripts/default.bat) sincroniza el reloj del cliente con el del servidor y conecta las siguientes unidades de red:
- h: a \\(servidor)\(directorio personal)
- p: a \\(servidor)\publico
- t: a \\(servidor)\temporal
- z: a \\(servidor)\grupo1
- y: a \\(servidor)\grupo2
- x: a \\(servidor)\grupo3
- ...
- Cada noche se copia el sistema y los directorios establecidos en '/copia'
- Cada noche se copia el contenido de '/copia' en soporte DVD
Una vez realizada la planificación y disponiendo de lo necesario podemos comenzar...
Instalación del sistema base
A la hora de realizar este manual el hardware sobre el que se iba a realizar la instalación consistía en una placa base ASUS P5VD2-MX con una controladora VIA VT8237A SATA RAID y dos discos SATA de 160 GB iguales.
Ese chipset de RAID presentó dos problemas:
- El núcleo utilizado en la instalación de CD netinstall de Debian Etch RC1 (2006-11-13) no lo soporta.
- No es realmente un chip de RAID por hardware puro, sino lo que se conoce como un "fakeraid", por lo que se decidió implementar el RAID totalmente por software con las herramientas propias de GNU/Linux.
El primer problema nos llevó a instalar el sistema con un CD de Debian Etch de las publicaciones diarias, con kernel linux 2.6.18-3 que permite instalar sin problemas.
Para el segundo problema configuramos la BIOS del equipo para que los discos aparezcan como IDE, y luego el sistema los mapea como SCSI (/dev/sda y /dev/sdb).
Una vez hecho eso realizamos una instalación minima arrancando desde el CD (sin utilizar repositorios en red) instalando solo el sistema base.
Generamos las particiones antes mencionadas:
Montaje | GBs |
/ | 30 |
/copia | 30 |
swap | 2.5 |
/home/personal | 37.5 |
/home/trabajo | 60 |
Configuración de RAID
Una vez instalado el sistema desde el CD, configuramos el RAID 1 siguiendo la estupenda guía de philcore. Indico a continuación los pasos dados. Por tanto lo que sigue es básicamente una traducción resumida.
Tenemos en /dev/sda nuestro sistema básico instalado y queremos utilizar /dev/sdb como disco espejo.
Instalamos las herramientas de RAID:
# aptitude install mdadm
Desmontamos todas las particiones excepto "/" y swap.
Utilizamos fdisk para cambiar los tipos de las particiones a "fd" (raid autodetect). No hay que cambiar la partición swap.
Veremos un error al escribir la nueva tabla por estar el sistema en uso, pero no pasa nada.
Verificamos
# fdisk -l /dev/sda
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3647 29294496 fd Linux raid autodetect
/dev/sda2 3648 7294 29294527+ fd Linux raid autodetect
/dev/sda3 7295 7622 2634660 82 Linux swap / Solaris
/dev/sda4 7623 19457 95064637+ 5 Extended
/dev/sda5 7623 12292 37511743+ fd Linux raid autodetect
/dev/sda6 12293 19457 57552831 fd Linux raid autodetect
Usamos sfdisk para copiar la tabla de particiones en /dev/sdb:
# sfdisk -d /dev/sda | sfdisk /dev/sdb
Creamos los volúmenes RAID indicando que se componen de dos dispositivos. El primero está perdido (no queremos aún que utilice las particiones donde hemos instalado) y el segundo está en /dev/sdb:
# mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb1
# mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/sdb2
# mdadm --create /dev/md2 --level 1 --raid-devices=2 missing /dev/sdb4
# mdadm --create /dev/md3 --level 1 --raid-devices=2 missing /dev/sdb5
Creamos sistemas de fichero en los volúmenes RAID:
# mkfs.ext3 /dev/md0
# mkfs.ext3 /dev/md1
# mkfs.ext3 /dev/md2
# mkfs.ext3 /dev/md3
Montamos el volumen que contendrá el sistema y copiamos la raiz:
# mount /dev/md0 /mnt
# cp -dpRx / /mnt
Montamos y copiamos el resto de volúmenes:
# mount /dev/md1 /mnt/copia
# cp -dpRx /copia /mnt/copia
# mount /dev/md2 /mnt/home
# cp -dpRx /home/personal /mnt/home/personal
# mount /dev/md3 /mnt/home/trabajo
# cp -dpRx /home/trabajo /mnt/home/trabajo
Editamos /etc/fstab:
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
/dev/md0 / ext3 defaults,errors=remount-ro 0 1
/dev/md1 /copia ext3 defaults 0 2
/dev/md2 /home/personal ext3 nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/md3 /home/trabajo ext3 nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/sda3 none swap sw,pri=1 0 0
/dev/sdb3 none swap sw,pri=1 0 0
Como se ve hemos preparado md2 y md3 para utilizar cuotas y se han configurado por seguridad para que en esos sistemas de ficheros no se utilicen dispositivos (nodev), ficheros con setuid (nosuid) ni ficheros ejecutables (noexec).
Editamos /boot/grub/menu.lst. Opcionalmente podemos activar framebuffer:
(...)
title Debian GNU/Linux, kernel 2.6.18-3-686
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/md0 md=0,/dev/sda1,/dev/sdb1 ro vga=791
initrd /boot/initrd.img-2.6.18-3-686
savedefault
title Debian GNU/Linux, kernel 2.6.18-3-686 (RAID recovery disc-A)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/md0 md=0,/dev/sda1 ro single
initrd /boot/initrd.img-2.6.18-3-686
savedefault
title Debian GNU/Linux, kernel 2.6.18-3-686 (RAID recovery disc-B)
root (hd1,0)
kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/md0 md=0,/dev/sdb1 ro single
initrd /boot/initrd.img-2.6.18-3-686
savedefault
(...)
Copiamos los ficheros editados al disco espejo:
# cp -dp /etc/fstab /mnt/etc/fstab
# cp -dp /boot/grub/menu.lst /mnt/boot/grub
Instalamos grub en el segundo disco, para que podamos arrancar si falla el primero:
# grub-install /dev/sda
# grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
Y por fin reiniciamos el sistema para utilizar ya los volúmenes RAID y verificar que todo va bien.
# shutdown -r now
El sistema debería rearrancar correctamente. Algunas verificaciones que podemos hacer:
# mount
# df
# mdadm -QD /dev/md0
# mdadm -QD /dev/md1
# mdadm -QD /dev/md2
# mdadm -QD /dev/md3
# cat /proc/mdstat
Añadimos las particiones de /dev/sda (que no estamos usando) a los volúmenes RAID:
# mdadm --add /dev/md0 /dev/sda1
# mdadm --add /dev/md1 /dev/sda2
...
Cada vez que añadimos una partición a un volumen RAID debe sincronizarla. Si se intenta añadir una partición antes de que termine de sincronizar la anterior el sistema nos dará un aviso y encolará la tarea.
No reiniciar hasta que las particiones esten sincronizadas.
Podemos verlo en /proc/mdstat. Cuando indica [UU] es que está correcto.
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sda5[0] sdb5[1]
37511616 blocks [2/2] [UU]
md3 : active raid1 sda6[0] sdb6[1]
57552704 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
29294400 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
29294400 blocks [2/2] [UU]
unused devices: <none>
Si se desea quitar una partición de un volumen:
# mdadm --fail /dev/md2 /dev/sda4
# mdadm --remove /dev/md2 /dev/sda4
No se pueden quitar todas las particiones de un volumen. Si lo que se desea es eliminar el volumen:
# mdadm --stop /dev/md2
Nada de esto afecta al estado de las partiones en sí mismas.
Configuración de la red
Configuramos la interfaz.
# vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#allow-hotplug eth0
#iface eth0 inet dhcp
### Interfaz EXTERNA
iface eth0 inet static
address 280.280.280.280 # Aquí debe ir la IP del equipo
# Esta es una IP ficticia. De hecho no es una IP válida.
# Es la que usaremos como ejemplo en el documento
netmask 255.255.255.0
gateway 280.280.280.1
up route add default gw 280.280.280.1
auto eth0
Configuramos la resolucion DNS.
Tengo disponible una lista de servidores de DNS. Aquí pongo un par de servidores de Telefónica de ejemplo.
# vi /etc/resolv.conf
#Telefonica
nameserver 80.58.0.33
nameserver 80.58.32.97
Actualización del sistema
Configuramos los repositorios utilizando el mirror de Francia, ya que el de España sigue dando problemas de vez en cuando (y van un montón de años...)
# vi /etc/apt/sources.list
#
# deb cdrom:[Debian GNU/Linux testing _Etch_ - Official Snapshot i386 Binary-1 (20061111)]/ etch main
#deb cdrom:[Debian GNU/Linux testing _Etch_ - Official Snapshot i386 Binary-1 (20061111)]/ etch main
deb http://ftp.fr.debian.org/debian/ etch main
deb-src http://ftp.fr.debian.org/debian/ etch main
deb http://security.debian.org/ etch/updates main
deb-src http://security.debian.org/ etch/updates main
Si es necesario insertamos la clave del repositorio
# gpg --keyserver keyring.debian.org --recv-key 6070d3a1
# gpg --armor --export 6070d3a1 | apt-key add -
Actualizamos el sistema
# aptitude update
# aptitude upgrade
# aptitude dist-upgrade
Instalamos algunos paquetes utiles y/o necesarios
# aptitude install less vim lynx telnet tofrodos
# aptitude install openssh-server nmap iptables
... y el entorno grafico si lo deseamos
# aptitude install xserver-xorg xserver-common xfonts-base gnome
Otros paquetes opcionales
# aptitude install mozilla-firefox-locale-es-es gftp
# aptitude install openoffice.org2-l10n-es openoffice.org-core openoffice.org
Quitamos servicios innecesarios, por ejemplo:
# update-inetd --disable chargen
# update-inetd --disable ident
# update-inetd --disable discard
# /etc/init.d/cups stop
# update-rc.d -f cups remove
# update-rc.d -f gdm remove
# /etc/init.d/lpd stop
# update-rc.d -f lpd remove
# /etc/init.d/nfs-common stop
# update-rc.d -f nfs-common remove
# /etc/init.d/pcmcia stop
# update-rc.d -f pcmcia remove
# /etc/init.d/ppp stop
# update-rc.d -f ppp remove
# /etc/init.d/exim4 stop
# update-rc.d -f exim4 remove
# /etc/init.d/bittorrent stop
# update-rc.d -f bittorrent remove
# update-rc.d -f ntpdate remove
# update-inetd --disable time
# update-inetd --disable daytime
# update-inetd --disable echo
Instalación de sistema de cuotas
Instalamos el sistema de cuotas:
# aptitude install quota quotatool
Recordemos que debe indicarse en fstab las particiones donde se vayan a utilizar cuotas.
# grep quota /etc/fstab:
/dev/md2 /home/personal ext3 nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/md3 /home/trabajo ext3 nodev,nosuid,noexec,usrquota,grpquota 0 2
Otros comandos útiles son quotacheck (para crear/reparar/eliminar sistema de cuotas), setquota y repquota.
Configuración del servidor ssh
Configuramos ssh para cambiar el puerto, reducir el tiempo de login, denegar conexiones de root, autorizar el acceso solo a ciertos usuarios y con fichero de clave privada, etc.
Otra configuración de seguridad
Permitimos accesos a la máquina desde la red local, excepto desde el equipo que tiene la conexión a internet:
# cat /etc/hosts.*
#/etc/hosts.allow
# Damos permiso a toda la red local
#+ excepto al router de internet
ALL: 280.280.280. EXCEPT 280.280.280.666
#/etc/hosts.deny
# Denegamos cualquier acceso no permitido explicitamente
#+ en hosts.allow
ALL: ALL
Generamos en blanco un par de ficheros peligrosos:
# ls -l /etc/hosts.equiv /etc/ssh/shosts.equiv
ls: /etc/hosts.equiv: No existe el fichero o el directorio
ls: /etc/ssh/shosts.equiv: No existe el fichero o el directorio
# touch /etc/hosts.equiv /etc/ssh/shosts.equiv
# chmod 000 /etc/hosts.equiv /etc/ssh/shosts.equiv
Configuración de Samba
Una gran parte de la información que viene a continuación ha sido extraída de la documentación de Samba.
Posibles problemas con los clientes
Los clientes deben tener instalado el servicio "Cliente de redes Microsoft".
Según indica Microsoft:
"Windows XP Home Edition no se puede unir a un dominio. Sólo se puede configurar como un miembro de un grupo de trabajo."
Para que una maquina con Windows XP Professional pueda acceder al dominio puede ser necesario cambiar la siguiente entrada del registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\parameters
Y poner "requiresignorseal" a 0.
Además en las políticas de seguridad del hay que tener deshabilitadas:
- Miembro de dominio: Descifrar o firmar digitalmente datos de un canal seguro (siempre)
- Miembro de dominio: Deshabilitar cambios de contraseña de cuentas de equipo.
- Miembro de dominio: Requerir clave de sesión protegida (W2000 o más reciente).
Configuración del servidor
Una vez configurado el PDC en el servidor a través de Samba dispondremos de:
- Identificación de usuarios
- Gestión de perfiles de usuario
- Ejecución de procesos de conexión (logon scripts)
El controlador primario de dominio es un servidor que "gobierna" un dominio de Windows. Lo que hace es centralizar la gestión de usuarios, identificandolos, gestionando sus perfiles y mandándoles procesos a realizar en la conexión.
La identificación de usuarios la realizaremos a través de tdbsam. Primero se crean los usuarios en Linux, luego se les en el fichero de samba ('smbadduser (usuario):(usuario)') y por último se les incluye en los grupos adecuados para acceder a sus directorios de trabajo. Los ususarios no pueden abrir sesión en el servidor Linux.
Para facilitar la gestión de usuarios utilizamos g-adduser, g-deluser y g-chgpwd.
Los perfiles residen en '/home/personal/netlogon/profiles/(usuario)' y se gestionan de forma automática cada vez que un usuario se identifica y siempre que la máquina esté incluida en el dominio del servidor.
Como ya se ha dicho, el proceso de conexión lanza en el cliente un script ('netlogon/scripts/default.bat') cada vez que un usuario se identifica y siempre que la máquina esté incluida en el dominio del servidor.
Instalamos un servidor DHCP
Si no hay ningún servidor de DHCP en la red instalamos uno:
# vi /etc/dhcpd.conf
option domain-name "Mi_Dominio";
option domain-name-servers Servidor.Mi_Dominio;
option subnet-mask 255.255.255.224;
default-lease-time 600;
max-lease-time 7200;
subnet 280.280.280.0 netmask 255.255.255.0 {
range 280.280.280.100 280.280.280.250;
option subnet-mask 255.255.255.0;
option broadcast-address 280.280.280.255;
option routers 280.280.280.1;
option domain-name-servers 280.280.280.333;
}
Instalamos samba
# aptitude install samba dhcp samba-common
# vi /etc/samba/smb.conf
#
# smb.conf
#
# Definiciones globales
[global]
# Identificacion del equipo
netbios name = MI_SERVIDOR
workgroup = MI_DOMINIO
server string = Servidor %h (Samba %v)
# Definición de dominio
security = User
os level = 64
domain master = Yes
local master = Yes
preferred master = Yes
domain logons = Yes
wins support = Yes
# Gestion de inicio de sesion
logon script = scripts\default.bat
logon path = \\%N\profiles\%U #logon path = \\%L\profiles\%U
logon home = \\%N\%U #logon home = \\%L\%U
logon drive = H:
# Caracteristicas de claves
encrypt passwords = Yes
obey pam restrictions = Yes
passdb backend = tdbsam
# Gestion de claves
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
# Scripts de gestion de usuarios y equipos
add user script = /usr/sbin/useradd -m %u
delete user script = /usr/sbin/userdel -r %u
add group script = /usr/sbin/groupadd %g
delete group script = /usr/sbin/groupdel %g
add user to group script = /usr/sbin/groupmod -A %u %g
delete user from group script = /usr/sbin/groupmod -R %u %g
add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody %u
# IDs de usuarios y equipos
idmap uid = 15000-20000
idmap gid = 15000-20000
# Registro de sucesos
log level = 2
log file = /var/log/samba/log.%m
max log size = 1000
# Características extra
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
hide dot files = Yes
# Compartimos los directorios personales
[homes]
comment = Directorio personal
path = /home/personal/%S
valid users = %S
read only = No
create mask = 0664
directory mask = 0775
browseable = No
# Compartimos el recurso de inicio en red
[netlogon]
comment = Network Logon Service
path = /home/personal/netlogon
read only = Yes
write list = root
browseable = No
guest ok = Yes
# Recurso para los perfiles en red
[profiles]
comment = Users profiles
path = /home/personal/netlogon/profiles
read only = No
create mask = 0600
directory mask = 0700
browseable = No
# Recurso de acceso solo-lectura publico
[publico]
comment = Directorio publico
path = /home/trabajo/publico
guest ok = Yes
locking = No
# Recursos específicos para grupos
[grupo1]
comment = Grupo1
path = /home/trabajo/grupo1
read only = No
force create mode = 0660
force directory mode = 0660
[grupo2]
comment = Grupo2
path = /home/trabajo/grupo2
read only = No
force create mode = 0660
force directory mode = 0660
Creamos los grupos en el servidor:
# vi /etc/group
(...)
winusers:x:200:
winsystem:x:201:
winadmin:x:202:
grupo1:x:1001:
grupo2:x:1002:
Generamos grupos de dominio:
# net groupmap add ntgroup="Domain Admins" unixgroup=winadmin rid=512 type=d
# net groupmap add ntgroup="Domain Users" unixgroup=winusers rid=513 type=d
# net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d
En caso de no existir el grupo nobody:
# addgroup winguests
# net groupmap add ntgroup="Domain Guests" unixgroup=winguests rid=514 type=d
Comprobamos los grupos del dominio:
# net groupmap list
Domain Users (S-1-5-21-768533834-2550023333-2928700493-1001) -> winusers
Domain Admins (S-1-5-21-768533834-2550023333-2928700493-1005) -> winadmin
Domain Guests (S-1-5-21-768533834-2550023333-2928700493-1006) -> winguests
Tomamos nota del identificador del servidor samba (768533834-2550023333-2928700493).
También se puede obtener mediante el comando:
# net getlocalsid
En caso de cambiar el nombre del servidor Samba se cambiará el SID, con lo que los clientes no podrán validarse.
Al cambiar el nombre del servidor habría que sacar a los clientes del dominio y volverlos a introducir.
Una mejor opción es volver a poner el mismo SID que tenía el servidor antes del cambio de nombre:
# net getlocalsid 'OLDNAME'
# net setlocalsid 'SID'
Garantizamos permisos a "Domain Admins":
# net rpc rights grant 'DOMAIN\Domain Admins' SeMachineAccountPrivilege -S server -U domadmin
# net rpc rights grant 'DOMAIN\Domain Admins' SePrintOperatorPrivilege -S server -U domadmin
# net rpc rights grant 'DOMAIN\Domain Admins' SeAddUsersPrivilege -S server -U domadmin
# net rpc rights grant 'DOMAIN\Domain Admins' SeRemoteShutdownPrivilege -S server -U domadmin
# net rpc rights grant 'DOMAIN\Domain Admins' SeDiskOperatorPrivilege -S server -U domadmin
# net rpc rights grant 'DOMAIN\Domain Admins' SeTakeOwnershipPrivilege -S server -U domadmin
Tabla de Privilegios, copiada de la documentación de Samba
Privilege | Description |
SeMachineAccountPrivilege | Add machines to domain |
SePrintOperatorPrivilege | Manage printers |
SeAddUsersPrivilege | Add users and groups to the domain |
SeRemoteShutdownPrivilege | Force shutdown from a remote system |
SeDiskOperatorPrivilege | Manage disk share |
SeTakeOwnershipPrivilege | Take ownership of files or other objects |
Para ver los permisos asignados utilizamos el comando:
# net rpc list
Las principales herramientas para gestionar el servidor son smbpasswd, net y pdbedit.
smbpasswd está en proceso de obsolescencia, en su lugar pdbedit permite gestionar y consultar usuarios, grupos y políticas de cuentas y accesos.
Definición de recursos
Creamos directorios y asignamos permisos
# cd /home/personal/
# mkdir netlogon
# chmod 770 netlogon/
# cd netlogon/
# mkdir profiles
# mkdir scripts
# chmod 770 profiles/
# chown winuser:winusers profiles/
# chmod 555 scripts/
# wget http://guimi.net/descarga/tec-docs/pdc/default.bat.txt
# ...
El directorio 'profiles' queda en el arbol 'personal' para que las cuotas controlen su espacio.
Para cumplir las políticas de acceso a los recursos, se ha dado a través de samba acceso a todos los usuarios (identificados). A través del sistema de permisos propio de Linux se ha hecho propietario de cada directorio a root y a un grupo creado al efecto. En cada directorio solo pueden leer y escribir 'root' y los usuarios que pertenezcan al grupo, siendo 'root' el único que puede modificar el directorio en sí.
Al acabar tendremos un árbol similar al siguiente:
Directorio Permisos Propietario
---------------------------------------------------
/home/
|- personal 755 root:root
|- (usuarios) 2770 root:(usuario)
|-netlogon 770 root:root
|- profiles 770 root:winusers
|- (usuarios) 700 root:root
|- scripts 555 root:root
|- trabajo 755 root:root
|- publico 2770 root:winusers
|- temporal 2770 root:winusers
|- grupo1 2770 root:grupo1
|- grupo2 2770 root:grupo2
Herramientas para el usuario operador
generamos un usuario operador, llamado por ejemplo 'guimi', con permisos para realizar el mantenimiento de usuarios y grupos a través de unos scripts preparados.
# useradd guimi
Como operador, preparamos las herramientas de gestión:
guimi$ mkdir /home/guimi/bin
guimi$ cd /home/guimi/bin
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-adduser
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-chgpwd
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-deluser
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-noquota
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-noquotagrp
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-quota
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-quotagrp
guimi$ wget http://www.guimi.net/descarga/tec-docs/pdc/g-repquota
Configuramos sudo para que funcionen adecuadamente.
Al hacerlo estamos dando permisos al usuario operador ('guimi') para gestionar usuarios, grupos y archivos. Es decir será un usuario con mucho poder. Sin embargo siempre es mejor usar un usuario operador que necesitar el usuario 'root' para ello.
# vi /etc/sudoers
#
# /etc/sudoers
#
Defaults env_reset
# Host alias specification
# User alias specification
User_Alias ADMINS=guimi
# Cmnd alias specification
Cmnd_Alias APT = /usr/bin/apt-get, /usr/bin/dpkg, /usr/bin/aptitude
Cmnd_Alias APAGADO = /sbin/shutdown, /sbin/halt, /sbin/reboot
Cmnd_Alias RED = /sbin/ifconfig
Cmnd_Alias USUARIOS_ALTA = /usr/sbin/groupadd, /usr/sbin/useradd
Cmnd_Alias USUARIOS_BAJA = /usr/sbin/groupdel, /usr/sbin/userdel
Cmnd_Alias USUARIOS_MOD = /usr/sbin/usermod
Cmnd_Alias USUARIOS_SAMBA = /usr/bin/smbpasswd
Cmnd_Alias GESTION_FICHEROS = /bin/mkdir, /bin/chown, /bin/chmod, /bin/rm
Cmnd_Alias GESTION_CUOTA = /usr/sbin/setquota, /usr/sbin/repquota
# User privilege specification
ADMINS ALL= NOPASSWD: APT
ADMINS ALL= NOPASSWD: APAGADO
ADMINS ALL= NOPASSWD: RED
ADMINS ALL= NOPASSWD: USUARIOS_ALTA
ADMINS ALL= NOPASSWD: USUARIOS_BAJA
ADMINS ALL= NOPASSWD: USUARIOS_MOD
ADMINS ALL= NOPASSWD: USUARIOS_SAMBA
ADMINS ALL= NOPASSWD: GESTION_FICHEROS
ADMINS ALL= NOPASSWD: GESTION_CUOTA
root ALL=(ALL) ALL
Creamos el resto de usuarios y les damos permisos
Utilizamos los scripts que hemos bajado:
guimi$ cd
guimi$ bin/g-adduser usuario1
guimi$ sudo usermod -G usuario1,winusers,grupo1,grupo3 usuario1
guimi$ ...
Comprobaciones
Empezamos con algunas comprobaciones básicas
# smbclient -L localhost
# smbclient -L localhost -U%
# smbclient -L localhost -U guimi
# smbclient -U guimi //Servidor/guimi
También podemos seguir "The samba checklist", que en resumen sería:
# testparm smb.conf
# ping Mi-servidor
# ping Un-cliente
# smbclient -L localhost
# smbclient -L localhost -U%
# smbclient -L localhost -U guimi -W MI_dominio
# smbclient -L Mi-servidor
# smbclient -L Mi-servidor -U%
# smbclient -L Mi-servidor -U guimi -W MI_dominio
# nmblookup -B Mi-servidor __SAMBA__
# nmblookup -B Un-cliente '*'
# nmblookup -d 2 '*'
# smbclient //Mi_servidor/Un_recurso
# nmblookup -M Mi_dominio
En un cliente Windows:
c:\> net view \\Mi-servidor
c:\> net use x: \\Mi_servidor\Un_recurso
Copia de seguridad
Configuramos el sistema para que realice cada noche una copia de la carpeta /home/trabajo.
Para ello utilizamos un par de scripts:
# cd /root/bin
# wget http://www.guimi.net/datos/tec-docs/scripts/g-copia_seg.sh
# wget http://www.guimi.net/datos/tec-docs/scripts/g-dvd.sh
Programamos el sistema:
# crontab -e
# m h dom mon dow command
## Cada noche borra 'temporal'
10 23 * * * rm -r /home/trabajo/temporal/* > /dev/null
## Cada noche hace una copia de seguridad
30 23 * * 0 /root/bin/g-copiaseg.sh 0
30 23 * * 1 /root/bin/g-copiaseg.sh 1
30 23 * * 2 /root/bin/g-copiaseg.sh 2
30 23 * * 3 /root/bin/g-copiaseg.sh 3
30 23 * * 4 /root/bin/g-copiaseg.sh 4
30 23 * * 5 /root/bin/g-copiaseg.sh 5
30 23 * * 6 /root/bin/g-copiaseg.sh 6
Documentación de proyecto
Postinstalación del sistema
Podemos realizar algunos ajustes de postinstalación del sistema que nos resulten interesantes.
|