2- Estructura del Filesystem

  • Propietarios
  • Permisos
  • Enlaces
  • Montando Dispositivos
  • Montando NFS
  • Resumen

    Introducción
    Como ya nos encontramos un poco más familiarizados con la estructura de los directorios en Slackware Linux y los diferentes tipos de archivos que podemos encontrar en ellos, comenzaremos este capítulo diciendo que : el filesystem está compuesto por mucho más que la estructura de directorios.

    Como todos sabemos, Linux es un sistema operativo multiusuario. Esto significa basicamente que el sistema guarda diferentes tipos de información de los diferentes usuarios que son parte del sistema y nos dice quien es el propietario(a) de un archivo, quién puede o no escribir en él, quién puede ejecutarlo o simplemente borrarlo. En el filesystem también podemos encontrar diferentes aspectos como los links simbólicos (o enlaces), los montajes de los dispositivos como las unidades de CDROM/CDRW y los montajes NFS.


    Propietarios

    El filesystem para designar un mayor orden y seguridad en el sistema, guarda información específica de cada uno de los usuarios de los que se compone. Esto se puede definir como: el filesystem sabe quién es el propietario de un archivo, quién puede o no escribir en el, ejecutarlo, moverlo o borrarlo. Lo que significa que los archivos tiene un dueño, un grupo y sus respectivos permisos.

    Para ver esto en la practica ejecutamos el comando ls con la opción -l.

    # ls -l /bin/mkdir
    -rwxr-xr-x    1 root     bin         18256 May 27  2002 /bin/mkdir
     
    Como podemos apreciar este comando nos entrega una información bastante detallada sobre el archivo /bin/mkdir. Lo primero es decir que la tercera columna contienen el username ( el propietario o dueño del archivo ) que en este caso es "root" y en la cuarta columna está el group name ( o nombre del grupo ) que sería "bin". Entonces podemos decir que el dueño del archivo /etc/mkdir es root y que pertenece al grupo bin.

    Nosotros tenemos la facultad de poder cambiar los dueños de un archivo gracias a los comandos chown(1) ( change owner o cambiar dueño ) y chgrp(1) (change group o cambiar grupo). Para cambiar el propietario a "slackware", usamos el comando chown de esta manera:

       # chown slackware /bin/mkdir
      
     Para modificar el grupo propietario de /bin/mkdir a "users", usaremos chgrp:

      # chgrp users /bin/mkdir
      
      Pero también podemos utilizar el comando chown para cambiar el propietario y el grupo de una sola vez, esto es de la siguiente manera:

      # chown slackware.users /bin/mkdir
      
    NOTA: No podemos hacer dueños de un archivo a un usuario que no existe en el sistema.

    Lo referente a las propiedades de un archivo es tiene una gran importancia un sistems Linux, aun cuando nosotros seamos los únicos usuarios. Hay ocaciones en las que necesitaremos modifcar o más bien arreglar las propiedades de un archivo o algun nodo de dispositivo.


    Permisos

    Los permisos de archivo es otra de las partes importantes de los aspectos de un sistema multiusuario. Son tán importantes que gracias a estos podemos mantener la seguridad y estabilidad del sistema, pero también puede ser la causa de su destrucción total por parte de un usuario  con malas intensiones. Por ejemplo, podemos decir que gracias a los permisos Linux es casi inmune a los Virus de computadora. Y esto es por que un virus debe escribir sobre un archivo para poder infectarlo y  así posteriormente ejecutarse de una u otra manera para lograr su objetivo principal el cual es infectar el sistema, pero gracias a los permisos estos no pueden afectar todos los archivos como lo hacen en Windows, si el usuario que ejecutó el virus no tiene permisos, este simplemente no podrá infectar al resto de los archivos del sistema y por lo tanto no puede afectarlo.
     
    Gracias a los permisos el filesystem sabe que usuario(s) puede(n) leer, escribir, ejecutar, mover o borrar un archivo. Esta información es guardada en cuatro dígitos octales, de los que cada uno especifica una convinación de diferentes permisos. Estos se dividen en permisos para el owner ( o dueño) que son el segundo, tercero y cuarto guión , para el group( o grupo) que son el quinto, sexto y séptimo guión y para other  (u otros) que son el octavo, noveno y décimo guión.
    EL primer guión nos indica que tipo de fichero es, osea si es un directorio ( indicado por una "d" ), un archivo ( indicado simplemente por un guión ), un link simbólico ( indicado por una " l ") , etc.

    Podemos identifcar fácilmente los permisos, ya que, son las letras que se encuentran a la izquierda del output ( o salida) de un comando ls -l. Por ejemplo:

    # ls -l
    -rwxrw-r--   1 linuxchile     users            5 May  8 20:02 linuxchile.cl
    -rw-r--r--    1 slackware     users            5 May  8 19:48 slackware.cl
    drwxr-xr-x    2 patrick     root           48 May  8 20:02 slackware9.0

    Aquí podemos ver claramente los permisos de linuxchile.cl y slackware.cl definidos como archivos por que el primer guión ( "-" ) nos indica que es un archivo, además de ver los permisos de slackware9.0 que es un directorio porque la primera letra es una "d". Tomemos el archivo slackware.cl :

    -rw-r--r--    1 slackware     users            5 May  8 19:48 slackware.cl

    -rw- : El dueño o propietario tiene permisos delectura y escritura en el archivo.
     r--   : El grupo de usuarios que pertenecen al grupo del dueño del archivo tienen permisos de lectura.
     r--   : Los otros usuario que no son parte del grupo, pueden leerlo.
     
    Ahora veámos el archivo linuchile.cl :

    -rwxrw-r--   1 linuxchile     users            5 May  8 20:02 linuxchile.cl

    -rwx : El dueño o propietario tiene permisos de lectura, escritura y ejecución.
    rw-   : El grupo de usuarios pertenecientes al grupo del dueño tiene permisos de lectura y escritura sobre el archivo.
    r--    : Los demás usuarios que no son parte del grupo simplemente pueden leerlo.

    Ahora veámos el directorio slackware9.0 :

    drwxr-xr-x    2 patrick     root           48 May  8 20:02 slackware9.0

    drwx :  El dueño  tiene permisos de lectura, escritura y ejecución.
    r-x     : EL grupo de usuarios pertenecientes al grupo del dueño tiene permisos de lectura y ejecución.
    r-x     : El resto de los usuarios no pertenecientes al grupo del dueño tiene permisos de lectura y ejecición.

    Nosotros podemos manipular a nuestro antojo los permisos gracias a chmod(1). Para esto creeamos un archivo de pruebas ( no queremos comprometer la seguridad del sistema por ningún motivo).

      $ touch /tmp/permisos
      $ ls -l /
    tmp/permisos

       -rw-r--r--    1 slackware     users            0 May  8 21:09 /tmp/permisos


    Entonces usaremos chmod(1) (change modes o cambiar modos) para manipular los permisos del archivo. usamos un 7 para los permisos de lectura, escritura y ejecución al dueño del archivo, el 5 para darle permisos de lecturay ejecución a los usuarios pertenecientes al grupo del dueño del archivo y finalmente otro 5 para darle permisos de lectura y ejecución a  los demás usuarios no pertenecientes al grupo del dueño.

      $ chmod 755 /
    tmp/permisos
      $ ls -l /tmp/example

       -rwxr-xr-x   1 slackware    users    0 May  8 21:09 /tmp/permisos

    Para una mayor simpleza esto lo podemos ver en la siguiente tabla:

    0
    Ningún tipo de permiso definido
    ---
    1
    Permiso de ejecución
    --x
    2
    Permiso de escritura
    -w-
    3
    Permiso de escritura y ejecución
    -wx
    4
    Permiso de lectura
    r--
    5
    Permiso de lectura y ejecución
    r-x
    6
    Permiso de lectura y escritura
    rw-
    7
    Permiso de lectura, escritura y ejecución
    rwx

      
    Para poner permisos especiales usamos un cuarto número que va delante de los tres dígitos usados para darle los permisos de lectura, escritura y ejecución a los archivos. Estos números nos sirven para modificar aspectos de los archivos tales como el uid, gid y sticky bit, los que son definidos con mas detalle en la siguiente tabla:

    4
    seuid
    Usado para setear el uid de un archivo. Entonces si un archivo tiene el setuid activo , significa que todos los procesos que lo ejecutan obtienen el acceso a los recursos del sistema basados en el usuario que crea el proceso  y no del usuario que lo ejecuta. d--s------
    2
    setgid
    Usado para setear el gid de un archivo
    d-----s---
    1
    sticky bit
    Si es usado en un directorio, entonces un usuario sólo puede borrar los archivos que son de su propiedad o para los que tiene permisos,  aunque tenga permiso de escritura al directorio. Este aparece con una 't' en los listados detallados de directorios al final de los permisos de l archivo o directorio e cuestión.
    d--------T

    Por ejemplo :

      $ chmod 6755 /tmp/permisos
      $ ls -l
    /tmp/permisos

    -rwsr-sr-x    1 slackware     users            0 May  8 21:09 /tmp/permisos

     Si esto de los valores octales le resulta algo confuso, usted tiene la opción de usar letras en las opciones de chmod(1) para designar estos mismo valores . El primer grupo o dueños con la letra "u" , el segundo grupo o permisos de grupo  con una letra "g" , el tercer grupo u otros usuarios ajenos al grupo con la letra "o" y tenemos una cuarta letra, la "a", la que es equivalente a los tres grupos anterioremos ( osea "ugo" ). Y para agregar o quitar un permiso dado utilizamos el signo de suma "+" y el de resta "-".

    Para el propósito de practicar usamos el archivo que creamos anteriormente de la siguiente manera:

      $ chmod a+rx /tmp/permisos
      $ chmod u+w
    /tmp/permisos
      $ chmod ug+s /tmp/permisos
      $ chmod a-w
    /tmp/permisos


    Si escoges usar letras en vez de números da igual, ya que, el efecto producido será el mismo.

    Como mencionamos anteriormente los permisos set userID y set groupID son de una gran, pero gran importancia para el sistema, ya que, un mal uso de estos puede provocar  un  grave error de seguridad, asi que, les recomiendo que lo usen con un cuidado especial.


    Enlaces

    En Unix hay dos conceptos de "links" o enlaces, usualmente llamados hard link ( o enlaces  duros) y  soft link ( o enlaces suaves).

    Un hard link es solo un nombre para un archivo. ( Y un archivo puede tener varios nombres. Este es borrado del disco solamente cuando el último nombre es removido. El número de nombres es dado por ls(1). No existe algo como un nombre "original": todos los nombres tienen el mismo estatus. Usualmente, pero no necesariamente, todos los nombre de un archivo son encontrado en el filesystem que también contienen sus datos.) Estos tienen la particularidad de que solo pueden estar en el directorio que se encuentra el archivo. Éstos hard links son útiles en algunos casos, pero algunos usuarios encuentran que el soft link (o enlace suave) es más versátil.

    El soft link( o link simbólico, o simlink) es un animal totalmente diferente: este es un archivo especial de un pequeño tamaño que contiene un pathname (  o nombre de ruta ).  Así, los soft links pueden poner un punto a los archivos en diferentes filesystem ( posiblemente montajes NFS realizados de diferentes máquinas), y  no necesita señalar los archivos actualmente existentes. Cuando accedimos ( con las llamdas al sistema open(2) o stat(2) ), una referencia a un link simbólico es remplazado por el  sistema operativo del kernel con una referencia hacia el nombre del archivo por el nombre del path. ( Como sea, con rm(1) y unlink(2) el link es removido por si solo, pero no al archivo que señala . Hay llamadas especiales al sistema como lstat(2) y readlink(2) las que leen el estado de un link simbólico y el nombre del archivo que señala. Para varias otras llamadas al sistema hay algo de incertidumbre y estas varían entre sistemas operativos a si la operación actúa en el link simbólico mismo, o en el archivo señalado.

    Ahora veremos como se vería un link en el output de un comando "ls -l":

      $ ls -l /usr/src/linux

      lrwxrwxrwx    1 root     root           12 May  3 01:43 linux -> linux-2.4.20

    Para crear links entre archivos se usa el comando ln(1). Por default, el comando ln(1) crea hard links ; pero con la opción -s crea links simbólicos( o soft links).  Estos comandos son mayormente detallados en el Capitulo 10.


    Montando Dispositivos

    Como pudimos apreciar en el Capítulo 4, especificamente en "Sistema de archivos", todos los dispositivos de nuestra máquina son parte del filesystem. Ya sea Hard disk ( discos duros), unidades de CDROM`s, floppies, etc. se encuentran en un mismo tree ( o árbol). Para poder acceder a estos dispositivos nosotros necesitamos montarlos con los comandos mount(1) y desmontarlos con umount(1).

    No todos los dispositivos de nuestro sistema debemos montarlos cada vez que deceemos usarlos, pero algunos están automáticamente montados al momento que iniciamos la máquina. Para este propósito existe un archivo llamdo fstab(5) en el directorio /etc/, este  contiene  información estática acerca del filesystem. Todo lo que nosotros deceemos que se monte automáticamente debemos indicarlo en ese archivo.

    fstab

    Con el objetivo de estudiar el archivo /etc/fstab usamos el comando cat(1) el que nos muestra el contenido de un archivo :
     
    # cat /etc/fstab

    /dev/hda6        swap             swap         defaults                      0   0
    /dev/hda1        /                     reiserfs     defaults                     1   1
    /dev/hda5        /boot              ext3           defaults                    1   2
    /dev/hdb1        /mount           reiserfs     defaults                     1   1
    /dev/cdrom      /cdrom          iso9660     noauto,owner,ro       0   0
    /dev/fd0           /mnt/floppy    auto           noauto,owner         0   0
    devpts             /dev/pts         devpts       gid=5,mode=620       0   0
    proc                 /proc              proc          defaults                     0   0

     
    En la primera columna se indica el nombre del dispositivo. En este caso, los dispositivos son cuatro particiones la primera swap, la segunda reiserfs, la tercera ext3, la cuarta reiserfs y la quinta automática, un floppy y una unidad CD-RW. La segunda columna es compuesta por el lugar donde será montado el dispositivo. La tercera columna nos muestra el filesystem del dispositivo, para la unidad CDRW será uso9660, para l que para discos duros con un sistema Linux pueden ser Swap, Ext2, Ext3, ReiserFS, SGI XFS, UMSDOS, etc. y para dispositivos con un sistema Windows puede ser vfat o NTFS.

    En la cuarta columna se indican las opciones aplicadas al filesystem montado o dispositivo a montar. Los dispositivos que se montan al inicio del sistema tiene el valores predeterminados "defaults", que generalmente estará bien. Pero hay varias opciones que podemos utilizar, las cuales son explicadas con mayor detalle en el manual de fstab(5).

    Ahora nos quedan las últimas dos columnas, esta son usadas una variedad de comandos como fsck que necesitan manipular los dispositivos. Si quieres una mayor información tienes las páginas del manual a tu disposición.

    Al momento de instalar Slackware Linux, el setup(2) ( programa de instalación) irá construyendo gran parte de nuestro archivo fstab. Solamente deberemos entrar a editar cuando agregamos un nuevo dispositivo o algún disco que necesitemos montados al inicio del sistema

    mount y umount

    La sintáxis de mount es:

    mount [-fnrsvw] [-t vfstype] [-o options] device dir

    Donde "[-fnrsvw]" son unas opciones definidas en el manual de fstab(8) , "[-t vfstype]" es el tipo de filesystem, "[-o options]" son las opciones usadas para montar le dispositivo en cuestión en modo ro ( solo lectura ) rw, ( lectura-escritura ) y otros. Ahora device es usado para indicar el dispositivo que deceamos montar y "dir" es el punto de montaje que elegimos para ese dispositivo.

    Todos los archivos accesibles en un sistema Unix que se encuentran en un gran árbol ( que es la forma de los directorios de Linux ), necesitan ser montados para su uso, es para este propósito que existe el comando mount(8), este comando seguido de unas opciones nos permite el uso de los dispositivos de nuestro sistema ( o de algún otro :D ). Usarlo es fácil si el dispositivos que queremos usar se encuentra indicado en el archivo /etc/fstab. Por ejemplo para montar mi CDRW que se encuentra en el fstab simplemente debo teclear :

      # mount /dev/cdrom

    Como este dispositivo está indicado en fstab, mount ya sabe que opciones debe usar. Ahora, si este no estuviera indicado deberemos montarlo usando mount(8) más un par de opciones. Por ejemplo :

      # mount -t iso9660 -o ro /dev/cdrom /cdrom

    Esa línea de comandos incluye la misma información del fstab de ejemplo, pero nosotros revisaremos todas las partes de todas formas. La opción -t iso9660 es par aindicar que el filesystem es iso9660 que generalmente es usado en gran parte por las unidades de CD-ROM. La opción -o ro le dice a mount que monte el dispositivo en modo solo lectura. /dev/cdrom es el nombre del dispositivo a montar ( que tambiñen puede ser un link hacia ese nombre de dispositivo) y /cdrom es el punto de montaje que usaremos para la unidad.

    La otra parte es que nosotros no podemos quitar un CD-ROM, un disquete o algún otro dispositivo removible que se encuentre montado. Antes que nada debemos desmontarlo  y es para este propósito que usamos umount(8). Su sintáxis es más simple que la de mount(8), esta consiste en el comando en sí seguido del punto de montaje del dispositivo o el nombre del archivo que indica ese dispositivo. Por ejemplo, si deceamos desmontar el CD-ROM podemos usar cualquiera de estas formas:

      # umount /dev/cdrom
      # umount
    /cdrom


    También podemos usar un comando llamado eject(1). Este comando aparte de desmontarnos el dispositivo ( en el caso de la unidad de CDROM al menos) nos ejecta como bien dice su nombre el CDROM. Su sintáxis es igual a la de umount(8).


    Montando NFS

    El montaje NFS representa el archivo de sistema de red. Este no forma parte del filesystem real, pero puede ser usado como si lo fuese.

    En ambientes Linux grandes existe la posibilidad de que se compartan los programas, directorios, servicios de correo, etc.. Así no es necesario tener copia de los programas en cada máquina y todo esto gracias a NFS. Nosotros podemos usar NFS para compartir directorioso algún programa entre todas las maquinas.

    Si quiere una mayor unformación sobre NFS véa la sección llamada NFS (Sistemas de Archivos de Red) en el Capítulo 5 y las páginas del man de los comandos exports(5), nfsd(8), y mountd(8).


    Resumen

    En este capítulo, usted debe de haber ganado un gran conocimiento de propiedades y permisos de archivos en sistemas Linux. Usted debe saber por qué éstos existen y poder manipularlos a si antojo. También debe saber sobre los links entre archivos, algunos aspectos de montaje de dispositivos, y montajes NFS. Estas son tres aspectos de gran importancia del filesystem. O al menos usted debe tener una idea básica de cómo usarlos.


    La Shell Indice Manejando Archivos y Directorios