En este artículo, aprenda sobre estos conceptos:
- Cuentas de UNIX
- Gestionando cuentas de Samba
- Correlacionando cuentas
- Forzando permisos de cuenta para archivos y directorios
Este artículo le ayuda a prepararse para el Objetivo 313.1 en el Tema 313 del examen de Especialidad en Entorno Mixto de Linux Professional Institute (302). El objetivo tiene un peso de 4.
Para obtener el máximo de los artículos en esta serie, debe tener un conocimiento avanzado de Linux y un sistema Linux funcional en el cual pueda practicar los comandos cubiertos en este artículo. En particular, este artículo asume que tiene un conocimiento práctico de las funciones de línea de comandos de Linux y al menos un entendimiento general del propósito de Samba de acuerdo con lo cubierto en "Aprenda Linux, 302 (Entornos mixtos): Conceptos." Para realizar las acciones descritas en este artículo, debe tener el software de Samba instalado. Además, debe tener acceso de red para un cliente de Windows.
Entendiendo las cuentas de usuario y de grupo de UNIX
Su servidor de Samba probablemente no existe en un silo. Los usuarios necesitan acceder a archivos y directorios, pero antes de que puedan hacerlo, necesitan autenticarse. Los usuarios pueden conectarse desde estaciones de trabajo de Linux o desde un escritorio de Windows. De cualquier manera, necesitan cuentas que reconozca el servidor de Samba.
Una vez que los usuarios son autenticados, necesitan permisos apropiados para archivos, directorios y servicios de impresión. Los grupos son un dispositivo de Samba que puede ayudarle a gestionar mejor estos permisos.
La base de datos de backend de sam es su mediador de las cuentas de UNIX locales a las cuentas de usuario remotas. Existen varios métodos para permitir a sus usuarios autenticarse en el servidor de Samba, pero antes de profundizar en las cuentas de Samba, debe tener un sólido entendimiento de las bases de la gestión de cuentas de usuario y de grupo de UNIX.
Cuando crea una cuenta de usuario local en una computadora de Linux con una herramienta como
useradd, la información de cuenta se graba en el archivo /etc/passwd. Este archivo almacena información como el nombre de usuario, su directorio de inicio, su shell predeterminado y cualquier comentario asociado con la cuenta.
Estas cuentas son comúnmente conocidas como cuentas locales de UNIX.
Este artículo usa los términos cuenta de UNIX y cuenta local
en forma intercambiable.
El Listado 1 crea una cuenta local con el nombre de usuario monty,
proporciona una descripción de Monty Python en la sección de comentario
(-c), especifica un directorio de inicio
(-m) y da al usuario un shell predeterminado de /bin/bash
(-s).
Listado 1. Creando una cuenta local
[tbost@samba ~]$ sudo useradd -c'Monty Python' -m -s /bin/bash monty [tbost@samba ~]$ less /etc/passwd | grep monty monty:x:504:504:Monty Python:/home/monty:/bin/bash [tbost@samba ~]$ |
Cada línea en /etc/passwd representa un registro de cuenta de usuario. Cada registro tiene siete campos separados por un delimitador: un símbolo de dos puntos (:).
El nombre de usuario en el primer campo, el ID de usuario (UID) en el tercer campo y el ID de grupo (GID) en el cuarto campo son de interés particular cuando gestiona cuentas de Samba.
Las cuentas de grupo tienen un rol vital para facilitar la carga de la gestión para cualquier computadora de usuarios múltiples. Si está gestionando un servidor de Samba, permitir el acceso de grupos destinado para directorios específicos, archivos y servicios de impresión es parte de una configuración típica.
Igual que en las cuentas de usuario, si está trabajando con una configuración de cuenta de Samba local, necesita crear cuentas de grupo de UNIX en el servidor de Samba local en la mayoría de las configuraciones de Samba. Puede ubicar la información de cuenta de grupo de UNIX en el archivo /etc/group. Algunas distribuciones de Linux crean un grupo privado local para cada nuevo usuario. Tal es el caso aquí, con la adición del usuario monty:
[tbost@samba ~]$ less /etc/group | grep monty monty:x:504: [tbost@samba ~]$ |
Este código muestra la cuenta de grupo privado creada para el usuario monty. Si está trabajando en un entorno mixto con computadores de Windows, tenga en mente que Windows no permite que una cuenta de usuario y una cuenta de grupo tengan nombres idénticos.
En forma muy similar a las cuentas de usuario, las cuentas de grupo deben existir en el servidor de UNIX local antes de que Samba pueda usarlas. Cree un grupo al usar una utilidad tal como
groupadd (vea el Listado 2) o edite el archivo /etc/group directamente con un editor tal como
vim.
Listado 2. Creando una cuenta de grupo y añadiendo un usuario a ella
[tbost@samba ~]$ sudo groupadd accounting [tbost@samba ~]$ sudo usermod -G accounting monty [tbost@samba ~]$ less /etc/group | grep accounting accounting:x:506:monty [tbost@samba ~]$ |
El Listado 2 usa las herramientas /sbin/groupadd y
/sbin/usermod para crear el grupo y añadir un usuario a él. Si tiene múltiples usuarios para añadir a un grupo, puede crear un script para realizar la tarea o añadir los usuarios al archivo /etc/group directamente. Los miembros del grupo deben estar en el último campo delimitado y separados por una coma
(,). Si crea grupos manualmente, tenga en mente que cada grupo debe tener un GID exclusivo.
Para la configuración típica de Samba, la información de cuenta es almacenada en una de tres bases de datos de contraseñas:
- smbpasswd
- tdbsam
- ldapsam
La base de datos smbpasswd es la base de datos de backend predeterminada usada por Samba hasta la versión 3.4. En Samba 3.4, smbpasswd está en desuso y tdbsam es ahora el backend predeterminado así como la base de datos de fondo recomendada para un entorno con menos de 250 usuarios.
La base de datos tdbsam es considerada más escalable que smbpasswd. Si está usando una versión de Samba que emplea smbpassd de forma predeterminada, puede cambiar la base de datos de backend en el archivo smb.conf al especificar el parámetro
passdb = tdbsam en la sección global
.
Pero smbpasswd no es sólo una base de datos: es una herramienta incluida con la suite de Samba que puede proporcionar una forma de gestionar cuentas de Samba en una configuración simple de Samba. Para crear una cuenta de Samba, necesita privilegios de raíz. La cuenta debe existir en el servidor local de Linux antes de que intente crear la cuenta de Samba. El Listado 3 muestra el código para crear una cuenta de usuario de Samba con smbpasswd.
Listado 3. Creando una cuenta de usuario de Samba usando smbpasswd
[tbost@samba ~]$ sudo smbpasswd -a monty New SMB password: Retype new SMB password: Added user monty. |
Los usuarios tienen acceso a smbpasswd para cambiar sus contraseñas, como se muestra en el Listado 4.
Listado 4. Usuario local cambiando la contraseña con smbpasswd
[monty@samba ~]$ smbpasswd Old SMB password: New SMB password: Retype new SMB password: Password changed for user monty [monty@samba ~]$ |
Alternativamente, puede configurar Samba para sincronización de contraseña, de forma que cuando un usuario cambia la contraseña de cuenta local, la contraseña de Samba es actualizada también:
[global] unix password sync = yes |
Si un usuario no necesita acceso al servidor de Samba durante un largo periodo de tiempo, puede inhabilitar temporalmente la cuenta y después habilitarla en una fecha posterior. Si un usuario ya no necesita el acceso, puede suprimir la cuenta. El Listado 5 muestra los comandos.
Listado 5. Inhabilitando, habilitando y suprimiendo una cuenta de Samba con smbpasswd
[tbost@samba ~]$ sudo smbpasswd -d monty Disabled user monty. [tbost@samba ~]$ sudo smbpasswd -e monty Enabled user monty. [tbost@samba ~]$ sudo smbpasswd -x monty Deleted user monty. [tbost@samba ~]$ |
Una herramienta rica en dispositivos incluida con la suite de Samba es pdbedit.
Esta herramienta puede trabajar con cuentas de cualquiera de las tres bases de datos de backend. Además de crear, modificar y eliminar usuarios, puede usar
pdbedit para:
- Listar cuentas de usuario
- Especificar directorios de inicio
- Importar cuentas de usuario
- Establecer políticas de cuenta
Puede usar pdbedit y sambapasswd
en forma intercambiable en la base de datos tdbsam (vea el Listado 6). Sin embargo, cualquier comando que realice con pdbedit debe ser con privilegios de raíz.
Listado 6. Interactuando con la base de datos de backend usando smbpasswd y pdbedit
[tbost@samba ~]$ sudo smbpasswd -a monty New SMB password: Retype new SMB password: Added user monty. [tbost@samba ~]$ sudo pdbedit -L monty:504:Monty Python [tbost@samba ~]# sudo pdbedit -L --verbose Unix username: monty NT username: Account Flags: [U ] User SID: S-1-5-21-2247757331-3676616310-3820305120-1001 Primary Group SID: S-1-5-21-2247757331-3676616310-3820305120-513 Full Name: Monty Python Home Directory: \\samba\monty HomeDir Drive: Logon Script: Profile Path: \\samba\monty\profile Domain: SAMBA Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: never Kickoff time: never Password last set: Tue, 24 May 2011 14:19:46 CDT Password can change: Tue, 24 May 2011 14:20:16 CDT Password must change: Tue, 24 May 2011 14:20:16 CDT Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
El Listado 6 demuestra cómo puede crear un usuario con smbpassd y después lista los usuarios de Samba con pdbedit. Para obtener información de cuenta más extensa en pdbedit, incluya el conmutador --verbose .
También puede usar pdbedit para establecer políticas de cuenta. Los nombres de políticas de cuenta que puede gestionar son:
min password lengthpassword historyuser must logon to change passwordmaximum password ageminimum password agelockout durationreset count minutesbad lockout attemptdisconnect timerefuse machine password change
El Listado 7 cambia la longitud mínima de contraseña a ocho caracteres y después cambia la edad máxima de la contraseña a 30 días. El conmutador
-P toma un argumento de cadena de caracteres que debe coincidir exactamente con uno de los nombres de política predefinidos, mientras que el conmutador -c
toma un argumento del valor para la configuración de la política.
Listado 7. Gestionando cuentas con pdbedit
[tbost@samba ~]$ sudo pdbedit -P 'min password length' -C 8 account policy "min password length" description: Minimal password length (default: 5) account policy "min password length" value was: 5 account policy "min password length" value is now: 8 [tbost@samba ~]$ sudo pdbedit -P 'maximum password age' -C 30 ... account policy "maximum password age" value was: 4294967295 account policy "maximum password age" value is now: 30 |
Consulte la documentación de man pdbedit o escriba
pdbedit -h para obtener más detalles sobre comandos disponibles.
Si está trabajando con un servicio de directorio existente tal como Lightweight Directory
Access Control (LDAP) o trabajando en un entorno más grande (esto es, más de 250 usuarios), puede usar el fondo de ldapsam. De las tres bases de datos de backend, ldapsam es la única que permite el almacenamiento de cuentas de grupo. Al almacenar todos los usuarios y grupos en el fondo de ldap, todos sus servidores pueden tener UIDs y GIDs consistentes. Configurar LDAP está más allá del ámbito de este artículo, pero el parámetro
idmap backend en smb.conf especifica la ubicación de su servidor LDAP.
El parámetro establecido a continuación dirige a Samba para que use el servicio de directorio LDAP en el nombre de host directory-services.example.org como su almacenamiento de backend. Primero debe tener un servidor LDAP en funcionamiento que esté configurado para interactuar con Samba.
(idmap se discute con más detalle en la siguiente sección.)
[global] idmap backend = ldap:ldap://directory-services.example.org:636 |
Si su servidor de Samba es un servidor autónomo dentro de un dominio, probablemente sólo usará archivos de correlación. Sin embargo, si su entorno consiste en usuarios conectándose al servidor de Samba desde otro dominio, la herramienta idmap ayuda con la correlación apropiada de UIDs y GIDs.
Correlación de usuarios usando sampasswd y archivos de TDB
Si los usuarios de Windows conectándose al servidor de Samba tienen nombres de usuario idénticos a aquellos creados en el servidor de Samba, un archivo de correlación no debe ser necesario. Sin embargo, si sus usuarios de Windows tienen nombres que no se correlacionan exactamente, puede crear un archivo de correlación para enlazar los nombres de usuario. Tenga en mente que, aunque Linux es sensible a mayúsculas y minúsculas, los nombres de usuario de Windows no lo son. Entonces, el nombre de usuario de Windows TBost no es la misma cuenta local que tbost. La Tabla 1 muestra la correlación de una cuenta de Windows con una de UNIX.
Tabla 1. Nombres de cuenta de Windows y UNIX a ser usados para la correlación
| Windows | UNIX |
|---|---|
| Monty | monty |
| bostt | tbost |
| sue.george | sue |
Cuando cree las cuentas de Samba, use el nombre de cuenta de Windows. Entonces puede especificar una ubicación de archivo en el archivo smb.conf que correlacionará las cuentas con la cuenta de UNIX apropiada. El Listado 8 muestra la correlación de cuentas en UNIX.
Listado 8. Correlación de cuentas simple en UNIX
[tbost@samba ~]$ sudo vi /etc/samba/smb.conf [global] username map = /etc/samba/smbusers ... ... ... [tbost@samba ~]$ sudo vi /etc/samba/smbusers # Unix_name = SMB_name1 SMB_name2 ... root = administrator admin nobody = guest pcguest smbguest monty = Monty tbost = bostt sue = sue.george |
El comando de código en el Listado 8 configura el parámetro username map
para que use /etc/samba/smbusers as como el archivo de correlación. Al correlacionar cuentas, esto es sencillo: coloca el nombre de cuenta de UNIX en el lado izquierdo y los nombres de cuenta de Samba en el lado derecho, separados por el símbolo de igual
(=). Cuando los usuarios se conectan, Samba los correlaciona con la cuenta apropiada.
Para entornos de servidor de Samba típicos, las correlaciones de grupo son configurables usando el comando
net groupmap de la suite de Samba. Suponga que las cuentas de usuarios de Windows Monty, bostt y sue.george son miembros de las cuentas de grupo Domain Admins, Domain Users y Domain Guests. Si desea que estos usuarios tengan permiso de cuenta de grupo para los grupos de UNIX similares en el servidor de Samba, añada los nombres de usuario de cuenta de UNIX a cada grupo:
adm:x:4:root,adm,daemon,monty,tbost,sue users:x:100:monty,tbost,sue guests:x:507:monty,tbost,sue |
Esto es sólo un listado parcial de la lista completa de grupos en un servidor de Samba. Los administradores de grupos y los usuarios fueron creados cuando el sistema operativo de Linux fue instalado. Necesitará añadir cada usuario al grupo apropiado (vea la Tabla 2).
Tabla 2. Grupos de cuenta de Windows y UNIX a ser usados para la correlación
| Windows | UNIX | ID relativo (RID) de Windows | GID de UNIX |
|---|---|---|---|
| Domain Admins | adm | 512 | 4 |
| Domain Users | users | 513 | 100 |
| Domain Guests | guests | 514 | 507 |
El comando net groupmap puede correlacionar sus grupos de dominio (vea el Listado 9) y net groupmap list
lista las correlaciones de grupo de dominio. Comenzando con Samba 3.x, hay una nueva funcionalidad de correlación de grupos disponible para crear asociaciones entre un RID de grupo de Windows y un GID de UNIX.
Listado 9. Correlacionando grupos con el comando groupmap
[tbost@samba ~]$sudo net groupmap add ntgroup="Domain Admins" unixgroup=adm \ rid=512 type=d Successfully added group Domain Admins to the mapping db as a domain group [tbost@samba ~]$ sudo net groupmap add ntgroup="Domain Users" unixgroup=users \ rid=513 type=d Successfully added group Domain Users to the mapping db as a domain group [tbost@samba ~]$sudo net groupmap add ntgroup="Domain Guests" unixgroup=guests \ rid=514 type=d Successfully added group Domain Guests to the mapping db as a domain group [tbost@samba ~]$sudo net groupmap list Domain Users (S-1-5-21-2247757331-3676616310-3820305120-513) -> users Domain Guests (S-1-5-21-2247757331-3676616310-3820305120-514) -> guests Domain Admins (S-1-5-21-2247757331-3676616310-3820305120-512) -> adm |
La secuencia de etapas para correlacionar grupos en el Listado 9 es:
- Con privilegios de raíz, use el comando
net groupmap addpara especificar el grupo de Windows ntgroup='Domain Admin" para correlacionarlo con el grupo de UNIX, unixgroup=adm.Realice esta etapa para cada correlación de grupos.
- El comando final en el Listado 9 muestra la correlación para los grupos.
Usando correlación de identidades
Para la mayoría de los entornos, las correlaciones anteriores son suficientes. Sin embargo, si gestiona un entorno más complejo, tal como uno con múltiples servidores de Samba o estaciones de trabajo de distintos dominios conectándose a su servidor de Samba, debe familiarizarse con la correlación de identidades (IDMAP) y con Winbind. IDMAP puede ayudarle a superar los problemas de interoperabilidad entre un ID de seguridad (SID) y un UID o GID de Unix local.
Si su servidor de Samba es un miembro de un dominio de Windows, puede usar Winbind para correlacionar un SID con un UID o GID. Puede establecer el rango del parámetro idmap
y especificar cuánta información de cuenta debe almacenar en caché Winbind en el archivo smb.conf:
[global] idmap uid = 20000-50000 idmap gid = 20000-50000 winbind cache time = 300 |
Los parámetros en el código anterior instruyen a Winbind para que use el rango de UID local de 20000-50000 y un rango de GID de 20000-50000. Esta configuración es un rango relativamente seguro para un servidor de Samba que no espera tener varios miles de cuentas de usuarios o grupos locales. El parámetro winbind cache time = 300
instruye a Winbind para que almacene en caché información de cuenta durante 300 segundos. De forma predeterminada, Winbind almacena correlaciones en el archivo winbind_idmap.tdb.
Usando cuentas predeterminadas para forzar la propiedad
En lugar de añadir todos los usuarios a un grupo, tal vez encuentre menos abrumador usar los parámetros
force user y force group
. Cuando son establecidos, estos parámetros instruyen a Samba para que conecte a un usuario autorizado como si tuviera los permisos para el usuario y grupo especificados. Esto es especialmente benéfico cuando se construye un intercambio que será accedido por muchos usuarios y los permisos comunes son suficientes:
[global] username map = /etc/samba/smbusers force user = guest force group = +employees |
En el código anterior, el parámetro force user trata a todos los usuarios conectados como el usuario guest al trabajar con archivos. Un usuario aún debe conectarse con una cuenta de usuario válida.
Las muestras de configuración forzarán a las cuentas de usuario para
guest, con la cuenta de grupo employees.
Aprender
-
Aprenda más sobre
las bases de datos de información de cuenta de Samba en el Capítulo 11 del manual de Samba 3.x.
-
Aprenda más sobre la correlación de grupos en el capítulo 12 del manual de Samba 3.x.
-
Obtenga una descripción detallada de la herramienta
pdbediten la documentación del manual depdbedit. -
Aprenda más sobre la Correlación de Identidades (IDMAP) para servidores de controladores de dominio autónomos y principales en el Capítulo 14 del manual de Samba.
-
En el sitio del Programa de LPIC
, encuentre objetivos detallados, listas de tareas y preguntas de muestra para los tres niveles de certificación de administración de sistemas Linux de LPI. En particular, observe los objetivos detallados de LPI-302 y las
tareas y preguntas de muestra.
-
Revise toda la serie de preparación de exámenes de LPI en developerWorks para aprender los fundamentos de Linux y prepararse para la certificación de administrador de sistemas con base en los objetivos del examen LPI anteriores a abril de 2009.
-
Exam Preparation Resources for Revised LPIC Exams proporciona una lista de otros recursos de capacitación de certificación mantenidos por LPI.
-
En la zona Linux de developerWorks, encontrará cientos de artículos "cómo hacer" y tutoriales así como descargas, foros de discusión y una gran cantidad de otros recursos para desarrolladores y administradores de Linux.
-
Siga a DeveloperWorks en Twitter o suscríbase a un feed de tweets de Linux en developerWorks.
-
Permanezca actualizado(a) con los Eventos técnicos y webcasts de developerWorks enfocados en una variedad de productos IBM y de temas de la industria TI.
-
Asista a una sesión informativa gratuita de developerWorks
en vivo para actualizarse rápidamente sobre productos y herramientas IBM y sobre las tendencias de la industria de la TI.
-
Vea demostraciones developerWorks on-demand que van desde la instalación de producto y demostraciones de configuración para principiantes hasta funcionalidad avanzada para desarrolladores experimentados.
Comentar
-
Participe en la Comunidad My developerWorks.
Conéctese con otros usuarios developerWorks mientras explora los blogs, foros, grupos y wikis dirigidos a desarrolladores.

Tracy Bost es un desarrollador de software e ingeniero en sistemas experto. También es profesor y entrenador para el sistema operativo de Linux. Tracy ha sido certificado como Red Hat Certified Engineer (RHCE) y Microsoft Certified Systems Engineer (MCSE), además de ser un miembro activo de Linux Foundation. Ha trabajado en varias industrias, incluyendo hipotecas, bienes raíces y el sector sin fines de lucro.