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.
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 |
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 |
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.
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).
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).
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 |