Subsecciones
La mayoría de los sistemas de ficheros definen 7 tipos de ficheros:
- Ficheros normales
- son los usuales; se crean con distintos programas (vi, cp, touch, etc.) y se borran con rm
- Directorios
- contiene referencias a otros ficheros y directorios; se crean con mkdir y se borran con rmdir o rm -r
- Ficheros de dispositivos de caracteres o bloques
- permiten la comunicación con el hardware y los periféricos; se crean con mknod y se borran con rm
- caracteres: entrada/salida byte a byte
- bloques: entrada salida en bloques de datos
- Tuberías con nombre (named pipes)
- también llamados ficheros FIFO, permiten la comunicación entre procesos; se crean con mknod y se borran con rm
- Sockets
- comunican procesos en la red; se crean con socket() y se borran con rm o unlink()
- Enlaces simbólicos
- también llamados enlaces blandos: apuntador a otro fichero; se crean con ln -s y se borran con rm
El comando file nos permite determinar el tipo de un fichero:
- para ficheros normales, distingue según contenido (fichero de imagen, pdf, ASCII, etc)
- Ejemplo:
$ file /dev/xconsole
/dev/xconsole: fifo (named pipe)
$ file fichero1
fichero1: PDF document, version 1.2
$ file fichero2
fichero2: Microsoft Office Document
$ file fichero3
fichero3: PNG image data, 750 x 686, 8-bit/color RGB, non-interlaced
Podemos ver los atributos de un fichero con ls -l
- Indicador de tipo
- el primer carácter nos indica el tipo del fichero
Carácter | Tipo |
- | fichero normal |
d | directorio |
l | enlace simbólico |
c | fichero de dispositivo de caracteres |
b | fichero de dispositivo de bloques |
p | tubería |
s | socket |
- Número de enlaces
- indica el número de nombres (enlaces duros) del fichero
- en el caso de un directorio, esto corresponde con el número de subdirectorios (incluidos . y ..)
- Tamaño
- es el tamaño en bytes
- con ls -lh se ve el tamaño de forma más legible
- el tamaño máximo de un fichero depende del filesystem usado
- Fecha
- especifica la fecha de última modificación del fichero
- podemos actualizarla con el comando touch
- Nombre
- la longitud máxima del nombre es de 255 caracteres
- evitar el uso de espacios y caracteres especiales como *,$, ?, ´, ", /, \
UNIX proporciona tres operaciones básicas para realizar sobre un fichero o directorio: lectura (r), escritura (w) y ejecución (x)
- Efecto sobre un fichero:
- lectura (r): permite abrir y leer el fichero
- escritura (w): permite modificar o truncar el fichero (para borrarlo, basta con que el directorio tenga permiso de escritura)
- ejecución (x): permite ejecutar el fichero (binario o script)
- Efecto sobre directorios:
- ejecución (x): permite entrar en el directorio (pero no listar su contenido, ni crear ficheros o directorios)
- lectura y ejecución (rx): permite listar el contenido del directorio (pero no crear ficheros o directorios)
- escritura y ejecución (wx): permite crear, borrar o renombrar ficheros (pero no listar su contenido)
- acceso total (rwx)
Los permisos se aplican en tres categorías:
- Permisos de usuario (u): propietario del fichero (por defecto, el usuario que lo creó)
- Permisos de grupo (g): grupo del fichero (por defecto, grupo principal del usuario que lo creó)
- Permisos de otros (o): resto de usuarios
Cada usuario cae en uno solo de estas categorías:
- p.e. al propietario se le aplican los permisos de usuario, aunque sean más restrictivos que los de grupo
Los permisos se identifican con 9 caracteres:
El comando para modificar los permisos es chmod
- Formato
chmod [-R] operación ficheros
- -R indica acceso recursivo
- solo el propietario del fichero (o root) puede cambiar los permisos
operación indica como cambiar los permisos, y puede especificarse mediante símbolos o números:
- Permisos simbólicos: formato quien op permisos
- quien
- especificado por u, g, o o a para todos
- op
- puede ser + para añadir permisos, - para quitar o = para establecer
- permisos
- especificados por r, w, x
Ejemplos:
- chmod u+x temp.dat
añade permisos de ejecución para el usuario (manteniendo los permisos existentes)
- chmod ug=rw,o=r temp.dat
lectura y escritura para usuario y grupo y sólo lectura para el resto
- chmod -R =r *
pon, de forma recursiva, permisos sólo lectura para todos (ugo)
- chmod a-x *.bak
quita el permiso de ejecución para todos
- chmod g=u temp.dat
pon los permisos de grupo igual a los del usuario
- chmod a= *
quita los permisos a todos
- Permisos numéricos:
- operación se representa por un número octal de tres dígitos, para u, g, y o respectivamente
- cada dígito vale:
- 4 para r, 2 para w y 1 para x
- para combinaciones, se suman:
p.e. rw es 6, rx es 5 y rwx es 7
Ejemplos:
- chmod 750 temp.dat
permisos rwx para usuario, rx para grupo y ninguno para otros
- chmod 043 temp.dat
ninguno para usuario, r para grupo y wx para otros
Además de rwx existen los permisos setuid/setgid (s) y sticky bit (t)
están relacionados con los atributos de los procesos:
- cuando un proceso se crea se le asigna un UID/GID real y un UID/GID efectivo
- UID/GID real
- identificadores de usuario y grupo del usuario que lanzó el proceso (y que puede matarlo)
- UID/GID efectivos
- determinan las operaciones que el proceso puede hacer sobre los objetos del sistema
- por ejemplo, un proceso con UID efectivo 0 (root) puede manipular todos los ficheros del sistema
- lo normal es que los UID/GID normal y efectivo de un proceso coincidan
Podemos usar ps para ver los RUID/RGID y EUID/EGID
- ps axo ruid,rgid,euid,egid,cmd para ver números
- ps axo ruser,euser,rgroup,egroup,cmd para nombres
Los permisos setuid/setgid permiten que un proceso lanzado por un usuario se ejecute con EUID/EGID de otro usuario
- Ejemplo: el programa passwd
-rwsr-xr-x 1 root root 25872 2005-07-25 23:15 /usr/bin/passwd
cuando un usuario ejecuta passwd este proceso puede modificar el fichero /etc/shadow propiedad de root
Fijar setuid/setgid
- Forma simbólica
chmod u+s fija setuid
chmod g+s fija setgid
- Forma numérica: 4000 setuid, 2000 setgid
Ejemplo:
$ ls -l temp
-rw-r----- 1 tomas gac 0 2005-09-22 18:07 temp
$ chmod u+s temp; ls -l temp
-rwSr----- 1 tomas gac 0 2005-09-22 18:07 temp
$ chmod u+x temp; ls -l temp
-rwsr----- 1 tomas gac 0 2005-09-22 18:07 temp
$ chmod 6740 temp; ls -l temp
-rwsr-S--- 1 tomas gac 0 2005-09-22 18:07 temp
IMPORTANTE: es peligroso poder ejecutar procesos con permisos de otro usuario
- debería evitarse el uso de ficheros setuid/setgid
solo se usa en directorios
- permite crear ficheros en el directorio (si tiene permiso de escritura), pero solo los puede borrar:
- el propietario del fichero
- el propietario del directorio
- el superusuario
Ejemplo:
$ ls -ld /tmp
drwxrwxrwt 15 root root 3072 2005-09-22 19:09 /tmp/
Para activar el sticky bit
- chmod +t dir
- chmod 1xxx dir
Cuando se crea un fichero se cambian los permisos por defecto
- estos permisos pueden modificarse con umask
umask [opciones] valor
donde valor son tres dígitos que especifican los permisos para u, g, o según la tabla
Octal | Permisos | Octal | Permisos |
0 | rwx | 4 | -wx |
1 | rw- | 5 | -w- |
2 | r-x | 6 | --
x |
3 | r-- | 7 | --- |
- Opciones (dependen de la versión de shell):
- -S muestra los permisos por defecto
- Ejemplo3
$ umask 027
$ umask -S
u=rwx,g=rx,o=
Los comandos chown y chgrp permiten cambiar el propietario y grupo de un fichero
- sólo root puede cambiar el propietario
- el grupo puede cambiarse a otro al que pertenezcamos
Formato:
chown [opciones] propietario ficheros
chgrp [opciones] grupo ficheros
chown [opciones] propietario:grupo ficheros
Algunas opciones
- -R recorre recursivamente los subdirectorios
- -v (verbose) indica las operaciones que realiza
Administración de Sistemas e Redes <ASR.USC[at]gmail.com>
Tomás Fernández Pena <tf.pena[at]usc.es>
Última actualización: 19-10-15 11:23 por tomas
Curso de Administración de Sistemas y Redes por Tomás Fernández Pena se distribuye bajo la licencia Creative Commons Recoñecemento-Compartir baixo a mesma licenza. 3.0 España.
Trabajo original en persoal.citius.usc.es/tf.pena/ASR.