Busca monografías, tesis y trabajos de investigación

Buscar en Internet 

       Revistas   Cursos   Biografías

rss feeds RSS / /

Asignación de permisos en linux

Resumen: Cualquier persona acostumbrada a utilizar el sistema operativo Windows que comienza a trabajar en un ambiente Linux, seguramente se ha enfrentado o se enfrentará a problemas tales como...

Publicación enviada por Jaime Montoya




 


Cualquier persona acostumbrada a utilizar el sistema operativo Windows que comienza a trabajar en un ambiente Linux, seguramente se ha enfrentado o se enfrentará a problemas tales como:
· No poder guardar archivos en algunas carpetas.
· Imposibilidad para abrir archivos.
· Archivos que se pueden abrir y leer pero que cuando se modifican y se quieren guardar cambios, aparecen mensajes de error diciendo que no hay permisos suficientes para modificar el archivo.

Problemas como los anteriores son típicos, y muchas veces grandes dolores de cabeza para los principiantes o aquellos que comienzan a trabajar en ambiente Linux. Sin embargo eso no debe hacer pensar que Linux tiene deficiencias en este sentido, sino todo lo contrario, pues todo esto es parte de la seguridad que ofrece un sistema tan robusto como lo es Linux.

A continuación se explicará en detalle cada uno de los pasos que se deben seguir para la asignación de permisos para archivos y carpetas en Linux.

Lo primero es abrir una consola para escribir los comandos correspondientes. Luego se debe ingresar como superusuario o root, mediante el comando su, y luego escribir la contraseña. Debe notarse que el símbolo "$" es cambiado por "#", indicando que ya no se está trabajando como simple usuario sino como superusuario or root.

El comando que sirve para la asignación de permisos en Linux es "chmod". Esta instrucción puede usarse con letras o números. La forma más corriente es expresar los permisos numéricamente para hacerlo de forma más corta y práctica, aunque es cuestión de preferencia. Es común utilizar "chmod 777" para asignar todos los permisos a un archivo o carpeta. Es necesario mencionar que asignarle todos los permisos a una carpeta no significa que automáticamente todos los archivos y subcarpetas que estén dentro de la carpeta que tiene todos los permisos, tendrán también permisos totales. Si una carpeta no tiene permiso de lectura, no será posible visualizar los archivos o subcarpetas que ésta contiene. Si se le asignan todos los permisos, es posible que en el interior de la carpeta hayan archivos con restricciones, de modo que aunque la carpeta tenga todos los permisos, ciertos archivos o subcarpetas pueden tener algunas restricciones. Cada carpeta y cada archivo funciona bajo su propia asignación de permisos de manera independiente.

Tipos de Usuario en Linux
Linux está diseñado para ser multiusuario. En este sistema operativo se permiten tres niveles de acceso a los archivos (los tipos de permiso de acceso que se explicarán más adelante), para tres categorías diferentes de usuarios, que son:

1. Owner (propietario):
La persona que el sistema reconoce como dueño de la carpeta o archivo.
2. Group (grupo): Conjunto de usuarios con permisos similares.
3. Other (otros): Cualquier otra persona.

Tipos de Permiso de Acceso
Como se explicó anteriormente, asignar permisos a un directorio (carpeta) no significa que los archivos o subcarpetas que pertenecen a esta tienen automáticamente los mismos permisos que se le asignaron a la carpeta. Por lo tanto los permisos de acceso pueden ser para directorios o para archivos.

Los permisos para archivos funcionan de esta manera:
1. Read (lectura): Permiso para ver el archivo, sin hacer cambios.
2. Write (escritura): Permiso de escritura: puede escribir el archivo, y por tanto, cambiarlo.
3. Execute (ejecución): El archivo o directorio puede ser ejecutado.
En cuanto a los archivos para directorios, funcionan así:
1. Read: Permiso para listar los archivos de un directorio.
2. Write: Permiso para añadir nuevos archivos al directorio.
3. Execute: Permiso para acceder a los archivos del directorio.

Cómo Conocer los Permisos de un Directorio o Archivo
El primer paso es entrar a la consola como superusuario, para lo cual se deberá usar el comando "su" y luego escribir la contraseña respectiva. Luego se necesita es ubicarse en el directorio que contiene el directorio o archivo del cual se desea conocer los permisos que tiene. Para moverse hacia un directorio, se utiliza el comando "cd". Al escribir "cd", se llega al "root" o directorio raíz, que para quienes están más familiarizados a Windows, sería el equivalente de decir la unidad "C". Para conocer el directorio actual, se utiliza el comando "pwd".
Suponiendo que se desean conocer los permisos que tiene el directorio /acpi/, que se encuentra ubicado dentro del directorio /etc/, lo que se haría es primeramente escribir "cd" para regresar al root o raíz. Luego escribir "cd /etc" para llegar al directorio /etc/. Para confirmar que se ha llegado satisfactoriamente al directorio /etc/, escribir "pwd" y el resultado deberá decir "/etc", revelando que efectivamente se ha llegado al directorio /etc/. Finalmente escribir "ls -l" y se muestran todos los archivos y directorios que se encuentran dentro del directorio /etc/, en orden alfabético. Debido a que en este caso se están buscando los permisos para el directorio /acpi/, en el listado que aparece se debe buscar precisamente la descripción para /acpi/. Debe aparecer algo parecido a lo que se muestra a continuación:

drwxr-xr-x 3 root root 4096 2007-07-21 09:51 acpi

"drwxr-xr-x" revela los permisos que tiene el directorio /acpi/. Owner tiene permiso de lectura, escritura y ejecución (wxr equivale a 7). Group tiene permiso para lectura y ejecución (equivale a 5). Para Other se tiene permiso también de lectura y ejecución (equivale a 5). Más adelante se explicará en detalle la manera en que esto funciona.

Cómo Fijar Permisos para Archivos y Directorios
Como ya se mencionaba anteriormente, la orden "chmod" es la que sirve para la asignación de permisos en Linux. Por ejemplo chmod 777 index.php le asigna todos los permisos al archivo index.php. Está claro que primeramente se debe ir al directorio que contiene el archivo index.php (usando el comando "cd" tal como se explicó anteriormente), y estando ya en ese directorio, escribir "chmod 777 index.php" para el caso de querer asignar todos los permisos al archivo index.php. Para comprender el significado de 777 se debe conocer que 4 significa permiso de lectura, 2 permiso de escritura y 1 permiso de ejecución. Sumando estos valores se puede ver que un archivo puede tener los siguientes permisos (por cada tipo de usuario):

4 = lectura
2 = escritura
1 = ejecución

0 = no hay permiso para nada
3 (2+1) = escritura y ejecución
5 (4+1) = lectura y ejecución
6 (4+2) = lectura y escritura
7 (4+2+1) = lectura, escritura y ejecución

Todo ello para los tres tipos de usuario.

Así, un "chmod 777 index.php" significa que owner, group y others tienen permiso de lectura, escritura y ejecución. "chmod 766 index.php" significa que el owner tiene permiso de lectura, escritura y ejecución, y el group y others solamente permiso de lectura y escritura. "chmod 744 index.php" significa que el owner tiene permisos de lectura, escritura y ejecuci{on, mientras que group y others únicamente permisos de lectura.

Como se puede ver, son tres dígitos, de izquierda a derecha, los que designan los permisos del owner, group y others. A continuación se tiene su equivalente en letras (que utilizaría en total nueve dígitos en lugar de tres):

0 = - - - = sin acceso
1 = - - x = ejecución
2 = - w - = escritura
3 = - w x = escritura y ejecución
4 = r - - = lectura
5 = r - x = lectura y ejecución
6 = r w - = lectura y escritura
7 = r w x = lectura, escritura y ejecución

Por ejemplo, r w - r - - r - - significa que el owner tiene permisos de lectura y escritura (r w -); el group permiso de lectura únicamente (r - -) y other, permiso de lectura (r - -). El equivalente numérico sería 644.

Debe también saberse que aunque "chmod 644 index.php", no equivale a "chmod r w - r - - r - - index.php". En caso que se desee usar "chmod" con texto, se deberá respetar la siguiente sintaxis:

chmod [ugo][+-][rwx] [nombre_archivo]

Donde [u=user u owner, g=group y o=other]; [+/- activa o desactiva los atributos siguientes]; [r=read, w=write, x=execute]

Por ejemplo, "chmod go+r index.php" significa que se asignan permisos de lectura para group y other en el archivo index.php. "chmod go-r index.php" significa que se quitan permisos de lectura para group y other en el archivo index.php. Con "chmod ugo+rx index.php" se asignan permisos de lectura y ejecución para user/owner, group y other en el archivo index.php. "chmod uo-w index.php" significa que se quitan permisos de escritura para user/owner y para other. Nótese que al usar +/- para activar o desactivar permisos, se cambian únicamente los atributos que se especifican, pero no se alteran otros permisos que pudieran estar asignados anteriormente. Por ejemplo con "chmod go+r index.php" no se modifica la atribución anterior a group de un permiso de ejecución, entre otros permisos que no se modifican. Si se quieren modificar también todos los otros permisos no mencionados, en vez de +/- deberá utilizarse el signo "=", por ejemplo "chmod go=r index.php" asigna a group y other permiso de lectura sobre index.php y elimina a la vez cualquier otro permiso para ambos, y como user/owner no se menciona, se dejan los permisos que tenía tal como estaban. Si se escribiera "chmod ugo=wr index.php" significa que a user/owner, group y others se les da permiso de escritura y lectura y se les quita el permiso de ejecución. No es necesario escribir en orden "rwx" para "read, write, execute". El orden no importa en este caso, de modo que "xw" equivale a "wx", es decir permisos para escribir y ejecutar.

Es posible también no referirse a un archivo en específico, sino a todos los archivos dentro del directorio que sean de un tipo en especial. Por ejemplo, si se quisieran asignar todos los permisos para todos los archivos con extensión .php en el directorio actual, en vez de escribir "chmod 777 index.php", se deberá escribir "chmod 777 *php". Con eso no sólo el archivo index.php tendrá permisos totales de lectura, escritura y ejecución para todos los usuarios, sino que también cualquier otro archivo con extensión .php gozará de los mismos permisos. Esto es de gran utilidad por ejemplo en el caso que dentro de un directorio se tengan muchos archivos .php. Resultaría monótono y tedioso estar repitiendo el procedimiento para cada archivo, mientras que es muy fácil hacerlo con una simple instrucción utilizando "chmod 777 *php". En el caso de querer hacer eso para archivos .html en vez de archivos .php, simplemente se escribe "chmod 777 *html", y así para cualquier otro tipo de archivo que se desee.

En el caso de querer fijar permisos para directorios, el proceso es el mismo que para archivos, con la diferencia que no debe olvidarse escribir la correspondiente pleca ("/") después del número, cosa que no se hace en el caso de permisos para archivos. Por ejemplo, "chmod 777 index.php" es un ejemplo de asignación de permisos para un archivo, mientras que "chmod 777 /var" es un ejemplo de asignación de permisos para un directorio. Si se escribiera simplemente "chmod 777 var", aparecería un mensaje de error como este:

chmod: no se puede acceder a «var»: No existe el fichero o el directorio

Un ejemplo práctico es que se quieran asignar todos los permisos para el directorio var. Lo primero sería entrar como root/superusuario con el comando "su" y la introducción de la contraseña. Luego escribir el comando "pwd" y el resultado debe ser "/root", indicando que el directorio actual es el /root. En caso de no estar en el directorio /root, escribir el comando "cd" para llegar establecer /root como directorio actual. Luego escribir "chmod 777 /var", con lo cual se asignan todos los permisos para todos los usuarios, tanto de lectura, como también de escritura y ejecución. Con eso será posible guardar archivos o crear nuevos directorios en el directorio /var.

Un caso real donde se aplica esto es por ejemplo al descargar un archivo comprimido en formato .tar.gz. Supóngase que la descarga se hace automáticamente a /home/nombre_usuario/Desktop/Descargas, pero para descomprimirse el .tar.gz, se moverá el archivo hacia el directorio /var. Inicialmente al querer cortar o copiar y luego pegar en el directorio /var, podría aparecer un mensaje de error diciendo que no es posible escribir en el directorio /var. Es entonces que se siguen los pasos para asignar permisos al directorio /var, de modo que sea posible ubicar el archivo comprimido con extensión .tar.gz en el directorio /var y así poder después descomprimirlo desde ahí. Suponiendo que el nombre completo del archivo que se ha ubicado en el directorio /var sea "OOo_2.2.1_LinuxIntel_install_wJRE_en-US.tar.gz", después se podría perfectamente descomprimir desde ahí primeramente moviéndose hasta el directorio /var con el comando "cd", y luego escribiendo "tar xvzf OOo_2.2.1_LinuxIntel_install_wJRE_en-US.tar.gz" para descomprimir el archivo. Aplicaciones prácticas como la recién descrita son posibles cuando se conoce bien la manera de asignar permisos correctamente tanto a archivos como a directorios.

La asignación de permisos para directorios y archivos es algo elemental para los usuarios de Linux, por lo cual será de mucho provecho tener estos conocimientos "para no ahogarse en un vaso de agua", pues pequeños detalles como no saber asignar permisos pueden hacer que una persona se quede atrapada sin poder seguir adelante en el uso de Linux. Esto es parte de los conocimientos básicos y fundamentales que todo usuario de Linux debe tener.

AUTOR
Jaime Montoya
jaimemontoya@jaimemontoya.com
www.jaimemontoya.com
Santa Ana, 15 de septiembre de 2007
El Salvador



Valora este artículo 5   4   3   2   1

Comparte  Enviar a facebook Facebook   Enviar a menéame Menéame   Digg   Añadir a del.icio.us Delicious   Enviar a Technorati Technorati   Enviar a Twitter Twitter
Artículos Destacados