6-Tuto Linux Capitulo (Servidores de Archivos)

23
Módulo VI Servidores de archivos Introducción En este módulo se estudiará diferentes métodos para compartir archivos y espacio en disco en Linux en forma remota. NFS (Networks File Systems - Sistema de archivos de red) Linux, como casi todos los UNIX, implementan NFS. Este protocolo permite compartir archivos y espacio en disco entre máquinas de diferentes plataformas, en una forma completamente transparente para el usuario. Para los usuarios, un disco activado en forma remota con este protocolo, es un directorio más. Configuración Existen dos tipos de configuraciones, una es la que se realiza del lado del equipo que contiene el directorio a compartir (el servidor), y la otra es el equipo cliente que utilizará este directorio en forma remota. El servidor Existe un único archivo donde se realiza toda la configuración del servicio NFS. Este archivo es el /etc/exports. En este archivo se especificarán todos los directorios que se desean publicar para ser utilizados, desde los clientes NFS, con este protocolo. Formato del archivo /etc/exports: <directorio> <equipos_cliente>[(opciones)] directorio: Acá se especifica el directorio publicado. equipos_cliente: Acá se especifican qué equipos tendrán acceso al directorio referencia. Los equipos cliente se pueden especificar de cuatro formas, haciendo referencia a un equipo únicamente, utilizando comodines (asteriscos "*" y signos de pregunta "?"), utilizando números de IP o haciendo referencia a grupos de red (combinando el uso con el servicio NIS). opciones: Acá se especifican las diferentes opciones que tendrá cada equipo sobre este directorio. En este documento solo mencionaremos las más utilizadas: (ro): Publica el directorio como de solo lectura. No permite que los clientes escriban sobre el directorio. (no_root_squash): Esta opción permite al cliente grabar archivos a nombre del superusuario (root) si el usuario se conectó al equipo cliente con root. (Nota: Cuando se utiliza NFS, desde el equipo cliente, el usuario no tiene los mismos permisos como si el directorio fuera un disco local) (rw): Con esta opción se le permite a los clientes leer y escribir sobre el directorio publicado. (secure): Obliga a todos los clientes a hacer requerimientos de NFS por debajo del puerto 1024. Ejemplos: / master(rw)trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) /pub (ro,insecure,all_squash) El cliente En un cliente Linux que desea utilizar espacio en disco de otros equipos vía NFS solo debe activar los sistemas de archivos (file systems) utilizando este protocolo. La forma de realizarlo sería la siguiente: nfs -t nfs <servidor:directorio> <directorio_local_destino> De necesitar guardar esta configuración en el archivo /etc/fstab, se debe escribir de la siguiente forma dentro del archivo: <servidor:directorio> <punto_de_montaje> nfs <opciones>

Transcript of 6-Tuto Linux Capitulo (Servidores de Archivos)

Page 1: 6-Tuto Linux Capitulo (Servidores de Archivos)

Módulo VIServidores de archivosIntroducción

En este módulo se estudiará diferentes métodos para compartir archivos y espacio en disco en Linux en forma remota.NFS (Networks File Systems - Sistema de archivos de red)Linux, como casi todos los UNIX, implementan NFS. Este protocolo permite compartir archivos y espacio en disco entre máquinas de diferentes plataformas, en una forma completamente transparente para el usuario. Para los usuarios, un disco activado en forma remota con este protocolo, es un directorio más.ConfiguraciónExisten dos tipos de configuraciones, una es la que se realiza del lado del equipo que contiene el directorio a compartir (el servidor), y la otra es el equipo cliente que utilizará este directorio en forma remota.El servidorExiste un único archivo donde se realiza toda la configuración del servicio NFS. Este archivo es el /etc/exports. En este archivo se especificarán todos los directorios que se desean publicar para ser utilizados, desde los clientes NFS, con este protocolo.Formato del archivo /etc/exports:<directorio> <equipos_cliente>[(opciones)]directorio: Acá se especifica el directorio publicado.equipos_cliente: Acá se especifican qué equipos tendrán acceso al directorio referencia.Los equipos cliente se pueden especificar de cuatro formas, haciendo referencia a un equipo únicamente, utilizando comodines (asteriscos "*" y signos de pregunta "?"), utilizando números de IP o haciendo referencia a grupos de red (combinando el uso con el servicio NIS).opciones: Acá se especifican las diferentes opciones que tendrá cada equipo sobre este directorio.En este documento solo mencionaremos las más utilizadas:(ro): Publica el directorio como de solo lectura. No permite que los clientes escriban sobre el directorio.(no_root_squash): Esta opción permite al cliente grabar archivos a nombre del superusuario (root) si el usuario se conectó al equipo cliente con root. (Nota: Cuando se utiliza NFS, desde el equipo cliente, el usuario no tiene los mismos permisos como si el directorio fuera un disco local)(rw): Con esta opción se le permite a los clientes leer y escribir sobre el directorio publicado.(secure): Obliga a todos los clientes a hacer requerimientos de NFS por debajo del puerto 1024.

Ejemplos:/ master(rw)trusty(rw,no_root_squash)/projects proj*.local.domain(rw)/usr *.local.domain(ro)/pub (ro,insecure,all_squash)El clienteEn un cliente Linux que desea utilizar espacio en disco de otros equipos vía NFS solo debe activar los sistemas de archivos (file systems) utilizando este protocolo. La forma de realizarlo sería la siguiente:nfs -t nfs <servidor:directorio> <directorio_local_destino>De necesitar guardar esta configuración en el archivo /etc/fstab, se debe escribir de la siguiente forma dentro del archivo:<servidor:directorio> <punto_de_montaje> nfs <opciones>

Page 2: 6-Tuto Linux Capitulo (Servidores de Archivos)

Existen algunas opciones del comando mount (como rsize y wsize) que ayudan a mejorar la performance utilizando NFS.

Para más información exports(5), nfsd(8), mountd(8)FTP (File Transfer Protocol - Protocolo de Transferencia de Archivos)

El sistema de archivos de redEl sistema de archivos de red (NFS) es un sistema que permite montar sistemas de archivos desde una computadora distinta sobre una red TCP/IP. Bajo NFS, se monta localmente un sistema de archivos de una computadora remota y de cara a los usuarios parece igual que un sistema de archivos local. Este tipo de sistemas tiene muchas aplicaciones. Por ejemplo, se puede tener una máquina en la red con mucho espacio en disco y que actúe como servidor. Esta computadora tiene todos los directorios de inicio de todos los usuarios en sus discos locales. Si estos discos se montan vía NFS en el resto de las computadoras, los usuarios pueden acceder a sus directorios iniciales desde cualquier computadora en la red.NSF tiene tres componentes esenciales:Las computadoras que contienen los sistemas de archivos que se quieren montar con NFS tiene que poder comunicarse unas con otras por medio de una red TCP/IP.Las computadoras que contienen los sistemas de archivos que se desea como local debe disponer de este sistema de archivos para montarlo. A esta computadora se la conoce como el servidor y al proceso de hacer disponible el sistema de archivos como exportación del sistema de archivos.Las computadoras que contienen los sistemas de archivos exportado, conocido como cliente, tiene que montarlo como un sistema de archivos NFS, ya sea en el momento del arranque por medio del archivo /etc/fstab o de modo interactivo, por medio del comando mount.Las siguientes apartados tratan sobre la exportación del sistema de archivos y su montaje local.Exportación de un sistema de archivos NFSPara que los clientes puedan montar un sistema de archivos NFS, el servidor tiene que suministrárselo. Antes de que pueda suministrarse un sistema de archivos, debe comprobarse que está montado en el servidor. Si el sistema de archivos siempre va a un sistema de archivos NFS exportado, debe comprobarse que aparece listado en el archivo /etc/fstab del servidor, de modo que se monte automáticamente cuando arranque el servidor.Una vez que montado el sistema de archivos, se puede suministrar vía NFS. Este proceso consta de dos pasos. Primero, debe comprobar que los procesos daemon NFS rpc.mountd y rpc. Nfsd están ejecutándose en el servidor. Esos daemons se inican normalmente desde el archivo de comandos de inicio/etc/rc.d/init.d/nfs scrpit. Generalmente, lo único que tiene que hacer es comprobar que las líneas siguientes están en su archivo:Daemon rcp. MountdDaemon rcp. NfsdEl segundo lugar, debe introducir el sistema de archivos en un archivo de configuración denominado /etc/exports. Este archivo contiene información sobre los sistemas de archivos que pueden exportarse, las computadoras que tienen permiso para acceder a ellos y sobre el tipo y nivel de acceso que está permitido.

El archivo /etc/exportsEl archivo /etc/exports lo utiliza los procesos daemon mountd y nfsd para determinar los sistemas de archivos que van a exportarse y el tipo de restricciones que se les va a imponer. Los sistemas de archivos están listados, uno por línea en El archivo /etc/exports. El formato de cada línea es el nombre del punto de montaje para un sistema local de archivos, seguido por la lista de computadoras en las que se permite su montaje. Una lista separadas por comas con las opciones de montaje entre paréntesis puede acompañar también cada nombre de la lista. La Tabla 14.5 relaciones las opciones de montaje disponibles en el archivo /etc/exports.Tabla 14.5 Opciones de montaje disponibles en el archivo /etc/exports

Page 3: 6-Tuto Linux Capitulo (Servidores de Archivos)

Opción Descripcióninsecure Permite el acceso no autenticado desde esta máquinaSecure Necesita autentificación RPC desde esta máquinaRoot_ squash Asigna cualquier petición desde el usuario root, UID 0 en el cliente, al UID NOBODY_UID en el servidorNo_root_squash No asigna ninguna petición desde el UID 0 (Comportamiento predeterminado)Ro Monta el sistema de archivos del tipo de sólo lectura. (Comportamiento predeterminado)Rw Monta el sistema de archivos del tipo lectura y escritura.Link_relative Convierte los enlaces simbólicos absolutos (donde el contenido del enlace empieza con la barra inclinada) en enlaces relativos, colocando delante del enlace el número de caracteres../que sean necesarios para ir del directorio que contiene el enlace al directorio raíz del servidor.Link_absolute Deja todos los enlaces simbólicos como están. Este es el comportamiento normal de los servidores NFS Sun. (Comportamiento predeterminado en Linux)Map_daemon Asigna nombres locales y remotos así como los identificadores numéricos, utilizando un proceso daemon ?name/uid map en el cliente donde se ha originado la petición NFS. Se utiliza para asignar entre los espacios UID del cliente y del servidor.All-squash Asigna todos los identificadores de usuario y los identificadores de grupo a los usuarios anónimos. Esta opción es útil para los directorios públicos exportados NFS, como los que incluye FTP y los grupos de noticias.No-all-squash La opción contraria al all.squachsSquash-uids Relaciona una lista de identificadores de usuarios sujetos a asignación anónima. Una lista válida de identificadores se parece a la siguiente: squash uids0=15,20,25-50.Squash-gids Especifica una lista de identificadores de grupo sujetos a asignación anónima. Una lista válida de identificadores se parece a la siguiente: squash gids=0-15,20,25-50.Anonuid Establece el identificador de usuario para una cuenta anónima. Esta opción es útil para los clientes PC/NFS.Anongid Establece el identificador de grupo para una cuenta anónima. Esta opción es útil para los clientes PC/NFS.Noaccess Se utiliza para excluir algunos subdirectorios desde un cliente. Impide que el cliente pueda acceder a que todo lo que se encuentre por debajo del directorio

A continuación se ofrece un ejemplo del archivo /etc/exports:/home bill.tristar.com(rw) fred.tristar.com(rw)george.tristaar.com(rw)/usr/local/bin/bin*.tristar.com(ro)/projects develop.tristar.com(rw) bill.tristar.com.(ro)/pub (ro, insecure,root_squash)En este ejemplo el servidor exporta cuatro sistemas de archivos distintos. /home se monta con acceso de lectura y escritura en tres computadoras distintas: bill, fred y george. Este directorio probablemente contiene los directorios iniciales de los usuarios. El sistema de archivos /usr/local/bin se exporta como sólo de lectura, con acceso permitido desde todos las computadoras en el dominio triscar.com.El sistema de archivos projects se exporta con acceso de lectura y escritura para la computadora develop. Trista.com, pero sólo con acceso de lectura para bill.tristar.com.Para el sistema de archivos /pub no hay una lista de sistemas principales a los que se permita el acceso. Esto quiere decir que está permitido montar este sistema de archivos en cualquiera de los sistemas principales. Se ha exportado como sólo de lectura, permitiéndose el acceso no autenticado, y de servidor reasigna cualquier petición del usuario root a una máquina remota que accede a este sistema de archivos.

Montaje de los sistemas de archivos

Page 4: 6-Tuto Linux Capitulo (Servidores de Archivos)

El montaje de un sistema de archivos NFS es muy similar al de cualquier otro sistema de archivos. Los sistemas de archivos NFS se montan a través del archivo /etc/fstab en el momento del arranque o de forma interactiva por medio del comando mount.

Montaje de sistema de archivos NFS vía /etc/fstabCuando se específica el sistema de archivos NFS en el archivo /etc/fstab, se identifica el sistema de archivo con el formato:Hostname: /file/system/pathDonde hostname es el nombre del servidor donde está ubicado el sistema de archivos remoto y /file/system/path es el sistema de archivos en el servidor.El tipo de sistema de archivos se especifica como nfs en el campo opciones de montaje (mount options) de la entrada de sistemas de archivos. La Tabla 14.6 relaciona las opciones de mount que se utilizan con más frecuencias.Tabla 14.6 Opciones de uso común para montajes NFS Opciones Descripción Rsize=n Especifican el tamaño de bytes del datagrama utilizado por los clientes NFS en las peticiones de lectura. El valor predeterminado es 1.024 bytes. Wsize=n Especifican el tamaño de bytes del datagrama utilizado por los clientes NFS en las peticiones de escritura. El valor predeterminado es 1.024 bytes. Timeo=n Establece el tiempo, en décimas de segundos. Hard Monta este sistema de archivos utilizando un montaje hard. Este es el comportamiento determinado. Soft Monta este sistema de archivos utilizando un montaje soft Intr Permite que las señales interrumpan una llamada NFS. Esto es útil cuando se desea abandonar una operación porque un servidor NFS no contesta.

Una entrada típica del sistema de archivos NFS en el archivo /etc/fstab podría parecerse a ésta:Mailserver: /ver/spool/mail /var/spool/mail nfs timeo=20, intrEsta entrada monta el sistema de archivos /var/spool/mail, que está ubicado en el servidor principal de correo, en el punto de montaje /ver/spool/mail. Especifica que el tipo de sistema de archivo es nfs. Además fija el tipo de espera en 2 segundos (20 décimas de segundo), impidiendo que se interrumpan las operacilones en este sitema de archivos.Montaje de sistemas de archivo NFS de forma interctivaLos sistemas de srchivos pueden montarse de forma interactiva, como sucede con el resto de sistemas de archivos. Sin embargo, debe tenerse en cuenta que el comando mount de NFS no es una opción muy atractiva, debido a la gran cantidad de opciones que se pueden especificar en la línea de comandos.El comando mount interactivo que se utiliza para montar el sistema de archivos /ver/spool/mail es el siguiente:# mount -t nfs -o timeo=20,intr mailserver: /ver/spool/mail /ver/spool/mail El comando interactivo mount puede complicarse mucho si hay que especificar tamaños de datagramas y tiempo de espera. Conviene ubicar estos sistemas de archivos en el archivo /etc/fstab para que se monten automáticamente en el momento del arranque.Utilización de mkfs para construir un sistema de archivosDespués de haber creado una partición de sistemas de archivos con fdisk, debe construir un sistema de archivos en ella antes de poder utilizarla para almacenar datos. Para ello se utiliza el comando mkfs. Por ejemplo, supongamos que estamos construyendo un aparcamiento de coches, fdisk sería el que construye el aparcamiento y mkfs el que traza y pinta las líneas en el suelo para que los conductores sepan dónde aparcar.Así como fsck es un programa de "aplicación frontal de cara al usuario", para comprobar distintos tipos de sistemas de archivos, lo que realmente hace mkfs es llamar a varios programas para crear el sistema de archivos, en función del tipo de sistema que se desee. La sintaxis del comando mkfs es la

Page 5: 6-Tuto Linux Capitulo (Servidores de Archivos)

siguiente:Mkfs [-V] [-t fs -type] [fs -options] filesys [blocks]Donde filesys corresponde al nombre del sispositivo del sistema de archivos que desea construir, como /dev/hda1.PRECAUCIÓN: el comando mkfs también acepta el nombre de un punto de montaje como nombre de sistema de archivos, como/home. Debe tener mucho cuidado cuando utilice un punto de montaje. Si ejecuta mkfs en un sistema de archivos montado y "activo", puede dañar seriamente la información de este sistema.La Tabla 14.10 relaciona los distintos parámetros de línea de comandos que se pueden especificar con el comando mkfs.Tabla 14.10 parámetros de línea de comandos para el comando mkfs.Opción Descripción-V Hace que mkfs produzca una salida detallada, incluyendo todos los comandos específicos del sistema de archivos que se ejecutan. Al especificar esta opción más de una vez, se inhibe la ejecución de cualquier comando epecífico del sistema de archivos. -t fs -type Especifica el tipo de sistema que se va a construir. Si no se especifica el tipo de sistema archivos, mkfs trata de adivinarlo buscando filesys es /etc/fstab, utilizando la entrada correspondiente. Si no puede deducir el tipo, crea un sistema MINIX. Fs-options Opciones específicas del sistema de archivos que pasar''an al programa que construye el sistema de archivos. Aunque no se puede grantizar, las opciones siguientes están admitidas por la mayoría de los programas de construcción de sistemas de archivos. -C Antes de construir el sistema de archivos comprueba el dispositivo para ver si existen bloques incorrectos. -l file-name Lee desde file-name una lista de los bloques incorectos en el disco. -v Indica al constructor actual del sistema de archivos que genera una salida detallada. Filesys Especifica el dispositivo en el que se ubica el sistema de archivos. Este parámetro se le pedirá. Block Especifica el número de bloques que utilizará el sistema de archivos.

Aunque sea un argumento opcional, debería acostumbrarse a especificar el sistema de archivos, utilizando la opción de líneas de comandos -t fs-type. Al igual que fsckv, mkfs trata de adivinar el tipo de sistema de archivos consultando el archivo /etc/fstab. Si no lo consigue, crea un sistema MINIX de forma predeterminada. Para un sistema de archivos normal de Linux, probablemente sería mejor tener una partición ext2.

Configuración del servidor FTP anónimo para permitir la subida de archivosUn servidor ftp es quien permite publicar archivos para su transferencia, esto se puede hacer de una forma privada (utilizando usuarios, claves y restricción de archivos y directorios), medianamente privada (utilizando usuarios y claves, pero sin restricción de navegación del disco) o pública (permitiendo al público en general a ingresar al equipo para "bajar" archivos de un lugar determinado del disco).ConfiguraciónEl archivo /etc/ftpaccess es quien contiene toda la información sobre la configuración del servidor ftp. Este archivo utiliza tres tipos de "clases" que definirán las tres formas de acceso descriptas anteriormente (privada, medianamente privada y pública).Ejemplo

class all real,guest,anonymous *

compress yes alltar yes allchmod yes guestdelete yes guest

Page 6: 6-Tuto Linux Capitulo (Servidores de Archivos)

overwrite yes guestrename yes guestchmod no anonymousdelete no anonymousoverwrite no anonymousrename no anonymous

Existe tres tipos de clases de usuarios predefinidas, real (usuarios locales generalmente, forma medianamente privada), anonymous (usuarios que entran en la categoría de anónimo ya que no necesitan identificarse con un usuario real, forma pública) y guest (usuarios que poseen nombre de usuario y clave individuales y que tienen permitido navegar un espacio del disco en particular, forma privada)La primer línea del archivo define una nueva clase que integra a las tres clases predefinidas, esta nueva clase recibe el nombre de all, pero como no es un nombre reservado se podría utilizar cualquier otro. Las clases se pueden definir también dependiendo de donde vienen, en este caso, al utilizar el asterisco "*", se especifica que la clase all serán todos los usuarios que provengan de todos los número de IP.En las líneas subsiguientes se define que acciones podrá realizar cada clase:

compress: Agrega capacidades de compresión a los archivostar: Agrega capacidades de archivos en formato tarchmod: Permite o no cambiar los permisos a los archivosdelete: Permite o no borrar archivosoverwrite: Permite o no sobrescribir archivos rename: Permite o no mover o renombrar archivos

Armado de usuarios de acceso anónimoPara configurar el usuario de acceso anónimo se tienen que seguir los siguientes pasos:1.Crear un usuario ftp, sin shell y sin clave2.Crear los directorios "bin", "lib" y "etc" en el home del usuario ftp3.Copiar los archivos "ls", "tar", "compress", "gzip" al directorio "bin" recientemente creado4.Copiar los archivos "ld-2.1.1.so", "libc-2.1.1.so", "libnsl-2.1.1.so" y "libnss_files-2.1.1.so"5.Armar links simbólicos de las bibliotecas:6.ld-linux.so.2 -> ld-2.1.1.so7.libc.so.6 -> libc-2.1.1.so8.libnsl.so.1 -> libnsl-2.1.1.so9.libnss_files.so.2 -> libnss_files-2.1.1.so10.En el directorio "etc" copiar el archivo /etc/passwd quitándole los usuarios locales (dejando sólo los estándar)Armado de usuarios de acceso privadoPara el armado de usuarios de acceso privado debemos editar el archivo /etc/ftpaccess para indicarle al ftpd cual es el directorio privado del usuario y también que chequee el UID y GID del usuario. Para tal efecto, agregar las ultimas 3 lineas del siguiente listado:class all real,guest,anonymous *

email root@localhost

loginfails 5

readme README* loginreadme README* cwd=*

Page 7: 6-Tuto Linux Capitulo (Servidores de Archivos)

message /welcome.msg loginmessage .message cwd=*

compress yes alltar yes allchmod no guest,anonymousdelete no guest,anonymousoverwrite no guest,anonymousrename no guest,anonymous

log transfers anonymous,real inbound,outbound

shutdown /etc/shutmsgpasswd-check rfc822 warnguest-root /home/peperestricted-uid peperestricted-gid pepe

Armado de usuarios de acceso medianamente privado

Estos usuarios no llevan ningún tipo de configuración porque son usuarios normales, simplemente hay que darlos de alta.

Existen muchas opciones dentro del archivo /etc/ftpaccess que permiten adaptar el servicio de FTP a casi cualquier instalación. Se recomienda leer la página del manual en línea ftpaccess(5) para información más detallada.

Restricciones a la subida de archivosPara la siguiente práctica se asume que el archivo /etc/passwd contieneun usuario para FTP anónimo de la siguiente forma:

ftp:*:95:95::/home/ftp:

En caso de no figurar este usuario la máquina no está configurada para FTP anónimo.Adicionalmente, si aparecen los usuarios 'ftp' o 'anonymous' en el archivo/etc/ftpusers, no estará permitido el FTP anónimo.

En el archivo /etc/ftpaccess necesitaremos una clase de acceso anónimo.La siguiente línea permite el FTP anónimo desde cualquier origen:

class anonftp anonymous *Para prevenir que los usuarios de FTP anónimo intenten un ataque de denegación de servicio (Denial of Service = DoS) contra su sistema, debe crearse un sistema de archivos especial (una partición o disco) para recibir los archivos que se suban. Este sistema de archivos separado protegerá el servidor limitando el tamaño total de todos los archivos que se suban y previniendo que estos archivos ocupen el espacio disponible en el servidor. Para este ejemplo, montaremos el sistema de archivos en el punto /home/ftp/incomingPor defecto el servidor no permite la subida de archivos a los usuarios FTP anónimo. Solamente para estar seguros y para no olvidarlo, agregamosal /etc/ftpaccess la siguiente línea:

upload /home/ftp * no

Page 8: 6-Tuto Linux Capitulo (Servidores de Archivos)

Esto significa "para cualquier usuario cuyo home directory sea el área de FTP anónimo, /home/ftp, no permitir la subida de archivos". Como se dijo, esto es así por defecto, pero lo agregamos para no olvidarlo.Ahora permitiremos la subida de archivos en el sistema de archivos incoming.DEBEMOS agregar una línea permitiendo este privilegio a los usuarios de FTP anónimo. Por ahora no queremos permitirles que creen directorios (se recomiendo JAMAS permitir esto, pero igual mostraremos cómo hacerlo). Se quiere asegurar que el servidor está seguro y no es usado como un punto de tránsito para piratas informáticos (warez traders), de modo que setearemos los permisos de directorios del área incoming para prevenir que cualquiera vea qué hay allí y haremos el área de sólo escritura para usuarios anónimos.Primero, necesitamos un administrador del servicio FTP, alguien que sea el owner de los archivos, pero que no sea el usuario root o el anónimo. Algo como la siguiente línea en /etc/passwd funcionará:

ftpadmin:*:96:96::/home/ftp:Setearemos los permisos del área incoming y el owner con valores seguros.Se recomienda lo siguiente:chown ftpadmin /home/ftp/incomingchgrp ftpadmin /home/ftp/incomingchmod 3773 /home/ftp/incoming

En realidad ftpadmin puede ser el owner de más directorios, pero por ahora sólo contemplamos la sección de subida de archivos.Finalmente permitiremos la subida de archivos. Una última consideración, ya sea que se permita la bajada de directorios completos mediante tar o no, hay que asegurarse que nadie pueda bajar toda el área incoming usando tar.Para hacer esto crearemos un archivo especial llamado '.notar' en losdirectorios FTP e incoming:

touch /home/ftp/.notarchmod 0 /home/ftp/.notartouch /home/ftp/incoming/.notarchmod 0 /home/ftp/incoming/.notar

El archivo .notar de longitud cero puede confundir algunos clientes de web y proxies, de modo que lo haremos imposible de bajar.noretrieve .notarAhora si permitiremos la subida, ingresar lo siguiente en /etc/ftpaccess:upload /home/ftp /incoming yes ftpadmin ftpadmin 0440 nodirsHay que remarcar que el directorio para la subida es relativo al punto de vista del usuario durante la sesión FTP.Lo que esto dice es "Para cualquier usuario cuyo home directory es el área de FTP anónimo, /home/ftp, permitir la subida de archivos en el directorio /incoming pero no permitir la creación de nuevos directorios. Cambie todos los archivos subidos para que el owner sea el administrador de FTP, marcarlos como archivos de sólo lectura para que no esté permitida su bajada". Si los archivos subidos deben estar disponibles para ser bajados lo más seguro espedirle al administrador de FTP que los mueva a un área de acceso público ymodifique los permisos después de validarlos y aprobarlos. Sé que esto puede sonar excesivo, pero a la larga es lo mejor.Algunos sitios FTP prefieren vivir peligrosamente y permiten a los usuarios anónimos la creación de directorios. Yo no lo recomiendo; no puede hacerse con absoluta seguridad. Si insisten, sin embargo, Ud. puede al menos limitarlos a un sólo nivel de directorios. Por ejemplo, reemplazando

Page 9: 6-Tuto Linux Capitulo (Servidores de Archivos)

la sentencia upload recientemente agregada con lo siguiente:

upload /home/ftp /incoming yes ftpadmin ftpadmin 0440 dirs 3773upload /home/ftp /incoming/* yes ftpadmin ftpadmin 0440 nodirs

La primer línea permite que se creen directorios en el área incoming y fuerza el uso de permisos seguros en ella. La segunda previene la creación de otros subdirectorios. Nótese que uno de los problemas con la creación de directorios es que no existe una forma de crear automáticamente un archivo '.notar' en el nuevo directorio, de modo que un usuario hábil puede bajarlo de todas formas utilizando la compresión tar sobre la marcha.Una última consideración: dado que el área incoming no debe permitir la bajada de archivos, y dado que es un sistema de archivos, existirá un área lost+fount; sería deseable agregar la siguiente sentencia para estar seguros que no ocurrirá la bajada de archivos:noretrieve /home/ftp/incomingo, como mínimo, agregar lo siguiente para prevenir la bajada de los archivos ubicados en /lost+found:noretrieve /home/ftp/incoming/lost+found

Restricciones de subida para usuarios invitados (guest)La configuración del servidor FTP para usuarios invitados está cubierta en el Guest-HOWTO.No es mi propósito cubrir aquí el método para setear el acceso invitado.Si aún no lo ha hecho, revise la información en:

ftp://ftp.fni.com/pub/wu-ftpd/guest-howto

Para este ejemplo, asumiré que Ud. tiene entradas similares a las siguientes en el archivo /etc/passwd de su sistema:

dick:*:1010:1010::/home/users/./dick:/bin/shjane:*:1011:1011::/home/users/./jane:/bin/sh

Por defecto, el servidor WU-FTPD le brindará privilegios de subida de archivos a todos los usuarios invitados. Los usuarios de ejemplo están con chroot (raíz cambiada) al directorio /home/users y no pueden acceder otra área del sistema de archivos fuera de esa estructura de directorios. Lo que nosotros queremos, por lo tanto, es simplemente proteger las áreas del entorno chroot de las cuales deseamos mantener alejados a los usuarios.

En una instalación mínima, deben existir los subdirectorios bin, etc y dev en el directorio /home/users. Pueden existir otros archivos y subdirectorios dependiendo de los requerimientos de su sistema operativo. No queremos que los usuarios puedan subir archivos en estas áreas. En caso que algo les suceda a los permisos de las mismas (Ud. seteó los permisos a valores seguros,no?), Ud. deberá denegar los privilegios de subida de archivos en su archivo ftpaccess. En su caso, tendría lo siguiente:

upload /home/users/* / noupload /home/users/* /bin noupload /home/users/* /etc noupload /home/users/* /dev noMientras estamos en esto, podemos prevenir la bajada de archivos con noretrieve. No olvide prevenir la bajada de directorios completos con tar creando los archivos .notar en cada directorio.noretrieve /home/users/binnoretrieve /home/users/etc

Page 10: 6-Tuto Linux Capitulo (Servidores de Archivos)

noretrieve /home/users/dev

Restricciones a la subida de archivos para usuarios realesPrimero que nada, déjeme decir que Ud. no debe tener ningún usuario de tipo real en su servidor FTP. O, siendo más realista, el único usuario real será el administrador del servidor. Dicho esto, los usuarios reales deben estár restringidos solamente a subir archivos en áreas específicas.Comencemos con un usuario real en el /etc/passwd:

ftpadmin:*:109:109::/home/users/ftpadmin:/bin/sh

Nuevamente, por defecto, el server permitirá la subida de archivos en cualquier lado, de modo que comience por revocar esto y luego permita solamente lo que queremos:

upload /home/users/ftpadmin * noupload /home/users/ftpadmin /tmp yes nodirsupload /home/users/ftpadmin /home/users/ftpadmin yesupload /home/users/ftpadmin /home/users/ftpadmin/* yesupload /home/users/ftpadmin /home/ftp/incoming yes ftpadmin ftpadmin 0440 nodirs

Acerca de las reglas de coincidenciaTenga mucho cuidado al armar reglas de coincidencia utilizando comodines.Puede ser tentador, por ejemplo, utilizar lo siguiente:

upload /home/users/ftpadmin /home/users/ftpadmin* yes

Pero, si lo hace, habrá consecuencias no esperadas. En el ejemplo, estamos intentando restringir los privilegios de subida de archivos solamente al directorio home del usuario ftpadmin. Considere, sin embargo, que esto coincidirá con los siguientes directorios:

/home/users/ftpadmin/home/users/ftpadmin/mirrors/home/users/ftpadministrationEste último directorio no es deseado. En cambio utilice:

upload /home/users/ftpadmin /home/users/ftpadmin yes

para hacer coincidir el directorio home del usuario ftpadmin en si, utilice:

upload /home/users/ftpadmin /home/users/ftpadmin/* yes

para que coincidan todos los subdirectorios dentro del home del ftpadmin.Uso de SambaCon Samba se puede:Compartir un sistema de archivos de Linux con Windows 95, 98, o NT.Compartir un sistema de archivos de Windows 95, 98, o NT con LinuxCompartir una impresora conectada al sistema de Linux con los sistemas Windows 95, 98, o NT.Samba es el protocolo que utilizan los sitemas operativos de Microsoft para compartir archivos y servicios de impresión. Microsoft e Intel desarrollaaron el sistema de protocolo SMB en 1987, y posteriormente Andrew Tridgell lo integró a los distintos sistemas UNIX y después a Linux.NOTA: en la actualidad, Microsoft propone otro estándar para la compartición de archivos, llamado common Internet File System (Sistemas Común de Archivos de Internet, CIFC). Este estándar se ha presentado ante el Grupo de Trabajo Especial de ingeniería de Internet (Internet Engineering Task

Page 11: 6-Tuto Linux Capitulo (Servidores de Archivos)

Forcel) pero CIFS todavía no se ha adoptado de forma generalizada, y menos aún por la comunidad de desarrollo de Linux.La suite de samba está formada por varios componentes. El demonio smbd proporciona los servicios de archivo e impresión a clientes de SMBD, como Windows para Grupos de Trabajo, Windows NT, o LanManager. El archivo de configuración para éste demonio se describe en smb.conf. El demonio nmdb suministra el Servicio de Nombres de Dominio de NetBIOS (Sistema Básico de Entrada/Salida para Red) así como soporte para la navegación en internet. También puede ejecutarse de firma interactiva para consultar otros demonios de servicio de nombres.El programa smbclient implementa un cliente de tipo FTP simple. Esto resulta de gran actvidad para compartir SMB con otros servidores compatibles, como las computadoras Windows, y puede utilizarse también para que una máquina UNIX utilice una impresora conectada a un servidor SMB, como un PC que ejecute Windows 98.La utilidad testparm permite probar el archivo de configuración smb.conf. la utilidad smbstatus, por su parte, permite saber quién está utilizando el servidor smbd en un determinado momento.

Instalación SambaSamba puede instalarse durante el proceso de instalación del sistema, o posteriormente mediante RPM. Si necesita instalar el paquete, primero debe descargar la versión actual desde el web de Red Hat (www.redhat.com) Después puede instalar el paquete (la actual versión es samba 1.9.18p-1i386.rpm) utilizando el comando siguiente:Rpm -ivh samba-1.9.18p-1i386.rpmEl paquete debe incluir todos los archivos necesarios para ejecutar Samba, incluidos los dos programas primarios smbd y nmbd. Sin embargo, si utiliza otra distribución es posible que tenga que volver a compilar los distintos programas.

La sección [global]La sección [global] controla los parámetros para todo el servidor smb. Esta sección también proporciona los valores por defecto para el resto de secciones.[global]; workgroup = NT -Domain-Name, eg: REDHAT4workgroup = WORKGROUP; coment es the equivalent of the NT Description fieldcoment = RedHat Samba Server; volume = used to emulate a CDRom label (can be set on a per share basis)volume = RedHat4La primera línea de la sección global que se presenta en el Listado 15.1 define el grupo de trabajo al que pertenecerá la computadora en la red. Después, el archivo incluye un comentario para el sistema e identifica una etiqueta de volumen.; printing = BSD or SYSV or AIX, etcprinting = nsdprintcap name = /etc/printcaplasd printers = yesLa entrada siguiente indica al servidor Samba el tipo de sistema de impresión que se encuentra disponible en su servidor, y la línea siguiente informa de la ubicación del archivo de configuración de la impresora.La línea que sigue a continuación ordena a Samba que ponga a disposición de la red todas las impresoras definidas en el archivo printcap.; Uncomment this if you want a guest accoount; gues account = poguestlog file = /var/log/samba-log=%m; Put a capping on the siza of the log files (in Kb)max log size = 50

Page 12: 6-Tuto Linux Capitulo (Servidores de Archivos)

la entrada siguiente proporciona el nombre de usuario para una cuenta de invitado o guest en el servidor. Esta cuenta se utiliza para autenticar a los usuarios que deseen utilizar los servicios Samba disponibles para las conexiones guest.La entrada de archivo de registro especifica la ubicación del archivo de registro para cada cliente que acceda a los servicios Samba. El parámetro %m indica al servidor Samba que cree un archivo de registro aparte para cada cliente. La entrada max log size establece un tamaño máximo de archivo para todos los registros creados.

La sección [inicios]La sección [inicios] permite a los clientes de red conectarse a un directorio inicial de usuario en su servidor sin tener una entrada específica en el archivo smb.conf. Cuando se solicita el servicio, el servidor Samba busca el archivo smb.conf para la seción específica correspondiente al servicio solicitado. Si no encuentra el servicio en cuestión, Samba comprueba la existencia de una sección [inicios]. Si dicha sección existe, Samba busca el archivo de contraseña para localizar el directorio inicial del usuario que está realizando la consulta. Si no lo encuentra, este directorio pasa a compartirse con la red.[homes]comment se muestra a los clientes para que sepan qué comparticiones están disponibles. La entrada browseable indica a Samba como debe mostrar dicha compartición en una lista de navegación por red. El parámetro red-only controla la creación y modificación de archivos por parte de ususarios en el directorio inicial cuando este está siendo compartido en la red. Los parámetros preserve case y short preserve case indican al servidor que respete el tipo de letra de cualquier información escrita referida al servidor. Esto es importante porque aunque los sistemas de archivo de Windows normalmente no son sencibles al uso de mayúsculas y minúsculas, los sistemas de archivo de Linux si lo son. La última entrada detremina los permisos para cualquier archivo creado en el directorio compartido.

La sección [impresoras]La sección [impresoras] define la forma en que se controlan los servicios de impresión si no se encuentran entradas específicas en el archivo smb.conf. Al igual que la ssección [inicios], si no se localiza una entrada específica para un servicio de impresión, Samba utiliza la sección [impresoras] (si existe) para permitir que un usuario pueda conectarse a cualquier impresora definida en el archivo /etc/printcap.[printers]comment = All Printerspath = /var/spool/sambabrowseable = noprintable = yes; Set public = yes to allow 'guest account ' to printpublic = nowritable = nocreate mode = 0700Las entrada comment, browseable y crete mode tienen el mismo significado en el especificado anteriormente en la sección [inicios]. La entrada path indica la ubicación del archivo de espera que debe utilizarse al ejecutar una petición de impresión vía SMB.Si el valor printable esta detrerminado como Sí, significa que dicho recurso de impresión puede utilizarse para imprimir. La entrada public controla el acceso a las tareas de impresión para las cuentas de guest.

Compartición de directoriosUna vez configurados los valores por defecto para el servidor Samba, pueden crearse directorios compartidos especificos, restringuiendo o no su acceso a otros usuarios. Por ejemplo, supongamos

Page 13: 6-Tuto Linux Capitulo (Servidores de Archivos)

que quisiera crear un directorio al que sólo pudiera acceder un usuario. Para ello, tendría que crear un anueva sección y suministrar la información pertinente. Por lo general, tendría que especificar al servidor SMB los datos del usuario, la ruta del directorio y la información de configuración, tal y como se muestra a continuación:[jacksdir]comment = Jack's remote source code directorypath = /usr/local/srccallid users = tackettbrowsable = yespublic = nowritable = yescreate mode = 0700Con el ejemplo anterior se crearía el directorio compartido denominado jacksdir. La ruta del directorio en el servidor local es /usr/local/ssrc. Puesto que la entrada browsable está configurada de forma afirmativa (Sí), jacksdir aparecerá en la lista de navegación de la red. Sin embargo, como la entrada public tiene asignada el valor No, sólo el usuario llamado tackett puede acceder a este directorio utilizando Samba. Podría permitir que otros usuarios accedieran a este direectorio con sólo incluirlos en la entrada valid users.

Prueba del archivo smb.confUna vez creado el archivo de configuración, conviene probarlo para asegurarse de qué está correcto con el programa testparm, testparm es un programa sencillo de prueba que permite comprobar la corrección interna del archivo de configuración /etc/smb.conf. Si el programa no detecta ningún fallo, puede utilizar el archivo de configuración con la certeza de que smnd cargará sin problemas el archivo de configuración.PRECAUCIÓN: El uso de testparm NO garantiza que los servicios especificados en el archivo de configuración estarán disponibles o se ejecutarán satisfactoriamente.Testparm tiiene asignada la siguiente línea de comandos:tstparm [configfile [hostaname hostip] ]donde confgfile indica la ubicación del archivo smb.conf si éste no se encuentra en su ubicación predeterminada (/etc/smb.conf). el parámetro opcional hostname hostIP ordena testparm que compruebe si le sistema central tiene acceso a los servicios prestados en el archivo smb.conf.El ejemplo siguiente ofrece un resultado de muestra de la ejecución de testparm. Si el archivo smb.conf contiene algún error, el programa lo detectará generando el correspondiente mensaje de error.# testparmLoad smb confg file from /etc/smb.confProcessing section "[homes]"Processing section "[printers] Loaded services file OK.Press enter to see a dump of you service difinitionsAl pulsar la tecla <Intro>, testparm empezará a evaluar cada una de las secciones definidas en el archivo de configuración.Ejecución del servidor SambaEl servidor Samba está formado por dos demoninos, smbd y nmbd. El demonio smbd prporciona los servicios de compartición de archivos e impresión. El demonio nmbd, por su parte, suministra el soporte para el servidor de nombres NetBIOS.El servidor Samba puede ejecutarse desde los guiones INIT o desde inetd como un servicio de sistema.Puesto que Red Hat y Caldera inician los servicios SMB desde los guiones INIT en lugar de hacerlo como un servicio desde initd, puede utilizar el comando siguiente para iniciar o detener el servidor SMB.

Page 14: 6-Tuto Linux Capitulo (Servidores de Archivos)

/etc/re.d/init.d/samba start;start

Uso de smbclientEl programa smbclient permite a los usuarios de Linux acceder a comparticiones de SMB, generalmente ubicadas en computadoras Windows. Esto es posible ya que si se desea acceder a archivos ubicados en otras máquinas de Llinux, pueden utilizarse una gran variedad de métodos como FTP, NFS, o los comandos r- (como rcp).Smbclient proporciona una interfaz de tipo FTP que permite transferir archivos por medio de una red compartida a otra computadora que ejecute un servidor SMB. Por desgracia a diferencia de NFS, smbclient no permite montar otra compartición como un directorio local.smbclient facilita opciones de línea de comandos para realizar consultas en un servidor en relación con los directorios compartidos o para intercambiar archivos. Para conocer en más detalles las opciones de línea de comandos disponibles, consulte la página del manual para smbclient. Utilice el comando siguiente para obtener una lista de todas las comparticiones disponibles en la máquina win. net.harf.com:smbclient -L -I win. net.harf.comEl comando -L se encarga de solicitar la lista. El parámetro -I ordena a smbclient que trate los siguientes nombres de máquinas como una entrada específica de DNS (Servidor de nombres de Dominio) en vez de una entrada de NetBIOS.Para transferir un archivo, primero tiene que conectarse al servidor Samba utilizando el comando siguiente:Smbclient ?\\WORKGROUP\PUBLIC? -I win. net.harf.com -U tackettEl parámetro ?\\WORKGROUP\PUBLIC? especifica el servicio remoto en la otra computadora. Normalmente se trata de un directorio de sistema de archivos o de una impresora. La opción -U permite especificar el nombre del usuario con el que se desea conectar. Samba solicita entonces una contraseña (si así lo requiere la cuenta) y muestra en pantalla el indicador siguiente:Smb: \Donde \ indica el directorio actual del trabajo.Desde esta línea de comandos, puedes emitir cualquiera de los comandos especificados en la Tabla 15.1 para transferir y trabajar con archivos.Tabla 15.1 Comandos de smbclientComando Parámetro Descripción¿ o help [comando] Genera un mensaje de ayuda cuando así se requiere, o de forma general si no se especifica ningún comando.! [comando de shell] Ejecuta el comando de shell especificado o pone al usuario en un indicador de shell.Cd [directorio] Cambia al directorio especificado en la computadora del servidor (no en la computadora local). Si no se especifica ningún directorio, smbclient registrará el directorio actual de trabajo.Lcd [directorio] Cambia al directorio especificado en la computadora local. Si no se especifica ningún directorio, smbclient registrará el directorio actual de trabajo en la computadora local.Del [archivos] Los archivos específicos en el servidor se eliminarán si el usuario tiene permiso para hacerlo. Los archivos pueden contener caracteres comodín.Dir o ls [archivos] Relaciona en una lista los archivos específicados. También puede utilizarse el comando ls para obtener una lista de archivos.Exit o quit None Sale del programa smbclientGet [archivo remoto] [nombre local] Recupera el archivo remoto especificado y lo almacena en el servidor local. Si se especifica un nombre local, el archivo copiado se guardará con este nombre de archivo en vez de con el nombre de archivo que tenía en el servidor remoto. Mget [archivos] Copia todos los archivos especificados -incluidos los que coincidian con algún carácter comodín-en la computadora local.Md o mkdir [directorio] Crea el directorio especificado en la computadora remota.

Page 15: 6-Tuto Linux Capitulo (Servidores de Archivos)

Rd o rmdir [directorio] Elimina el directorio especificado de la computadora remota.Put [archivo] Copia el archivo especificado de la computadora local al servidor.Mput [archivo] Copia todos los archivos especificados de la computadora local al servidor.Print [archivo] Imprime el archivo en cuestión en la computadora remota.Queue None Muestra todos los trabajos en espera de ser imprimidos en el servidor remoto.Samba (Compartiendo archivos con sistemas operativos MS-Windows 3.11/95/98/NT)Linux tiene la capacidad de entender los protocolos utilizados por Microsoft en sus sistemas operativos más populares (Windows 3.11/95/98/NT). Estos protocolos son SMB (Server/Session Message Block), NetBios y LanManager.En este documento se explicará como hacer para que máquinas Windows vean discos de Linux y también sus impresoras. Se definió ver esta pequeña porción de todas las cosas que se puede hacer con Samba, ya que es la más común y utilizada.(extracto del archivo Samba-Como, http://www.linux.org.ar/LuCAS/COMO-I...MOs/Samba-Como)Configuración General (/etc/smb.conf)La configuración de Samba en un Linux (u otra máquina UNIX) es controlada por un solo fichero, /etc/smb.conf. Este fichero determina qué recursos del sistema quieres compartir con el mundo exterior y que restricciones deseas poner en ellos.Como las siguientes secciones 'direccionarán' la compartición de unidades e impresoras de Linux con máquinas Windows, el fichero smb.conf mostrado en esta sección es lo más simple posible, solo para propósitos introductorios.No te preocupes por los detalles, aún. Otras secciones más adelante introducirán los conceptos más importantes.Cada sección del fichero empieza con una cabecera como [global], [impresoras], etc.La sección [global] define unas pocas variables que Samba usará para definir la compartición de todos los recursos.La sección [homes] permite a los usuarios remotos acceder a sus respectivos directorios principales en la máquina Linux local (cada uno al suyo nada más). Esto es, si un usuario de Windows intenta conectar a este recurso desde su máquina Windows, será conectado a su directorio personal. A tener en cuenta que para hacer esto, tiene que tener una cuenta en la máquina Linux. ;-)El fichero smb.conf que viene debajo como ejemplo permite a los usuarios remotos acceder a su directorio principal en la máquina local y escribir en un directorio temporal. Para que un usuario de Windows vea estos recursos, la máquina Linux debe estar en la red local. Entonces el usuario simplemente conecta una unidad de red desde el Explorador de Windows o el Windows File Manager.Fíjate que en las siguientes secciones, se darán entradas adicionales a este fichero para permitir la compartición de más recursos.

; /etc/smb.conf;; Reinicia el servidor cada vez que hagas cambios a este fichero, ej:; /etc/rc.d/init.d/smb parar; /etc/rc.d/init.d/smb empezar

[global]; Quita el comentario a la siguiente línea si quieres cuentas de invitado; guest account = nobodylog file = /var/log/samba-log.%mlock directory = /var/lock/sambashare modes = yes

[homes]comment = Directorios principales

Page 16: 6-Tuto Linux Capitulo (Servidores de Archivos)

browseable = noread only = nocreate mode = 0750

[tmp]comment = Espacio de ficheros temporalespath = /tmpread only = nopublic = yesCompartiendo Una Unidad Linux Con Máquinas WindowsComo se muestra en el fichero smb.conf anterior, compartir una unidad Linux con usuarios Windows es fácil. De todas maneras, como todo lo demás con Samba, puedes tener las cosas MUY controladas. Aquí tienes unos pocos ejemplos:Para compartir un directorio con todo el mundo, crea una copia de la sección [tmp] añadiendo algo como esto al smb.conf:

[public]comment = Cosas publicaspath = /home/publicpublic = yeswritable = yesprintable = yes

Para que este directorio lo pueda leer todo el mundo, pero que sólo lo puedan cambiar gente del grupo 'laborales', modifica la entrada de esta manera:

[public]comment = Cosas publicaspath = /home/publicpublic = yeswritable = yesprintable = nowrite list = @laborales

Para aprender otros trucos con que jugar con las unidades compartidas, mira la documentación de Samba o las páginas del man.Compartiendo Una Unidad Windows Con Máquinas LinuxSe incluye un programa cliente de SMB para máquinas UNIX con la distribución de Samba. Provee un interfaz estilo ftp para la línea de comandos. Puedes usar esta utilidad para transferir ficheros entre un 'servidor' Windows y un cliente unix.Para ver qué recursos están disponibles en un host dado, ejecuta:/usr/sbin/smbclient -L hostdonde 'host' es el nombre de la máquina que quieres 'ver'. Esto devolverá un lista de nombres de 'servicios' --esto es, nombres de unidades o impresoras que puede compartir contigo--. A menos que el servidor SMB no tenga la seguridad configurada, te preguntará por una clave. Dale la clave de la cuenta de 'invitados' o de tu cuenta personal en esa máquina.Por ejemplo:smbclient -L 10.10.3.80 - U userLa salida de este comando debería ser algo parecido a esto:Server time is Sat Aug 10 15:58:27 1996Timezone is UTC+10.0Password:

Page 17: 6-Tuto Linux Capitulo (Servidores de Archivos)

Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]

Server=[EQUIPONT] User=[] Workgroup=[WORKGROUP] Domain=[]

Sharename Type Comment--------- ---- -------ADMIN$ Disk Remote Adminpublic Disk Public C$ Disk Default shareIPC$ IPC Remote IPCOReilly Printer OReillyprint$ Disk Printer Drivers

This machine has a browse list:

Server Comment--------- -------HOPPER Samba 1.9.15p8KERNIGAN Samba 1.9.15p8LOVELACE Samba 1.9.15p8RITCHIE Samba 1.9.15p8ZIMMERMAN La lista muestra otros servidores SMB con recursos para compartir con la red.Para usar el cliente, ejecuta:/usr/sbin/smbclient servicio <password>donde 'servicio' es una máquina y un servicio. Por ejemplo, si estás intentando entrar en un directorio que ha sido compartido como 'public' en una máquina llamada zimmerman, el servicio debería llamarse \\zimmerman\public. De todas maneras, debido a restricciones del shell, necesitarás poner las barras invertidas con secuencias de escape, por lo que al final saldrá algo parecido a esto:smbclient \\\\zimmerman\\public - U userdonde 'miclave' es una cadena literal con tu password.Entonces te aparecerá el 'prompt' del smbclient:Server time is Sat Aug 10 15:58:44 1996Timezone is UTC+10.0Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]smb: \> Escribe 'h' para obtener una ayuda de como usar el cliente:smb: \> hls dir lcd cd pwd get mget put mput rename more mask del rm mkdir md rmdir rd prompt recurse translate lowercase print printmode queue cancel stat quit q exit newer archive tar blocksize tarmode setmode help ? ! smb: \> Si sabes usar el ftp, no deberías necesitar las páginas del man del smbclient.Compartiendo Una Impresora Linux Con Máquinas WindowsPara compartir una impresora Linux con máquinas Windows, necesitas asegurarte de que la

Page 18: 6-Tuto Linux Capitulo (Servidores de Archivos)

impresora está preparada para trabajar bajo Linux. Si puedes imprimir desde Linux, preparar una 'compartición' SMB de la impresora es automático.Echa un vistazo el COMO Imprimir (Printing HOWTO) para poner a punto la impresora con Linux.Como el autor usa una impresora conectada a una máquina Windows NT, esta sección no debería ser vista como algo definitivo, sino como mera sugerencia. Cualquiera que tenga detalles que compartir con el autor, por favor, que los mande a [email protected] para que esta sección pueda ser completada.Añade la configuración de la impresora a tu smb.conf:

[global]printing = bsdprintcap name = /etc/printcapload printers = yeslog file = /var/log/samba-log.%mlock directory = /var/lock/samba

[printers]comment = Todas las impresorassecurity = serverpath = /var/spool/lpd/lpbrowseable = noprintable = yespublic = yeswritable = nocreate mode = 0700

[ljet]security = serverpath = /var/spool/lpd/lpprinter name = lpwritable = yespublic = yesprintable = yesprint command = lpr -r -h -P %p %s

¡Asegúrate de que el 'path' de la impresora (en este caso bajo [ljet]) se corresponde al directorio de 'spool' en /etc/printcap!NOTA: Hay algunos problemas compartiendo impresoras conectadas a UNIX con máquinas Windows NT usando Samba. Un problema es que NT 'vea' la impresora compartida correctamente. Para conseguirlo, mírate las notas en la distribución de Samba en el fichero docs/WinNT.txt. El otro va con problemas con las claves. Mírate los comentarios en ese mismo fichero para conseguir una molesta ganancia de conocimientos y fallos (jejeje) para arreglar el problema.Documentación de referenciaExisten muchos sitios dedicados a las diferentes configuraciones de Samba y SMB, pero el sitio que centraliza todo el proyecto Samba es http://www.samba.orgDiagnósticos a un servidor Samba

Fuente de información: DIAGNOSIS.txt for Samba release 2.0.6

Fecha: 11/Nov/99Autor: Andrew Tridgell

Page 19: 6-Tuto Linux Capitulo (Servidores de Archivos)

Este archivo contiene una lista de tests que se pueden realizar para validar un servidor Samba. Permite conocer cual es la posible causa de problemas si falla uno de estos pasos. Si todos los tests se pasan satisfactoriamente es probable que el servidor funcione bien.

Deben realizarse TODOS los tests, en el orden mostrado. Se ha tratado de elegirlos cuidadosamente de tal forma que los últimos tests usen solamente funciones verificadas en los primeros tests.

Cualquier adición a este juego de tests es bienvenida. Por favor enviar adiciones por e-mail a [email protected].

En caso de enviar un e-mail diciendo "no funciona" sin haber seguido este procedimiento de testeo, no hay que sorprenderse si el e-mail es ignorado.

ASUNCIONES-----------En todos los testeos se asume que Ud. tiene un servidor Samba llamado BIGSERVER y una PC llamada ACLIENT. También se asume que la PC esta corriendo Windows for Workgroups con una copia reciente del stack TCP/IP de Microsoft. Alternativamente la PC puede estar corriendo Windows 9x o Windows NT (Workstation o Server).

El procedimiento es similar para otros tipos de clientes.

Se asume que Ud. conoce el nombre de un directorio compartido disponible en su smb.conf. Se asume que ese recurso se llama "tmp". Ud. puede agregar un recurso tipo "tmp" agregando lo siguiente al smb.conf:

[tmp]comment = archivos temporariospath = /tmpread only = yes

ESTOS TESTS ASUMEN LA VERSIÓN 1.9.16 O POSTERIOR DEL KIT SAMBA. ALGUNOS COMANDOS MOSTRADOS NO EXISTÍAN EN VERSIONES ANTERIORES.

Por favor preste atención a los mensajes de error recibidos. Si cualquier mensaje de error reporta que su servidor esta siendo poco amistoso ("Your server software is being unfriendly") lo primero a chequear es que la resolución de nombres IP este seteada correctamente, por ej.: asegúrese de que su archivo /etc/resolv.conf apunta a servidores de nombre que realmente existen.

Asimismo, si Ud. no tiene acceso a un servidor DNS para resolución de nombres, por favor chequee que el seteo en su archivo smb.conf sea "dns proxy = no". La mejor forma de chequear esto es con "testparm smb.conf".

TEST 1:-------

En el directorio donde se encuentra el archivo smb.conf, correr el comando "testparm smb.conf". En caso de reportar cualquier error entonces el smb.conf tiene alguna falla.

Nota: Su archivo smb.conf puede encontrarse en: /etcO en: /usr/local/samba/lib

Page 20: 6-Tuto Linux Capitulo (Servidores de Archivos)

TEST 2:-------

Corra el comando "ping BIGSERVER" desde la PC y "ping ACLIENT" desde el servidor Linux. Si no obtiene una respuesta valida entonces el software de TCP/IP no esta correctamente instalado.

Note que Ud. debe arrancar una ventana "DOS prompt" en la PC para correr ping.

Si se obtiene un mensaje diciendo "host not found" o similar, entonces el software de DNS o el archivo /etc/hosts no están correctamente seteados. Es posible correr samba sin entradas DNS para el server y el cliente, pero se asume que hay entradas correctas para los tests siguientes.

Otra razón por la cual ping puede fallar es si el anfitrión esta corriendo algún tipo de software de firewall. Deben aligerarse las reglas de entrada a la estación de trabajo en cuestión, tal vez brindando acceso desde otra subred (en Linux esto se hace con ipdwadm o ipchains).

TEST 3:-------

Corra el comando "smbclient -L BIGSERVER" en la maquina Linux. Debe obtenerse una lista de los directorios compartidos disponibles.

Si se obtiene un mensaje de error conteniendo la cadena "Bad password" entonces probablemente este incorrecta una de las líneas "hosts allow", "hosts deny" o "valid users" en el smb.conf, o la cuenta de invitado no es válida. Chequee que la cuenta de invitado este usando "testparm" y remueva temporalmente cualquier línea "hosts allow", "hosts deny", "valid users" o "invalid users".

Si se obtiene como respuesta "connection refused" entonces el servidor smbd no esta corriendo. Si lo instaló en el inetd.conf es probable que haya editado ese archivo en forma incorrecta. Si lo instaló como demonio entonces chequee que esté corriendo, y chequee que el puerto netbios-ssn esté en estado LISTEN usando "netstat -a".

Si obtiene "session request failed" entonces el server rechazó la conexión. Si dice "Your server software is being unfriendly" es probable que se deba a parámetros inválidos en la línea de comando de smbd, o algún otro problema fatal similar en el arranque inicial de smbd. También chequee el archivo de configuración (smb.conf) contra errores de sintaxis con "testparm" y que los diferentes directorios donde samba guarda sus logs y archivos de lockeo existan.

Existe un número de razones por las cuales smbd puede rechazar o declinar un pedido de sesión. Las mas comunes involucran una o más de las siguientes entradas en el smb.conf:

hosts deny = ALLhosts allow = xxx.xxx.xxx.xxx/yybind interfaces only = Yes

En el ejemplo arriba, no se permite el ingreso a ningún pedido de sesión que se traslada automáticamente a la dirección del adaptador loopback 127.0.0.1.Para solucionar el problema, cambie esas líneas a:

hosts deny = ALLhosts allow = xxx.xxx.xxx.xxx/yy 127.

Page 21: 6-Tuto Linux Capitulo (Servidores de Archivos)

NO utilice el parámetro "bind interfaces only" cuando se quiera utilizar el cambio de password samba, o donde smbclient deba acceder a servicios locales para resolución de nombres o para conexión de recursos locales. (Nota: la deficiencia del parámetro "bind interfaces only" que no permite conexiones a la dirección loopback será reparada pronto).

Otro causa común de esos dos errores es tener algo corriendo previamente en el puerto 139, como ser Samba (es decir: smbd ya corriendo desde inetd) o algo como Digital's Pathworks. Chequee el archivo inetd.conf antes de intentar arrancar smbd como demonio, puede evitarle un montón de frustración!

Otra posible causa para la falla del TEST 3 es cuando la máscara de la subred y/o la dirección de broadcast estén mal seteadas. Por favor chequee que la dirección IP / dirección broadcast / máscara de subred de la interfaz de red estén correctamente seteadas y que Samba las vea correctamente según el archivo log.nmb.

TEST 4:-------

Correr el comando "nmblookup -B BIGSERVER __SAMBA__". Debería obtener la dirección IP del servidor Samba.

En caso de no obtenerla nmbd está incorrectamente instalado. Chequee su inetd.conf en caso de haberlo arrancado desde allí, o que el demonio esté corriendo y con el puerto UDP 137 abierto.

Un problema común es que muchas implementaciones de inetd no pueden tomar muchos parámetros en la línea de comandos. En caso de que este sea el problema, cree un script de una línea que contenga los parámetros correctos y córralo desde inetd.

TEST 5:-------

Corra el comando "nmblookup -B ACLIENT '*'"

Debería obtener la dirección IP de la PC. En caso contrario entonces el software cliente en la PC no está instalado correctamente, o no está arrancado, o Ud. puso mal el nombre de la PC.

TEST 6:-------

Corra el comando "nmblookup -d 2 '*'"

Aquí se esta intentando lo mismo que en el test anterior pero con un broadcast a la dirección de broadcast por defecto. Deberían responder un cierto número de clientes Netbios/TCPIP en la red, aunque Samba puede no captar todas las respuestas en el corto tiempo durante el cual escucha. Ud. debería ver una serie de mensajes "got a positive name query response" provenientes de diferentes clientes.

Si esto no da un resultado similar al test anterior entonces nmblookup no está obteniendo correctamente la dirección de broadcast mediante su mecanismo automático. En este caso se puede experimentar utilizando la opción "interfaces" en el smb.conf para configurar manualmente la dirección IP, la de broadcast, y la máscara de red.

Page 22: 6-Tuto Linux Capitulo (Servidores de Archivos)

Si su PC y el servidor no están en la misma subred entonces debe utilizarse la opción -B para setear la dirección de broadcast a aquella utilizada por la subred de la PC.

Este test tiene muchas probabilidades de fallar si la máscara de la subred y la dirección de broadcast no son correctas (ver las notas del TEST 3 arriba).

TEST 7:-------

Corra el comando "smbclient '\\BIGSERVER\TMP'". Al hacer esto debería requerirse un password. Debe utilizarse el password de la cuenta con la cual Ud. está logueado en la maquina Linux. En caso de querer testear con otra cuenta deberá agregarse la opción -U al final de la línea de comandos, por ej.: smbclient \\BIGSERVER\TMP -Ujuanperez

Nota: es posible especificar el password conjuntamente con el nombre de usuario de la siguiente manera:smbclient \\BIGSERVER\TMP -Ujuanperez%mypassword

Una vez ingresado el password debería verse el prompt "smb>". En caso de no obtenerse este resultado revisar los mensajes de error. En caso que diga "invalid network name" entonces el servicio "tmp" no está correctamente seteado en el smb.conf.

Si dice "bad password" entonces las posibles causas son:- esta utilizando shadow passwords (u otro sistema de passwords) pero no ha compilado el soporte adecuado en el smbd- su configuración de "valid users" es incorrecta- el password es una mezcla de mayúsculas y minúsculas pero no se habilitado la opción "password level" a un nivel suficientemente alto- la línea "path =" en el smb.conf es incorrecta. Chequéelo con testparm- se ha habilitado la encriptación de passwords pero no se ha creado el archivo de passwords encriptados de SMB

Una vez conectado Ud. debería poder usar los comandos "dir", "get", "put", etc. Tipee "help" para obtener instrucciones. En particular debe chequearse que la cantidad de espacio libre en disco sea correcta cuando se ejecuta el comando "dir".TEST 8:-------

En la PC tipee el comando "net view \\BIGSERVER". Esto deberá hacerse desde una ventana "DOS prompt". Debería obtenerse una lista de recursos compartidos en el servidor.

Si se obtiene un error "network name not found" o similar entonces la resolución de nombres por Netbios no está trabajando. Esto usualmente es causado por un problema en el nmbd. Para evitar esto puede tomarse una de las siguientes acciones (solo es necesario utilizar una):

- reparar la instalación de nmbd- agregar la dirección IP de BIGSERVER a la lista "wins server" en el seteo avanzado de TCP/IP en la PC.- habilitar la resolución de nombres de Windows mediante DNS en la sección de seteo avanzado de TCP/IP- agregar BIGSERVER al archivo lmhosts en la PC

Page 23: 6-Tuto Linux Capitulo (Servidores de Archivos)

Si se obtiene un error "invalid network name" o "bad password error" entonces se aplican las mismas soluciones utilizadas para el test "smbclient -L" arriba. En particular, asegúrese de que la línea "hosts allow" sea correcta (ver las man pages).

De todas formas, no olvide que cuando la PC solicita la conexión al servidor Samba intentará conectarse utilizando el nombre con el cual Ud. este logueado en la máquina Windows. Hay que asegurarse de que esa cuenta exista en el servidor Samba con exactamente el mismo nombre y password.

Si se obtiene "specified computer is not receiving requests" o algo similar probablemente significa que el anfitrión no puede ser contactado mediante servicios TCP. Chequee si el anfitrión esta utilizando tcp wrappers, y en caso afirmativo agregue una entrada en el archivo