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.
Jaime Montoya
Santa Ana, 15 de septiembre de 2007
El Salvador
Página anterior | Volver al principio del trabajo | Página siguiente |