Permisos en archivos y directorios

Rafa Morales 16 Mayo 2013
7min
0
Linux

En Linux, al ser un sistema diseñado fundamentalmente para trabajo en red, la seguridad de la información que almacenemos en los ordenadores centrales o servidores es fundamental.

 

PERMISOS COMUNES

Así, los permisos que los usuarios pueden tener sobre determinados archivos contenidos en él o en los ordenadores principales, se establece en tres niveles claramente diferenciados:

  • Propietario (u): Usuario al que pertenece el archivo el directorio, por defecto, el que lo crea.
  • Grupo (g): Grupo principal al que pertenece el archivo o directorio, por defecto, del usuario que lo crea.
  • Resto (o) de usuarios: Usuarios que no sean de los niveles anteriores.

 

En cada uno de estos niveles se puede establecer uno de los siguientes permisos:

  • Sin permiso (-): Ningún tipo de permiso sobre el archivo.
  • Lectura (r): Leer y copiar un archivo o ver el contenido de un directorio.
  • Escritura (w): Modificar y eliminar un archivo o crear y eliminar archivos en un directorio.
  • Ejecución (x): Ejecutar el archivo si se trata de un archivo ejecutable o script, o también examinar y copiar el contenido de un directorio.

 

De esta manera, cada fichero queda identificado por diez caracteres, nueve pertenecientes a los permisos anteriores y uno más que indica el tipo de archivo del que se trata.

La nomenclatura para el tipo de archivo será la siguiente:

- Archivo ordinario.

d Directorio.

b Archivo de dispositivo de bloque.

c Archivo de dispositivo de caracteres.

l Archivo de enlace simbólico.

p Archivo de tubería.

 

Por tanto, cuando visualicemos las propiedades de un archivo mediante la orden ls –l, observaremos los diez caracteres identificativos siempre de la misma manera, tipo de archivo, permisos de usuario, permisos de grupo y permisos del resto.

drwxr-xr-x 2 root root 4096 2008-11-05 18:30 Fuentes

 

chmod

Permite modificar los permisos de los archivos o directorios, mediante dos sintaxis diferentes.

 

La primera es la siguiente:

chmod [ugo][+-=][rwx] fichero

De esta manera simplemente debemos indicar el nivel al que nos referimos, si queremos añadir permisos (+), eliminar un permiso (-) o asignar los permisos tal y como se especifica sin añadir ni eliminar (=), y por último el tipo de permiso.

chmod g+x fichero
chmod ugo+rw fichero
chmod =x fichero
chmod go-wx fichero
chmod u=rwx,g=rw,o=r fichero

 

Otra manera de realizarlo es mediante números decimales. Se necesitarán tres números decimales entre 0 y 7, que representarán a cada uno de los niveles en este orden usuario, grupo y otros, y al convertir el número decimal a binario sabremos qué permisos se establecen. En este caso no se añaden ni se quitan permisos, simplemente se sustituyen, ya que estamos obligados a indicar los tres números.

A continuación podemos observar la correspondencia con los números binarios.

Decimal

r = 22 = 4

w = 21 = 2

x = 20 = 1

0

0

0

0

1

0

0

1

2

0

1

0

3

0

1

1

4

1

0

0

5

1

0

1

6

1

1

0

7

1

1

1

 

Por ejemplo, si quisiéramos establecer los siguientes permisos rw- r-- rwx, necesitaríamos un 6 para el usuario, un 4 para el grupo y un 7 para el resto, quedando el comando de la siguiente manera:

rw- r-- rwx = 110 100 111 = 6 4 7

Es decir:

chmod 647 fichero

 

Una manera rápida de calcular el número decimal sería sustituir la r por un 4, la w por un 2, la x por un 1 y el - por un 0, y al final sumarlo todo. Por ejemplo:

rw- = 4 + 2 + 0 = 6

 

chown

Permite modificar el propietario y el grupo de un fichero o conjunto de ficheros o directorio.

chown usuario ficheros
chown usuario:grupo ficheros

Con el parámetro -R se aplica de manera recursiva en los subdirectorios.

 

chgrp

Permite modificar el grupo solamente de un fichero o conjunto de ficheros.

chgrp grupo ficheros

Con el parámetro -R se aplica de manera recursiva en los subdirectorios.

 

PERMISOS ESPECIALES

Existen tres permisos especiales que añadir a los básicos comentados anteriormente, estos son:

  • SetUID o SUID (s): Este permiso sólo se puede añadir al nivel de permisos del usuario (u). Si el fichero tiene permisos de ejecución, este permiso hará que el usuario que lo ejecute lo haga con los mismos privilegios que el usuario propietario del fichero. Si el fichero posee permisos de ejecución, al activar este permiso la x se sustituirá por una s minúscula, pero si no lo posee, se sustituirá por una S mayúscula. Si se añade el permiso a un directorio, este permiso se ignora.
  • SetGID o GUID (s): Este permiso sólo se puede añadir al nivel de permisos del grupo (g). Si el fichero tiene permisos de ejecución, este permiso hará que el usuario que lo ejecute lo haga con los mismos privilegios que el del grupo propietario del fichero. Si el fichero posee permisos de ejecución, al activar este permiso la x se sustituirá por una s minúscula, pero si no lo posee, se sustituirá por una S mayúscula. Si se añade el permiso a un directorio, hará que todos los ficheros que se creen en su interior tengan como propietario de grupo al grupo de este directorio y no al del grupo principal del usuario que lo creó el fichero.
  • Sticky (t): Este permiso sólo se puede añadir al nivel de permisos del resto(o). Al activarlo en un directorio se consigue que los ficheros que cree un usuario dentro de él sólo puedan ser editados y eliminados por ese mismo usuario (utilizado en directorios temporales). Si el directorio posee permisos de ejecución, al activar este permiso la x se sustituirá por una t minúscula, pero si no lo posee, se sustituirá por una T mayúscula. Si se añade este permiso a un fichero, este permiso se ignorará.

 

chmod

Permite modificar los permisos especiales de los archivos o directorios, mediante dos sintaxis diferentes, al igual que con los permisos básicos.

chmod [ugo][+-=][st] fichero

 

De esa manera podemos encontrar aplicados los siguientes permisos en un archivo o directorio:

rws r-s ---

rwS rwx ---

rwx rwx rwt

 

También podemos establecer permisos mediante números decimales. A los tres números que representarían los permisos básicos comentados anteriormente se le añadiría un número nuevo a la izquierda de éstos que sería el resultado de los tres permisos especiales siguiendo la siguiente combinación:

Decimal

SetUID (s)

s = 22 = 4

SetGID (s)

s = 21 = 2

Sticky (t)

x = 20 = 1

0

0

0

0

1

0

0

1

2

0

1

0

3

0

1

1

4

1

0

0

5

1

0

1

6

1

1

0

7

1

1

1

 

Por ejemplo, si quisiéramos establecer los siguientes permisos rwx rwx --- y activar los permisos SetUID y SetGID:

ss- rwx rwx --- = 110 111 111 000 = 6 7 7 0

chmod 6770 fichero

 

Si se nos olvidara activar el permiso de ejecución el resultado sería el siguiente, con las letras en mayúscula:

ss- rw- rw- --- = 110 110 110 000 = 6 6 6 0

chmod 6660 fichero

rwS rwS --- archivo

 

Si quisiéramos establecer los siguientes permisos rwx rwx rwx y activar el permiso Sticky:

--t rwx rwx rwx = 001 111 111 111 = 1 7 7 7

chmod 1777 fichero

 

Podemos eliminar los permisos especiales usando el 0:

chmod 0777 fichero