viernes, 5 de diciembre de 2008

Permisos de archivos o directorios

Una de las características de linux es la posibilidad de poner diversos tipos de permisos tanto a directorios como a archivos.

===Clases de permisos:

Los permisos de los archivos y directorios se forman con tres grupos, de tres permisos cada uno, que corresponden:
el 1º a los permisos del propietario
el 2º al grupo
el 3º a otros (todos los demás)

( r )     permiso de lectura :
- en directorios: Los usuarios ven los nombres de archivos y directorios de dicho directorio.
- en un archivo: Los usuarios ven el contenido del archivo.
( w)    permiso de escritura :
- en directorios: Los usuarios pueden crear archivos o directorios, cambiarles el nombre o eliminar los archivos o directorios que contenga el directorio en cuestión.
- en un archivo: Los usuarios pueden cambiar el contenido del archivo.
( x )    permiso de ejecución :
- en directorios: Los usuarios ven el contenido de los archivos del directorio y pueden ejecutar comandos, secuencias de comandos y programas en dicho directorio.
- en un archivo: Los usuarios pueden ejecutar el archivo (si se trata de un archivo ejecutable o una secuencia de comandos) escribiendo el nombre de archivo en el símbolo de la línea de comandos.
( - )     sin permisos

Considera siempre con cuidado los permisos que concedes para obtener acceso a los archivos y directorios. Concede permisos de acceso a otras personas sólo cuando haya un buen motivo para ello (si colaboras en un proyecto en grupo, por ejemplo, es posible que el grupo tenga que obtener acceso a determinados archivos o directorios).

=== ¿ Cómo saber los permisos de un archivo ?:

Colócate en el directorio en que está el archivo y usa el comando ls -l
ejemplo:
usuario@guadav5:~$ ls -l Permisos.txt
-rw-r--r-- 1 usuario usuario 5005 2008-11-25 18:42 Permisos.txt
( - )quiere decir que es un archivo
( rw- ) permisos del propietario: tiene permisos de lectura y escritura, pero no de ejecución
( r- - ) permisos del grupo: tiene sólo permisos de lectura
( r- - ) permisos de otros (todos los demás): tienen sólo permisos de lectura
Junto a los permisos el comando nos da otros datos como:
El propietario: usuario     el grupo:  usuario
Los bytes que pesa: 5005
La fecha y hora de creación: 2008-11-12 25 18:42
nombre del archivo: Permisos.txt

=== ¿ Cómo saber los permisos de un directorio ?:

Colócate en el directorio /home/usuario/Imagenes y usa el comando ls -l
usuario@guadav5:~/Imágenes$ ls -l
total 392
-rwx- - - - - - 1 usuario usuario   5687 2008-10-07 22:45 linux-inside.jpeg
-rwx- - - - - - 1 usuario usuario   2879 2008-10-07 22:45 nubes.jpeg
-rwx- - - - - - 1 usuario usuario 281805 2008-10-07 22:45 ojos.jpg
-rwx- - - - - - 1 usuario usuario  19911 2008-10-07 22:45 guada1.png
Te salen los permisos de los archivos que contiene dicho directorio: en este caso permisos de lectura, escritura y ejecución solo para el propietario (el grupo y otros no tienen ningún permiso sobre los archivos)

=== ¿ Cómo se expresan los permisos numéricamente ?:

Ejemplo:
Un archivo o directorio tiene los permisos 775
Este número 775 es en realidad 7-7-5, cada número es el permiso establecido para un grupo.
El primer número (7) para el propietario
El segundo número (7) para el grupo.
El tercero (5) para los demás.

Cada tipo de permiso se representa con un número:
7   todos los permisos          rwx
6   lectura y escritura           rw-
5   lectura y ejecución          r-x
4   sólo lectura                     r- -
3   escritura y ejecución      -wx
2   sólo escritura                 -w-
1   sólo ejecución                - -x
0   ningún permiso              - - -

¿Cómo llegamos al 775?
Para el propietario tenemos un 7 de todos los permisos (rwx)
Para los grupos un 7 de todos los permisos (rwx)
Para el público en general tenemos un 5 de lectura y ejecución (rx-)

Todo esto quiere decir que el propietario y los grupos de usuarios pueden manipular el archivo en cualquier forma (lectura, escritura y ejecución), el resto del mundo tiene permisos de lectura y ejecución pero no de escritura con lo que no pueden modificar el archivo.

----------------------------------------------------------------------------------

=== ¿ Cómo modificar los permisos ?:

No es conveniente modificar los permisos de archivos o directorios que no estén en /home/usuario, a menos que se sepa muy bien que y porque se va a hacer. Si queremos modificar los permisos de un archivo o directorio que estén en otro lugar del sistema tendremos que hacerlo en una terminal con permisos de root ( o anteponiendo el comando sudo al comando chmod ), o con nautilus con permisos de root ( abriendo nautilus desde la terminal con el comando sudo nautilus; o desde alt+f2 y el comando gksu nautilus ).

= Modificar permisos en la Terminal con el comando chmod:

1- Usando los permisos en forma numérica:

La sintaxis general es: chmod xyz dirección_del archivo o directorio. xyz son los tres números que indican los permisos de forma numérica. Si el archivo o directorio están fuera de la carpeta de usuario hay que añadir el comando sudo delante de chmod. Si el archivo o directorio están en la carpeta de usuario solo es necesario poner su nombre, pero también podemos poner toda la dirección.

A continuación unos ejemplos prácticos.

a) Cambiar permisos a un archivo de la carpeta de usuario /home/usuario:

Ejemplo: cambiamos permisos al archivo Permiso.txt ( previamente los tenia asi: -rw-r- -r- - )
ejecutando en una terminal:
usuario@guadav5:~$ chmod 754 Permiso.txt
ahora se obtiene como resultado:
-rwxr-xr- - 1 usuario usuario 5005 2008-11-25 19:11 Permiso.txt

Hemos cambiado:  desde:  -rw-r- -r- - lectura y escritura (pero no ejecución) para el propietario (rw-  6), solo lectura para el grupo (r- -  4), y solo lectura para otros (r- -   4)
hasta: -rwxr-xr- - lectura,escritura y ejecución para el propietario (rwx  7), lectura y ejecución para el grupo (r-x 5) y solo lectura para otros (r- -  4)  ; osea en números hemos cambiado los permisos de 644 a 754

b) Cambiar permisos a un archivo de otro directorio:

usuario@guadav5:~$ sudo chmod 754 /opt/prueba.txt  Hemos puesto sudo delante de chmod para que tras pedirnos, y poner, la contraseña de root, nos modifique los permisos del archivo prueba.txt que no esta en la carpeta del usuario, por lo que hemos puesto la ruta completa hacia ese archivo

c) Cambiar permisos de un directorio:

usuario@guadav5:~$ sudo chmod 754 /opt . Hemos puesto sudo delante de chmod para que nos modifique los permisos de un directorio que no esta en la carpeta de usuario. Hemos puesto la dirección completa del directorio. Se modificaran los permisos del directorio /opt, pero no los de sus archivos, ni  los de los subdirectorios que pueda contener ni los archivos de éstos.

d) Cambiar permisos de un directorio y de los archivos y subdirectorios que contenga:

usuario@guadav5:~$ sudo chmod -R 754 /opt  .Hemos añadido la opción -R tras el comando chmod, con lo que se cambian los permisos de todo,  del directorio /opt , de sus archivos, de sus subdirectorios y de los archivos que contengan éstos. Hay que tener por tanto cuidado con esto ya que se cambian los permisos a un montón de archivos y subdirectorios, que luego seria muy costoso volver a cambiar uno a uno. No usar pues esta opción salvo que se esté muy seguro de lo que se quiere hacer.

En este enlace se explica de forma muy didáctica el uso de chmod con la opción -R : http://foro.ubuntu-guia.com/permisos-diferentes-a-directorios-y-archivos  ;gracias por ello a su autor Juanetebitel.

2-Usando los permisos de forma no numérica:

Siguiendo las mismas normas indicadas anteriormente podemos cambiar los permisos de forma no numérica.

Los permisos que podemos dar o quitar sobre un archivo o directorio son:
r     de lectura
w   de escritura
x    de ejecución
estos permisos pueden ser personalizados para el usuario dueño, el grupo dueño o para los otros usuarios del sistema.
Los dueños de los archivos/directorios son
u el usuario dueño del archivo o directorio
g el grupo dueño del archivo o directorio
o los demás usuarios del sistema
a todos los usuarios del sistema ( incluidos el usuario dueño, y el grupo dueño )

Para cambiar los permisos usamos el comando chmod de acuerdo al siguiente esquema:
chmod [quien] [+ o -] [permiso]

los parámetros ( es importante no poner espacio entre los parámetros):
quien , nos define a que usuario (u,g,o,a) vamos a cambiar los permisos
+ o - , nos permite poner (+) o quitar (-) permisos
permiso , nos indica que tipo de permiso ( rwx )vamos a dar

ejemplos:
chmod u+x archivo.txt    al usuario dueño (u) damos (+) permiso de ejecución (x) del archivo.txt
chmod go-w archivo.txt   al grupo dueño (g) y a los demás usuarios del sistema (o) le quitamos (-) permisos de escritura (w) sobre el archivo.txt
chmod a+w /home/usuario/Audio    a todos los usuarios del sistema (a) les damos (+) permisos de escritura sobre el directorio Audio

-------------------------------------------------------------------------------------------------

= Modificar los permisos de forma gráfica:

Para que aparezcan en nautilus los permisos de forma que se puedan modificar totalmente a nuestro gusto, hay que ejecutar primero el editor de configuración de gnome: gconf-editor ->apps -> nautilus -> preferences: Activar show_advanced_permissions

Para que aparezcan estos mismos permisos en el nautilus ejecutado en modo root ( sudo nautilus ) debemos ejecutar gconf-editor con permisos de root ( sudo gconf-editor ) y hacer las modificaciones en las mismas secciones indicadas.

Una vez hecho esto se pasa a los siguientes pasos:

<<< Cambiar permisos a un archivo:

Si el archivo esta en la carpeta /home/usuario, abriremos Nautilus sin permisos especiales, si el archivo no esta en la carpeta /home/usuario, debemos abrir nautilus desde la terminal con permisos de root: sudo nautilus
1- Desde nautilus
2- Seleccionar el archivo al que se quiera cambiar los permisos
3- con el botón derecho del ratón: Propiedades-pestaña Permisos
4- aparece una ventana en la que podemos cambiar el propietario ( éste solo lo podemos cambiar si hemos abierto nautilus con permisos de root ) , el grupo, y los permisos



5-Una vez cambiado los permisos, debes cerrar el administrador nautilus

<<< Cambiar permisos a un directorio: básicamente es lo mismo:
1- Desde nautilus  ( ejecutado sin o con permisos de root dependiendo de que directorio queramos cambiar )
2- Seleccionar el archivo al que se quiera cambiar los permisos
3- con el botón derecho del ratón: Propiedades-pestaña Permisos
4- aparece la ventana en la que podemos de forma similar cambiar el propietario ( éste solo lo podemos cambiar si hemos abierto nautilus con permisos de root ), grupo y permisos



5- Una vez cambiado los permisos, debes cerrar el administrador Nautilus

-----------------------------

2 comentarios:

  1. [...] puede no tener permisos para ser ejecutado en el sistema, en cuyo caso hay que previamente cambiar esos permisos para poderlo [...]

    ResponderEliminar
  2. Buen trabajo, muchas gracias, más de una vez que he querido añadir una línea en algún archivo, fuera de home, a través de gedit para configurarlo siguiendo indicaciones de algún libro o manual para solucionar o mejorar algo, siempre me deniega el permiso de escritura, siendo yo el administrador, probé entrando con permisos de root abriendo nautilus con el comando gksudo nautilus + la ruta del directorio y una vez dentro del archivo me deniega escribir, solo tengo permisos de escritura, probaré con tus normas, están muy bien explicadas y documentadas.
    Muchas gracias. Saludos

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.