cephx
En este capítulo se describe cómo exportar datos almacenados en un clúster de Ceph a través de un recurso compartido Samba/CIFS, de forma que se pueda acceder fácilmente a ellos desde equipos cliente Windows.* También incluye información que le ayudará a configurar una pasarela Samba de Ceph para unirse a Active Directory en el dominio de Windows* para autenticar y autorizar a los usuarios.
Debido al aumento de la sobrecarga de protocolo y a la latencia adicional causados por saltos de red adicionales entre el cliente y el almacenamiento, el acceso a CephFS a través de una pasarela Samba puede reducir de forma significativa el rendimiento de la aplicación en comparación con los clientes de Ceph nativos.
Los clientes nativos de CephFS y NFS no están restringidos por los bloqueos de archivos obtenidos a través de Samba, y viceversa. Las aplicaciones que se basan en el bloqueo de archivos con varios protocolos pueden sufrir daños en los datos si se accede a las vías compartidas de Samba respaldadas por CephFS a través de otros medios.
Para configurar y exportar un recurso compartido Samba, es necesario instalar los paquetes siguientes: samba-ceph y samba-winbind. Instale estos paquetes si no lo están:
cephadm@smb >
zypper install samba-ceph samba-winbind
Para preparar la exportación de un recurso compartido Samba, elija un nodo adecuado para que actúe como pasarela Samba. El nodo debe tener acceso a la red del cliente de Ceph, así como suficientes recursos de CPU, memoria y redes.
Es posible proporcionar funcionalidad de failover con CTDB y SUSE Linux Enterprise High Availability Extension. Consulte la Sección 20.1.3, “Configuración de alta disponibilidad” para obtener más información sobre la configuración de alta disponibilidad.
Asegúrese de que ya existe una instancia de CephFS en funcionamiento en el clúster. Para obtener información, consulte: Capítulo 11, Instalación de CephFS.
Cree un anillo de claves específico para la pasarela Samba en nodo de administración de Ceph y cópielo en el nodo de pasarela Samba:
cephadm@adm >
ceph
auth get-or-create client.samba.gw mon 'allow r' \ osd 'allow *' mds 'allow *' -o ceph.client.samba.gw.keyringroot@master #
scp
ceph.client.samba.gw.keyring SAMBA_NODE:/etc/ceph/
Sustituya SAMBA_NODE con el nombre del nodo de pasarela de Samba.
Los siguientes pasos se ejecutan en el nodo de pasarela de Samba. Instale Samba junto con el paquete de integración de Ceph:
cephadm@smb >
sudo zypper in samba samba-ceph
Sustituya el contenido por defecto del archivo /etc/samba/smb.conf
por lo siguiente:
[global] netbios name = SAMBA-GW clustering = no idmap config * : backend = tdb2 passdb backend = tdbsam # disable print server load printers = no smbd: backgroundqueue = no [SHARE_NAME] path = / vfs objects = ceph ceph: config_file = /etc/ceph/ceph.conf ceph: user_id = samba.gw read only = no oplocks = no kernel share modes = no
Los oplocks
(también conocidos como arrendamientos SMB2+) mejoran el rendimiento gracias al almacenamiento en caché agresivo del cliente, pero actualmente no son seguros si Samba se distribuye junto con otros clientes de CephFS, como el kernel mount.cephfs
, FUSE o NFS Ganesha.
Si Samba controla en exclusiva todo el acceso a la vía del sistema de archivos CephFS, el parámetro oplocks
se puede habilitar de forma segura.
Actualmente, kernel share modes
debe estar inhabilitado en un recurso compartido que se ejecute con el módulo CephFS vfs para que la provisión de archivos funcione correctamente.
Puesto que vfs_ceph
no requiere que se monte el sistema de archivos, la vía del recurso compartido se interpreta como una vía absoluta dentro del sistema de archivos de Ceph en el clúster de Ceph asociado. Para que la E/S del recurso compartido se correcta, la lista de control de acceso (ACL) de la vía debe permitir el acceso del usuario asignado para el cliente de Samba dado. Puede modificar la ACL montándola temporalmente a través del cliente del kernel de CephFS y utilizando las utilidades chmod
, chown
o setfacl
en la vía del recurso compartido. Por ejemplo, para permitir el acceso a todos los usuarios, ejecute:
root #
chmod 777 MOUNTED_SHARE_PATH
Inicie y habilite el daemon de Samba:
cephadm@smb >
sudo systemctl start smb.servicecephadm@smb >
sudo systemctl enable smb.servicecephadm@smb >
sudo systemctl start nmb.servicecephadm@smb >
sudo systemctl enable nmb.service
Aunque una distribución de varios nodos de Samba + CTDB tiene mayor disponibilidades que un nodo único (consulte el Capítulo 20, Exportación de datos de Ceph a través de Samba), no se admite el failover transparente en el cliente. Es probable que las aplicaciones experimenten una breve interrupción por el error del nodo de pasarela Samba.
En esta sección se proporciona un ejemplo de cómo establecer una configuración de dos nodos de alta disponibilidad de los servidores de Samba. La configuración requiere SUSE Linux Enterprise High Availability Extension. Los dos nodos se denominan earth
(192.168.1.1
) y mars
(192.168.1.2
).
Para obtener información sobre SUSE Linux Enterprise High Availability Extension, consulte https://www.suse.com/documentation/sle-ha-15/.
Asimismo, dos direcciones IP virtuales flotantes permiten a los clientes conectarse al servicio independientemente del nodo físico en el que se estén ejecutando. 192.168.1.10
se usa para la administración del clúster con Hawk2 y 192.168.2.1
se usa exclusivamente para las exportaciones CIFS. De esta forma es más fácil aplicar más tarde restricciones de seguridad.
El procedimiento siguiente describe la instalación de ejemplo. Encontrará más información en https://www.suse.com/documentation/sle-ha-15/book_sleha_quickstarts/data/art_sleha_install_quick.html.
Cree un anillo de claves específico de la pasarela Samba en el nodo de administración y cópielo en ambos nodos:
cephadm@adm >
ceph
auth get-or-create client.samba.gw mon 'allow r' \ osd 'allow *' mds 'allow *' -o ceph.client.samba.gw.keyringroot@master #
scp
ceph.client.samba.gw.keyringearth
:/etc/ceph/root@master #
scp
ceph.client.samba.gw.keyringmars
:/etc/ceph/
Prepare earth
y mars
para que alojen el servicio de Samba:
Asegúrese de que los paquetes siguientes están instalados antes de continuar: ctdb, tdb-toolsy samba (se necesitan para los recursos smb y nmb).
cephadm@smb >
zypper
in ctdb tdb-tools samba samba-ceph
Asegúrese de que los servicios ctdb
, smb
y nmb
están detenidos e inhabilitados:
cephadm@smb >
sudo systemctl disable ctdbcephadm@smb >
sudo systemctl disable smbcephadm@smb >
sudo systemctl disable nmbcephadm@smb >
sudo systemctl stop smbcephadm@smb >
sudo systemctl stop nmb
Abra el puerto 4379
del cortafuegos en todos los nodos. Esto es necesario para que CTDB pueda comunicarse con los demás nodos del clúster.
En earth
, cree los archivos de configuración de Samba. Más adelante, se sincronizarán automáticamente con mars
.
En /etc/ctdb/nodes
, inserte todos los nodos que contienen todas las direcciones IP privadas de cada nodo del clúster:
192.168.1.1 192.168.1.2
Configure Samba. Añada las líneas siguientes en la sección [global]
de /etc/samba/smb.conf
. Utilice el nombre de host que desee en lugar de "CTDB-SERVER" (en realidad, todos los nodos del clúster aparecerán como un nodo extenso con este nombre). Añada también una definición de recurso compartido; como ejemplo , puede usar SHARE_NAME:
[global] netbios name = SAMBA-HA-GW clustering = yes idmap config * : backend = tdb2 passdb backend = tdbsam ctdbd socket = /var/lib/ctdb/ctdb.socket # disable print server load printers = no smbd: backgroundqueue = no [SHARE_NAME] path = / vfs objects = ceph ceph: config_file = /etc/ceph/ceph.conf ceph: user_id = samba.gw read only = no oplocks = no kernel share modes = no
Tenga en cuenta que los archivos /etc/ctdb/nodes
y /etc/samba/smb.conf
deben coincidir en todos los nodos de pasarela Samba.
Instale y cargue el clúster de SUSE Linux Enterprise High Availability.
Registre SUSE Linux Enterprise High Availability Extension en earth
y mars
:
root@earth #
SUSEConnect
-r ACTIVATION_CODE -e E_MAIL
root@mars #
SUSEConnect
-r ACTIVATION_CODE -e E_MAIL
Instale ha-cluster-bootstrap en ambos nodos:
root@earth #
zypper
in ha-cluster-bootstrap
root@mars #
zypper
in ha-cluster-bootstrap
Inicialice el clúster en earth
:
root@earth #
ha-cluster-init
Deje que mars
se una al clúster:
root@mars #
ha-cluster-join
-c earth
Compruebe el estado del clúster. Debería observar que se han añadido dos nodos al clúster:
root@earth #
crm
status 2 nodes configured 1 resource configured Online: [ earth mars ] Full list of resources: admin-ip (ocf::heartbeat:IPaddr2): Started earth
Ejecute los comandos siguientes en earth
para configurar el recurso CTDB:
root@earth #
crm
configurecrm(live)configure#
primitive
ctdb ocf:heartbeat:CTDB params \ ctdb_manages_winbind="false" \ ctdb_manages_samba="false" \ ctdb_recovery_lock="!/usr/lib64/ctdb/ctdb_mutex_ceph_rados_helper ceph client.samba.gw cephfs_metadata ctdb-mutex" ctdb_socket="/var/lib/ctdb/ctdb.socket" \ op monitor interval="10" timeout="20" \ op start interval="0" timeout="200" \ op stop interval="0" timeout="100"crm(live)configure#
primitive
nmb systemd:nmb \ op start timeout="100" interval="0" \ op stop timeout="100" interval="0" \ op monitor interval="60" timeout="100"crm(live)configure#
primitive
smb systemd:smb \ op start timeout="100" interval="0" \ op stop timeout="100" interval="0" \ op monitor interval="60" timeout="100"crm(live)configure#
group
g-ctdb ctdb nmb smbcrm(live)configure#
clone
cl-ctdb g-ctdb meta interleave="true"crm(live)configure#
commit
El archivo binario /usr/lib64/ctdb/ctdb_mutex_ceph_rados_helper
de la opción de configuración ctdb_recovery_lock
tiene los parámetros CLUSTER_NAME CEPHX_USER RADOS_POOL y RADOS_OBJECT, en este orden.
Es posible anexar un parámetro de tiempo de espera de bloqueo adicional para sustituir el valor por defecto utilizado (10 segundos). Un valor más alto aumentará el tiempo de failover del master de recuperación CTDB, mientras que un valor más bajo puede dar lugar a que se detecte incorrectamente que el master de recuperación está inactivo, lo que desencadenaría conmutaciones por error sucesivas.
Añada una dirección IP agrupada en clúster:
crm(live)configure#
primitive
ip ocf:heartbeat:IPaddr2 params ip=192.168.2.1 \ unique_clone_address="true" \ op monitor interval="60" \ meta resource-stickiness="0"crm(live)configure#
clone
cl-ip ip \ meta interleave="true" clone-node-max="2" globally-unique="true"crm(live)configure#
colocation
col-with-ctdb 0: cl-ip cl-ctdbcrm(live)configure#
order
o-with-ctdb 0: cl-ip cl-ctdbcrm(live)configure#
commit
Si unique_clone_address
se define como true
(verdadero), el agente de recurso IPaddr2 añade un ID de clonación a la dirección especificada, lo que da como resultado que haya tres direcciones IP distintas. Normalmente, no son necesarias, pero ayudan a la hora de equilibrar la carga. Para obtener más información sobre este tema, consulte https://www.suse.com/documentation/sle-ha-15/book_sleha_guide/data/cha_ha_lb.html.
Compruebe el resultado:
root@earth #
crm
status Clone Set: base-clone [dlm] Started: [ factory-1 ] Stopped: [ factory-0 ] Clone Set: cl-ctdb [g-ctdb] Started: [ factory-1 ] Started: [ factory-0 ] Clone Set: cl-ip [ip] (unique) ip:0 (ocf:heartbeat:IPaddr2): Started factory-0 ip:1 (ocf:heartbeat:IPaddr2): Started factory-1
Realice una prueba desde un equipo cliente. En un cliente Linux, ejecute el comando siguiente para comprobar si puede copiar archivos desde el sistema y en el sistema:
root #
smbclient
//192.168.2.1/myshare
Puede configurar la pasarela Samba de Ceph para que se convierta en miembro del dominio de Samba compatible con Active Directory (AD). Como miembro del dominio de Samba, puede usar usuarios y grupos de dominio en listas de acceso local (ACL) en archivos y directorios del sistema CephFS exportado.
En esta sección se presenta los pasos preparatorios que debe tener en cuenta antes de configurar Samba. Empezar con un entorno limpio ayuda a evitar confusiones y permite verificar que no se mezcla ningún archivo de la instalación anterior de Samba con la nueva instalación del miembro de dominio.
Todos los relojes de los nodos de la pasarela Samba deben sincronizarse con el controlador de dominio de Active Directory. La diferencia de hora puede provocar errores de autenticación.
Compruebe que no se esté ejecutando ningún proceso de Samba ni de almacenamiento en caché de nombres:
cephadm@smb >
ps ax | egrep "samba|smbd|nmbd|winbindd|nscd"
Si en el resultado aparece algún proceso samba
, smbd
, nmbd
, winbindd
o nscd
, deténgalos.
Si ha ejecutado previamente una instalación de Samba en este host, elimine el archivo /etc/samba/smb.conf
. Elimine también todos los archivos de base de datos de Samba, como los archivos *.tdb
y *.ldb
. Para mostrar directorios que contienen bases de datos Samba, ejecute:
cephadm@smb >
smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
Active Directory (AD) utiliza DNS para localizar otros controladores de dominio (CD) y servicios, como Kerberos. Por lo tanto, los miembros del dominio de AD y los servidores deben poder resolver las zonas DNS de AD.
Verifique que DNS esté configurado correctamente y que tanto la búsqueda directa como la inversa den resultados correctamente, por ejemplo:
cephadm@adm >
nslookup DC1.domain.example.com
Server: 10.99.0.1
Address: 10.99.0.1#53
Name: DC1.domain.example.com
Address: 10.99.0.1
cephadm@adm >
10.99.0.1
Server: 10.99.0.1
Address: 10.99.0.1#53
1.0.99.10.in-addr.arpa name = DC1.domain.example.com.
AD utiliza registros SRV para localizar servicios, como Kerberos y LDAP. Para comprobar si los registros SRV se resuelven correctamente, utilice la shell interactiva nslookup
, por ejemplo:
cephadm@adm >
nslookup
Default Server: 10.99.0.1
Address: 10.99.0.1
> set type=SRV
> _ldap._tcp.domain.example.com.
Server: UnKnown
Address: 10.99.0.1
_ldap._tcp.domain.example.com SRV service location:
priority = 0
weight = 100
port = 389
svr hostname = dc1.domain.example.com
domain.example.com nameserver = dc1.domain.example.com
dc1.domain.example.com internet address = 10.99.0.1
Samba admite los back-ends Kerberos Heimdal y MIT. Para configurar Kerberos en el miembro de dominio, defina lo siguiente en el archivo /etc/krb5.conf
:
[libdefaults] default_realm = DOMAIN.EXAMPLE.COM dns_lookup_realm = false dns_lookup_kdc = true
En el ejemplo anterior, Kerberos se configura para el reino DOMAIN.EXAMPLE.COM. No se recomienda definir ningún parámetro adicional en el archivo /etc/krb5.conf
. Si /etc/krb5.conf
contiene una línea include
, no funcionará; debe eliminar esta línea.
Cuando se une un host al dominio, Samba intenta registrar el nombre de host en la zona DNS de AD. Para ello, la utilidad net
debe ser capaz de resolver el nombre de host mediante DNS o con una entrada correcta en el archivo /etc/hosts
.
Para verificar que el nombre de host se resuelve correctamente, utilice el comando getent hosts
:
cephadm@adm >
getent hosts example-host
10.99.0.5 example-host.domain.example.com example-host
El nombre de host y el nombre completo no deben resolverse en la dirección IP 127.0.0.1 ni en ninguna dirección IP que no sea la utilizada en la interfaz LAN del miembro de dominio. Si no se muestra ningún resultado o el host se resuelve en la dirección IP incorrecta y no está utilizando DHCP, defina la entrada correcta en el archivo /etc/hosts
:
127.0.0.1 localhost 10.99.0.5 example-host.samdom.example.com example-host
/etc/hosts
Si utiliza DHCP, compruebe que /etc/hosts
solo contiene la línea "127.0.0.1". Si sigue teniendo problemas, póngase en contacto con el administrador del servidor DHCP.
Si necesita añadir alias al nombre de host del equipo, añádalos al final de la línea que comienza con la dirección IP del equipo, no a la línea "127.0.0.1".
En esta sección se presenta información sobre las opciones de configuración específicas que debe incluir en el archivo de configuración de Samba /etc/samba/smb.conf
.
winbindd
#Si necesita que los usuarios tengan diferentes shells de entrada a la sesión o vías de directorio de inicio de Unix, o si desea que tengan el mismo ID en todas partes, deberá usar el back-end winbind "ad" y añadir atributos RFC2307 a AD.
Los atributos RFC2307 no se añaden automáticamente cuando se crean usuarios o grupos.
Los números de ID presentes en un controlador de dominio (números en el rango 3000000) no son atributos RFC2307 y no se utilizarán en los miembros de dominio de Unix. Si necesita tener los mismos números de ID en todas partes, añada los atributos uidNumber
y gidNumber
a AD y utilice el back-end winbind "ad" en los miembros de dominio de Unix. Si decide añadir los atributos uidNumber
y gidNumber
a AD, no utilice números en el rango 3000000.
Si los usuarios solo usarán el controlador de dominio de AD de Samba para la autenticación y no almacenarán datos ni entrarán a la sesión en él, puede usar el back-end winbind "rid". Esto calcula los ID de usuario y grupo del RID de Windows*. Si utiliza la misma sección [global]
de smb.conf
en cada miembro de dominio de Unix, obtendrá los mismos ID. Si utiliza el back-end "rid", no es necesario añadir nada a AD y los atributos RFC2307 se omitirán. Cuando utilice el back-end "rid", defina los parámetros template shell
y template homedir
en smb.conf
. Este valor es global y todos los usuarios obtienen la misma shell de entrada a la sesión y la misma vía del directorio de inicio de Unix (a diferencia de los atributos RFC2307, donde es posible definir shells y vías del directorio de inicio de Unix individuales).
Hay otra forma de configurar Samba: si necesita que los usuarios y grupos tengan el mismo ID en todas partes, pero solo necesitan que los usuarios tengan la mismo shell de entrada a la sesión y usen la misma vía de directorio de inicio de Unix. Puede hacerlo utilizando el back-end winbind "ad" y las líneas de plantilla en smb.conf
. De esta forma solo necesita añadir los atributos uidNumber
y gidNumber
a AD.
Encontrará información detallada sobre los back-end de asignación de ID disponibles en las páginas man relacionadas: man 8 idmap_ad
, man 8 idmap_rid
y man 8 idmap_autorid
.
Después de decidir qué back-end winbind se va a utilizar, debe especificar los rangos que se deben usar con la opción idmap config
en smb.conf
. Por defecto, hay varios bloques de usuarios y grupos en un miembro de dominio de Unix:
ID | Rango |
---|---|
0-999 | Usuarios y grupos del sistema local. |
A partir de 1000 | Usuarios y grupos de Unix local. |
A partir de 10000 | Usuarios y grupos del dominio |
Como puede ver en los rangos anteriores, no debe definir que los rangos "*" ni "DOMAIN" comiencen en 999 o un valor más bajo, ya que interferirían con los usuarios y grupos del sistema local. También debe dejar un espacio para cualquier usuario y grupo local de Unix, por lo que una buena opción podría ser iniciar los rangos de idmap config
en 3000.
Debe decidir cuánto podría crecer "DOMAIN" y si tiene previsto tener dominios de confianza. A continuación, puede definir los rangos de idmap config
de la siguiente manera:
Dominio | Rango |
---|---|
* | 3000-7999 |
DOMINIO | 10000-999999 |
DE CONFIANZA | 1000000-9999999 |
root
local #Samba permite asignar cuentas de dominio a una cuenta local. Utilice esta función para ejecutar operaciones de archivo en el sistema de archivos del miembro del dominio como un usuario diferente que el de la cuenta que pidió la operación en el cliente.
La asignación del administrador de dominio a la cuenta raíz
local es opcional. Configure solo la asignación si el administrador de dominio necesita ser capaz de ejecutar operaciones de archivo en el miembro de dominio con permisos de usuario root
. Tenga en cuenta que asignar el administrador a la cuenta raíz
no permite entrar a la sesión en los miembros del dominio Unix como "Administrador".
Para asignar el administrador del dominio a la cuenta raíz
local, siga estos pasos:
Añada el siguiente parámetro a la sección [global]
del archivo smb.conf
:
username map = /etc/samba/user.map
Cree el archivo /etc/samba/user.map
con el siguiente contenido:
!root = DOMAIN\Administrator
Si utiliza el back-end de asignación de ID "ad", no defina el atributo uidNumber
para la cuenta de administrador de dominio. Si la cuenta tiene el atributo definido, el valor sustituye el UID local "0" del usuario root
y, por lo tanto, se produce un error en la asignación.
Para obtener más información, consulte el parámetro username map
en la página man de smb.conf
(man 5 smb.conf
).
Para unir el host a Active Directory, ejecute:
cephadm@smb >
net ads join -U administrator
Enter administrator's password: PASSWORD
Using short domain name -- DOMAIN
Joined EXAMPLE-HOST to dns domain 'DOMAIN.example.com'
Para hacer que los usuarios y grupos de dominio estén disponibles en el sistema local, debe habilitar la biblioteca del conmutador de servicio de nombres (NSS). Añada la entrada winbind
al final de las siguientes bases de datos en el archivo /etc/nsswitch.conf
:
passwd: files winbind group: files winbind
Conserve la entrada files
como el primer origen para ambas bases de datos. Esto permite al NSS buscar usuarios y grupos de dominio desde los archivos /etc/passwd
y /etc/group
antes de consultar el servicio winbind
.
No añada la entrada winbind
a la base de datos shadow
del NSS. Esto puede causar que la utilidad wbinfo
falle.
No utilice los mismos nombres de usuario en el archivo /etc/passwd
local que en el dominio.
Hay tres servicios que debe habilitar e iniciar para que el miembro de dominio de Unix sea completamente funcional: smdb
, nmdb
y winbindd
. Habilítelos e inícielos mediante los siguientes comandos:
cephadm@smb >
sudo systemctl enable smbd.service && systemctl start smbd.servicecephadm@smb >
sudo systemctl enable nmbd.service && systemctl start nmbd.servicecephadm@smb >
sudo systemctl enable winbindd.service && systemctl start winbindd.service
nmbd
opcional
Si no necesita navegar por la red, no es necesario habilitar e iniciar el servicio nmbd
en un miembro de dominio de Unix.
winbindd
#winbindd
#
Para verificar si el servicio winbindd
puede conectarse a los controladores de dominio de AD o a un controlador de dominio primario, escriba:
cephadm@smb >
wbinfo --ping-dc
checking the NETLOGON for domain[DOMAIN] dc connection to "DC.DOMAIN.EXAMPLE.COM" succeeded
Si se produce un error en el comando anterior, verifique que el servicio winbindd
se está ejecutando y que el archivo smb.conf
está configurado correctamente.
La biblioteca libnss_winbind
permite buscar usuarios y grupos de dominio. Por ejemplo, para buscar el usuario de dominio "DOMAIN\demo01":
cephadm@smb >
getent passwd DOMAIN\\demo01
DOMAIN\demo01:*:10000:10000:demo01:/home/demo01:/bin/bash
Para buscar el grupo de dominio "Domain Users":
cephadm@smb >
getent group "DOMAIN\\Domain Users"
DOMAIN\domain users:x:10000:
La biblioteca del conmutador del servicio de nombres (NSS) permite usar cuentas de usuario de dominio y grupos en los comandos. Por ejemplo, para definir como propietario de un archivo al usuario de dominio "demo01" y como grupo de dominio a "Domain Users", escriba:
cephadm@smb >
chown "DOMAIN\\demo01:DOMAIN\\domain users" file.txt