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