Acceso multiprotocolo con ONTAP

ONTAP, desde prácticamente desde sus inicios, permite el acceso nativo por los protocolos SMB y NFS simultáneamente al mismo volumen a través de los shares y los exports.

Los permisos del sistema de ficheros se aplican a nivel de volumen, y existen tres tipos de estilos de seguridad: NTFS, UNIX y mixto. Existe mucha documentación donde se detalla el comportamiento para cada uno de los estilos de seguridad https://library.netapp.com/ecmdocs/ECMP1196891/html/GUID-0217E8D4-0DEE-420A-8DF9-E0B69FE4C427.html. Un malentendido muy común es que el estilo de seguridad mixto de ONTAP es el necesario para acceder a través de los dos protocolos.

Muchos entornos no requieren una gestión de permisos complicados en los dos entornos. Normalmente el acceso a través de SMB posee una estructura de usuarios y permisos más compleja gestionada por Active Directory, y un reducido grupo de servidores con unos usuarios determinados necesitan acceder a los mismos datos pero requieren mantener los permisos. Este escenario que suele ser el más común, se soluciona implantando un estilo de seguridad NTFS a nivel de volumen y haciendo una translación de los usuarios del mundo Unix/Linux al mundo Windows para verificar el acceso. ONTAP, por defecto, hace la traslación entre ambos mundos de forma nativa en el formato miDominio\miUsuario (Windows) <> miUsuario (Linux).

A continuación se muestra este escenario descrito, con acceso al mismo volumen de datos por protocolo SMB con permisos gestionados por Active Directory, y un pequeño grupo de servidores web con PHP accediendo a la información, a través del usuario de PHP www-data. Para gestionar estos permisos se crea un usuario nuevo en el Active Directory con este usuario www-data.

Desde ONTAP se crea un volumen con estilo de seguridad NTFS pues es el estilo de seguridad más complejo a gestionar.

cluster1::> volume show -vserver svm1 -fields security-style
vserver volume   security-style
------- -------- --------------
svm1    vol_www  ntfs

Y se establece un share permitiendo el acceso exclusivo a ese usuario de Active Directory. En el acceso a este volumen se establecerían todos los usuarios Windows que se deseen que se tenga acceso.

cluster1::> vserver cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm1           vol_www       /vol_www          browsable  -        www-data / Full Control
                                               changenotify
                                               oplocks
                                               show-previous-versions

En ONTAP se crea localmente este usuario www-data, y previamente el grupo al que pertenece este usuario.

cluster1::> vserver services unix-group create -name www-data -id 33
cluster1::> vserver services unix-user create -user www-data -id 33 -primary-gid 33
cluster1::> vserver services unix-user show
               User            User   Group  Full
Vserver        Name            ID     ID     Name
-------------- --------------- ------ ------ --------------------------------
svm1           nobody          65535  65535
svm1           pcuser          65534  65534
svm1           root            0      1
svm1           www-data        33     33

Desde los clientes Windows se monta el volumen por SMB y se verifica que se tiene acceso.

C:\Users\Administrator.DEMO>net use f: \\192.168.0.233\vol_www
The password is invalid for \\192.168.0.233\vol_www.

Enter the user name for '192.168.0.233': demo\www-data
Enter the password for 192.168.0.233:
The command completed successfully.

Desde los servidores Linux se crea el usuario local www-data y se habilita el acceso.

[root@rhel1 ~]# groupadd -g 33 www-data
[root@rhel1 ~]# useradd -u 33 -g 33 -d /mnt/www www-data
[root@rhel1 ~]# passwd www-data

Se monta el volumen por NFS desde los servidores Linux.

[root@rhel1 ~]# mkdir /mnt/www-data
[root@rhel1 ~]# mount -t nfs 192.168.0.132:/vol_www /mnt/www-data/

Se verifica que el usuario root no tiene acceso, pues ONTAP traslada el usuario de Linux root como el usuario DEMO\Administrator, que no tiene acceso al share.

[root@rhel1 ~]# ls -altr /mnt/www-data/
ls: cannot open directory /mnt/www-data/: Permission denied

Accediendo con el usuario www-data se verifica que se tiene acceso.

[www-data@rhel1 ~]$ ls -altr /mnt/www-data/
total 8
drwxrwxrwx  2 root root 4096 Jul 22 13:56 .
drwxr-xr-x. 5 root root   42 Jul 22 14:03 ..
drwxrwxrwx  3 root root 4096 Jul 22 14:05 .snapshot

Desde ONTAP se puede comprobar las sesiones SMB abiertas y los usuarios que la tienen abierta del mundo Windows y mundo Linux respectivamente.

cluster1::> vserver cifs session show -fields windows-user,unix-user
node        vserver session-id           connection-id windows-user  unix-user
----------- ------- -------------------- ------------- ------------- ---------
cluster1-01 svm1    14047571662698709004 3364714733    DEMO\www-data www-data

Desde el servidor Linux se crea un fichero en el volumen exportado por NFS y se verifica el usuario propietario.

[www-data@rhel1 ~]$ echo > /mnt/www-data/file_from_linux.txt
[www-data@rhel1 ~]$ ls -altr /mnt/www-data/
total 8
drwxr-xr-x. 5 root     root       42 Jul 22 14:03 ..
drwxrwxrwx  9 root     root     4096 Jul 23 06:05 .snapshot
drwxrwxrwx  2 root     root     4096 Jul 23 06:59 .
-rwxrwxrwx  1 www-data www-data    1 Jul 23 06:59 file_from_linux.txt

Desde el servidor Windows se crea un fichero en el volumen exportado por SMB y se verifica el usuario propietario.

F:\>echo > file_from_windows.txt

F:\>dir
 Volume in drive F is vol_www
 Volume Serial Number is 8024-EB3D

 Directory of F:\

07/23/2019  07:44 PM    <DIR>          .
07/23/2019  07:44 PM    <DIR>          ..
07/23/2019  06:59 AM                 1 file_from_linux.txt
07/23/2019  07:44 PM                13 file_from_windows.txt
               2 File(s)             14 bytes
               2 Dir(s)   5,098,917,888 bytes free

Se verifica que el usuario del mundo Windows propietario del fichero generado desde el mundo Linux es el mismo.

Se comprueba desde el servidor Linux el usuario propietario del fichero creado desde el entorno Windows.

[www-data@rhel1 ~]$ ls -altr /mnt/www-data/
total 8
drwxr-xr-x. 5 root     root       42 Jul 22 14:03 ..
drwxrwxrwx  9 root     root     4096 Jul 23 06:05 .snapshot
-rwxrwxrwx  1 www-data www-data    1 Jul 23 06:59 file_from_linux.txt
-rwxrwxrwx  1 www-data www-data    0 Jul 23 07:01 file_from_windows.txt
drwxrwxrwx  2 root     root     4096 Jul 23 07:01 .

Con comandos avanzados de ONTAP se puede verificar el usuario de cada fichero que coincide con los vistos desde cada uno de los entornos.

cluster1::*> vserver security file-directory show -vserver svm1 -path /vol_www/file_from_linux.txt

                Vserver: svm1
              File Path: /vol_www/file_from_linux.txt
      File Inode Number: 97
         Security Style: ntfs
        Effective Style: ntfs
         DOS Attributes: 20
 DOS Attributes in Text: ---A----
Expanded Dos Attributes: -
           UNIX User Id: 33
          UNIX Group Id: 33
         UNIX Mode Bits: 777
 UNIX Mode Bits in Text: rwxrwxrwx
                   ACLs: NTFS Security Descriptor
                         Control:0x8004
                         Owner:DEMO\www-data
                         Group:DEMO\Domain Users
                         DACL - ACEs
                           ALLOW-Everyone-0x1f01ff-(Inherited)

cluster1::*> vserver security file-directory show -vserver svm1 -path /vol_www/file_from_windows.txt

                Vserver: svm1
              File Path: /vol_www/file_from_windows.txt
      File Inode Number: 15442
         Security Style: ntfs
        Effective Style: ntfs
         DOS Attributes: 20
 DOS Attributes in Text: ---A----
Expanded Dos Attributes: -
           UNIX User Id: 33
          UNIX Group Id: 33
         UNIX Mode Bits: 777
 UNIX Mode Bits in Text: rwxrwxrwx
                   ACLs: NTFS Security Descriptor
                         Control:0x8004
                         Owner:DEMO\www-data
                         Group:DEMO\Domain Users
                         DACL - ACEs
                           ALLOW-Everyone-0x1f01ff-(Inherited)