Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > sysadmin > Anotaciones sobre Samba

Anotaciones sobre Samba

Las recetas, trucos y/ó anotaciones que a continuación aparecen son todas para un servidor Debian Lenny actuando en solitario frente a una red windows, principalmente Windows XP, pero con alguna versión 2000 purulando por ella.

Así pues, y como no estoy contemplando un número ilimitado de escenarios en red, es muy posible que lo aquí expuesto apenas tenga utilidad más allá de su problemática.

Conceptos varios

La documentación oficial de la versión 3 incluye una descripción del escenario muy clarificadora. Mientras que en las redes Windows existen dos tipos de seguridad, uno basado en los recursos (shares) y otro en los usuarios (users), Samba es mucho más flexible y proporciona hasta cinco tipos, uno basado en recursos y cuatro en los usuarios.

Dado que Samba es un puente entre Windows y GNU/Linux es necesario tener en cuenta las diferencias conceptuales de ambos mundos en archivos, usuarios y permisos de acceso de los últimos sobre los primeros. También conviene recordar uno de los puntos que se remarcan en la documentación y es que, al margen del tipo de seguridad que se defina en su configuración, Samba es un servidor de archivos y de impresoras; por lo visto existe una confusión al respecto cuando se define en la configuración security=server y muchos entienden que es entonces cuando se comporta como un servidor. No, en este caso Samba informa al cliente que está empleando seguridad basada en usuarios pero pasando todas las peticiones de identificación y autorización a otro servidor.

Aún más ...

En el mundo de los servidores SMB/CIFS éstos informan al cliente al inicio de la sesión del tipo de seguridad que ofrecen, orientada a recursos (shares) ú orientada a usuarios (users). Son los clientes los que con esta información deciden qué y cómo identificarse y solicitar acceso a los recursos, y no afecta directamente a la forma que tiene el servidor Samba de encarar la seguridad.

El nivel de seguridad de recurso protege a éstos únicamente con una contraseña, no es necesario ninguna otra información más por parte del cliente, mientras que el nivel de seguridad de usuario precisa un nombre identificador y una contraseña para disponer de acceso al recurso. Es posible encontrar una explicación sobre esto, breve y concisa (aunque en inglés), en la red de Microsoft.

Puede sonar raro, pero por lo visto en el mundillo SMB/CIFS son los clientes los que inician y controlan las operaciones. Los servidores se limitan a informar de lo que está disponible y qué acciones están permitidas.

El término cliente, pues, se aplica a cualquier agente capaz de interactuar con el servidor Samba; bien sea otro servidor Samba, un puesto de trabajo (workstation), un servidor Windows, ó programas cliente simples como smbclient.

No hay que olvidar que el protocolo SMB fue desarrollado inicialmente por IBM y que la variante que tratamos es fruto de la unión de dicho protocolo original con LAN Manager y otros inventos más de la casa.

Niveles de seguridad

Seguridad a nivel de usuario (user level security)

En este nivel el cliente, tras la negociación de protocolo, envía una petición de configuración de sesión que incluye un nombre de usuario y una contraseña. El servidor puede rechazar ó aceptar dicha combinación basándose únicamente en ella y/ó en la máquina de origen de la conexión, dado que no hay todavía un nombre de recurso que emplear para ello.

El cliente espera que a partir de entonces sea capaz de montar recursos usando conexiones árbol sin especificar una contraseña puesto que ya lo ha hecho al comienzo. Además, también es posible que el cliente envíe varias credenciales en la configuración de la sesión, en cuyo caso el servidor le devolverá un identificador bajo el que estárán todas ellas.

Nota: Los nombres de cuenta de usuario en las redes windows no distinguen entre mayúsculas y minúsculas.

El recurso debe tener la siguiente estrofa mínima en la configuración:

security = user

Seguridad a nivel de recurso (share level security)

En este tipo de seguridad el cliente presenta credenciales ante cada recurso, enviando una contraseña junto a la petición de conexión en árbol, pero sin añadir un nombre de usuario ya que espera que el recurso esté protegido únicamente por la contraseña. Ante esto Samba tiene que apañárselas para determinar el usuario que acompaña a la contraseña, ya que siempre emplea el esquema de autorización UNIX donde priman ambos valores conjuntos.

¿ Cómo determina Samba el nombre del usuario en estos casos ? Pues de dos formas:

  1. Guardando el nombre de usuario que le proporciona el cliente cuando pide un inicio de sesión, ya que muchos de ellos cuando conectan efectúan dicha petición y le añaden el nombre del usuario aunque no la contraseña, y todo ello a pesar de que el servidor les informe previamente de que el nivel de seguridad es a nivel de recurso.

  2. Si lo anterior no es posible Samba procede entonces a verificar la contraseña recibida, contrastándola con la base de datos de usuarios hasta que encuentra una coincidencia entre ambas. De esto se deduce que es mejor no complicar las cosas y no permitir que dos usuarios compartan contraseña.

    Por otra parte, las bases de datos de usuarios que consulta Samba depende de si en el sistema existe un NSS en funcionamiento; si es así se consultará el archivo /etc/nsswitch.conf (donde puede que se incluyan cosas como NIS y/ó LDAP), y en caso contrario se empleará únicamente /etc/passwd y derivados directos.

El recurso debe tener la siguiente estrofa mínima en la configuración:

security = share

Usuarios

Optamos por emplear los usuarios del sistema debido a que ya existe una infraestructura de servicios y no queremos duplicar la base de datos de accesos y usuarios, ni permitir que desde las máquinas windows se puedan cambiar contraseñas ni crear usuarios.

En este caso conviene recordar, y mucho, que si se pretende lo contrario, que la máquina Debian se emplee como un servidor de dominio windows, las tareas y disposiciones previas cambian bastante de lo que aquí anoto.

En Debian, pues, es conveniente crear grupos de usuarios y asignarles contenido según las necesidades de acceso que tengan a los diferentes recursos.

Directorios

Para las rutas creamos un directorio raíz y le aplicamos los permisos adecuados según el ejemplo de la guía Samba.

# mkdir -p /srv/samba
# chown root.root /srv/samba
# chmod ug+rwxs,o-rwx /srv/samba

Tras lo cual los permisos de acceso al raíz quedan

drwsrws--- 2 root root 4096 oct  5 11:40 /srv/samba

Y continuamos con los directorios raíz de los correspondientes recursos:

# mkdir -p /srv/samba/{publico,semipublico,privado}
# chown -R nobody.nogroup /srv/samba/publico 
# chown -R root.staff /srv/samba/semipublico
# chown -R root.staff /srv/samba/privado
# chmod ug+rwxs,o-w /srv/samba/{publico,semipublico,privado}

Es decir, queremos disponer de un directorio publico en el que podrá leer y escribir cualquiera, un directorio semipúblico en el que únicamente los usuarios del grupo staff podrán escribir y todos los demás leer, y otro directorio totalmente privado para el mismo grupo staff.

Recursos

  • Para el recurso público la configuración es la siguiente:

    [pub]
        comment     = Archivo público 
        path        = /srv/samba/publico
        guest ok    = yes 
        writable    = yes
    
  • Para el recurso semipúblico sería:

    [semipublico]
        comment     = Archivos semipúblicos 
        path        = /srv/samba/semipublico
        guest ok    = yes
        writable    = no
        browseable  = yes
        write list  = @staff
    
  • Para el recurso privado:

    [privado]
        comment     = Archivos privados
        path        = /srv/samba/privado
        read only   = No
        guest ok    = No
        writable    = yes
        browseable  = yes
        valid users = @staff
    

Errores

PENDIENTE DE COMPLETAR