viernes, 25 de octubre de 2019

Credenciales ocultas en samba

Uno de los problemas cuando montamos una unidad o carpeta compartida por samba es que las credenciales del usuario van en texto claro.
Revisa este artículo sobre cómo acceder a una carpèta compartida con samba y permisos de usuario no de root.

Veamos como solucionarlo

En cualquiera de las dos soluciones propuestas en el anterior artículo, el nombre de usuario y su clave estaban a la vista de cualquiera.

A) En el archivos fstab:

//192.168.0.148/Downloads/ /home/pedro/share cifs noauto,users,username=luis,passwd=luis


B) Con el comando mount:

sudo mount -t cifs //192.168.0.148/Downloads /home/pedro/share -o username=luis,password=luis,uid=1000,gid=1000

Esto es un grave problema de seguridad, así que lo mejor es proteger esas credenciales metiéndolas en un archivo que solo puedan leer las personas adecuadas.

Para ello creamos un archivo con dos líneas de texto, en nuestro ejemplo:

username=luis
password=luis

Nota: si estás en un dominio hay que añadir una nueva linea con domain=nombre_del_dominio

Ya tenemos el archivo, le llamaremos credenciales_samba.

Ahora hay algunas consideraciones a tener en cuenta:
  1. - ¿Qué usuarios pueden leer este archivo?
    En muchos sitios y documentación se recomiendan poner al archivo los permisos 0600 , que dan permiso de lectura y escritura únicamente al usuario que creó el archivo.
    Esto está bien en sistemas monousuario pero si queremos que varios usuarios puedan acceder a la carpeta compartida, hay que cambiar varias cosas.

    Mi recomendación es que establezcamos estos permisos: chmod 0640 credenciales_samba
    Así el usuario que lo creo puede leer y escribir y el grupo al que pertenece el archivo también puede leer. Aquí está la solución, hay que crear un grupo con todos los usuarios que quieres que accedan a la carpeta compartida y luego cambiar la propiedad del grupo del archivo a ese grupo.
    Por ejemplo:
    • Creamos el grupo: sudo groupadd gruposamba1
    • Asignamos a los usuarios al grupo : usermod -a -G gruposamba1 pedro
      Con estas opciones (-a -G) añadimos al usuario pedro a otro grupo además del suyo principal
      (
      Así para todos los usuarios que queremos que pertenezcan al grupo)
    • Para comprobar que usuarios hay en un grupo: getent group gruposamba1

    • Cambiamos el grupo propietario del archivo credenciales_sambasudo chgrp gruposamba1 credenciales_samba

    • Comprobamos que funciona: sudo mount -t cifs //192.168.0.148/Downloads /home/pedro/share -o credentials=/home/pedro/credenciales_samba,uid=1000,gid=1000
  2. - ¿Dónde colocamos el archivo?
    Parecería que todo está resuelto pero no, porque el archivo está en un directorio donde sólo tiene acceso el usuario pedro, credentials=/home/pedro/credenciales_samba y eso no está bien.

    Hay que mover el archivo a un directorio dónde todo el mundo pueda leer.
    Existen muchas alternativas, a mi me gusta el /etc, que es un directorio donde están los archivos de configuración del sistema y que por tanto me parece adecuado.
    1. Movemos el archivo: sudo mv credenciales_samba /etc/credenciales_samba
    2. Comprobamos que funciona: sudo mount -t cifs //192.168.0.148/Downloads /home/pedro/share -o credentials=/etc/credenciales_samba,uid=`id -u`

      Nota: he cambiado el id=1000 por `id -u` para que sirva para cualquier usuario que ejecute el comando anterior

Si queremos usarlo en el archivo fstab hay que cambiar la línea que monta la carpeta compartida por esta:

//192.168.0.148/Downloads/ /home/pedro/share cifs noauto,users,credentials=/etc/credenciales_samba

Espero te haya gustado, y si tienes otras ideas para contactar conmigo @mosqueteroweb en Telegram y Twitter.