En la entrada anterior (si no la has leído ya, recomiendo leerla para entender mejor esta) vimos como mostrar un listado de los archivos y carpetas dentro de un directorio, pero faltaron aclarar cierta información que se nos muestra al ingresar ls -lh como el grupo de usuario, el dueño del archivo y los permisos del usuario.
Antes de continuar hay que dejar algo claro: En Linux, cada archivo y carpeta posee un usuario que es propietario de este y cada usuario pertenece a un grupo, a su vez, cada carpeta y archivo le pertenece a un grupo. Por ejemplo, estoy en Manjaro Linux, mi usuario “cesarer” pertenece al grupo “users”, pero a la vez pertenece al grupo “vboxusers”, ya que he instalado VirtualBox y es necesario que mi usuario pertenezca a ese grupo. A que grupos pertenece tu usuario puede variar dependiendo de la distribución, aplicaciones, y muchos otros factores.
Gestionar Permisos
Creemos una carpeta de cualquier nombre y dentro un documento cualquiera (o copiemos uno ya existente) a /home/usuario/carpeta/ (donde “usuario” es el nombre de tu usuario y carpeta es cualquier carpeta que crees, el nombre no importa). Luego abramos una terminal y nos movemos a esa carpeta usando el comando cd Hagamos un ls -lh en ese lugar y veremos algo así:
[root@manjaro cesarer]# cd carpeta/
[root@manjaro carpeta]# ls -lh
total 3.0M
-rw------- 1 cesarer cesarer 3.0M 18.10.2013 23:34 django-book-es.pdf
Vemos como nos muestra solamente un archivo, luego creemos otra carpeta con mkdir y volvemos a correr un ls -lh:
[root@manjaro carpeta]# mkdir otraCarpeta
[root@manjaro carpeta]# ls -lh
total 3.0M
drwxr-xr-x 2 root root 4.0K 09.12.2013 14:05 otraCarpeta/
-rw------- 1 cesarer cesarer 3.0M 18.10.2013 23:34 django-book-es.pdf
[root@manjaro carpeta]#
Ahora nos muestra 2 elementos un archivo y una carpeta, pero aparte del nombre ¿Cómo sabemos que es una carpeta? Observemos que al inicio de la primera línea aparece una “d” y en la siguiente línea solo aparece un guión. Esa “d” quiere decir que es un directorio. ¿Y que significan todos esos rwxr- y todo lo demás presentado?
Va en este orden:
1. Permisos.
2. Número de enlaces duros.
3. Dueño del archivos.
4. Grupo del archivos.
5. Tamaño.
6. Fecha y Hora de modificación.
7. Nombre del archivo.
La información se muestra en este orden:
[Tipo de Archivo][Permisos de Usuario][Permisos de Grupo][Permisos de Otros]
Lo del tipo de archivo, no voy a profundizar mucho en ello, por ahora nos basta saber si es directorio, archivo común o algo mas, los caracteres que pueden aparecer en esta parte son:
Veamos entonces los permisos de cada entidad, por ejemplo, Permisos de Usuario: [rwx], La “r” quiere decir que puede leer (Read), la “w” quiere decir que puede editar o escribir (Write) y la “x” que es ejecutable (eXecutable). Los mismo se aplica para permisos de grupo y permisos de “otros”, solo hay que recordar que se dividen en grupos de 3 (lectura, escritura, ejecución).
Esto se entenderá mejor con unos ejemplos:
Ejemplo 1:
-rw-rw-r--
Quiere decir que el archivo no es un directorio, tanto el dueño como los miembros del grupo pueden leer y escribir y cualquier otro que no sea ni el dueño ni pertenezca al grupo solamente puede leer, nadie puede ejecutar.
Ejemplo 2:
drw-r-----
Quiere decir que es un directorio, solamente el dueño puede leer y escribir, los miembros del grupo solamente pueden leer y cualquier otro no tiene ningún permiso.
Ejemplo 3:
-rwxr-xr--
Es un archivo ejecutable únicamente por el dueño y por los miembros del grupo al que pertenece, cualquiera puede leer, solamente el dueño puede escribir o modificar.
Ejemplo 4:
-rwxrwxrwx
Todo el mundo tiene todos los permisos de lectura, escritura y ejecución sobre este archivo.
Ejemplo 5:
-rwx------
Solamente el dueño puede leer, escribir y ejecutar, nadie mas puede tocar este archivo.
Ejemplo 6:
----------
Nadie puede hacer nada (salvo el usuario root, para el no hay restricciones), no se puede ni leer, ni modificar ni ejecutar, es el archivo prohibido, sagrado y legendario(?).
Para modificar los permisos de un archivo utilizando la representación en octal con chmod, se hace con esta estructura:
chmod [propietario][grupo][otros] archivo
Donde cada entidad (propietario, grupo u otros) modifica los permisos de manera similar a lo que acabamos de ver. Y estos permisos se asignan con un número, así:
Si queremos entonces Lectura + Escritura, basta con sumar sus números (2 + 4 = 6) Entonces 6, resultaría ser equivalente a “lectura + escritura”. Otro ejemplo, si queremos solo lectura y ejecución, entonces sumamos el 4 de “lectura” con el 1 de “ejecución” y resultaría en 5, entonces lectura + ejecución = 5. Siguiendo esta misma lógica podemos concluir:
Ejemplo 1:
Si queremos que un archivo tenga los siguientes permisos: -rwxrw---- (recordemos que el primer guión es el tipo de archivo) entonces debemos ejecutar:
# chmod 760 archivo
Ejemplo 2:
Si ahora queremos que un archivo tenga estos permisos: -rwxrwxrwx entonces debemos ejecutar:
# chmod 777 archivo
Ejemplo 3:
Si queremos estos permisos: -rw-r--r-x debemos escribir:
# chmod 645 archivo
Ejemplo 4:
Luego, si queremos que un archivo tenga estos permisos: -r-xr-xr-x entonces escribimos:
# chmod 555 archivo
Como pueden ver, es muy fácil, solo deben de recordar el orden: (propietario, grupo, otros), recordar que: 1 es Ejecución, 2 es Escritura y 4 es Lectura, sumar los atributos, colocarlo en el orden antes mencionado después de chmod y listo.
En esta ocasión, se utilizan 3 operadores:
Ademas se utilizan los caracteres de ejecución (x), lectura (r) y escritura (w).
Ejemplo 1:
# chmod +r archivo
En este caso acabamos de asignar el permiso de lectura para todos los usuarios, es decir, si los permisos se encontraban así: -rwx-wx--- ahora estarán así: -rwxrwxr--
Ejemplo 2:
# chmod -r archivo
Ahora acabamos de suprimir el permiso de lectura a todos los usuario, es decir, si antes los permisos eran estos: -rwxrwxrwx ahora son estos: --wx-wx---
Ejemplo 3:
#chmod =r archivo
Con eso último acabamos de asignar únicamente el permiso de escritura a todos los usuarios, si antes los permisos eran estos: -rwxrwxrwx ahora serán estos: -r--r--r--
Ejemplo 4:
# chmod -w archivo
Ahora acabamos de suprimir el permiso de escritura unicamente al propietario, es decir, si antes los permisos eran estos: -rwxrwxr-- ahora son estos: -r-xrwxrw-
Ejemplo 5:
# chmod =w archivo
En este caso se acaba de asignar únicamente el permiso de escritura (suprimiendo otros permisos) al propietario, antes: -rwxrwxr-- después: --w-rwxr--
Si queremos asignar o suprimir permisos solamente al usuario propietario utilizamos chmod u+r archivo, chmod u-r archivo, chmod u+x archivo. Lo mismo para el grupo: chmod g+r archivo, chmod g-r archivo, O bien para otros: chmod o+r archivo, chmod o-r archivo.
También se pueden agregar o suprimir mas de un permiso al mismo tiempo, te animo a que pruebes algo como: chmod +rx archivo, o chmod -rx archivo.
Las combinaciones posibles son tantas que lo dejaré aquí, espero haber explicado bien la lógica del uso de chmod con caracteres (y sino, siéntanse libres de preguntar, sugerir o corregir), yo en lo personal aprendí y me acostumbre desde un principio al modo octal, prueba ambas y usa con la que mas te guste, pero nunca dejes a un lado la otra, nunca se sabe cuando puede llegar a ser útil.
Esto es mucho más fácil que lo anterior, si tenemos 2 usuarios (usuario1 y usuario2) y tenemos un archivo que le pertenece a usuario1, y queremos que le pertenezca a usuario2 entonces hacemos lo siguiente:
# chown usuario2 archivo
O si queremos cambiar el usuario de mas de un archivo:
#chown usuario2 archivo1 archivo 2 archivo3
Esto funciona bien con archivos individuales, pero ¿Que pasa si queremos cambiar el usuario a una carpeta y a lo que esta carpeta contenga? Entonces escribimos lo siguiente:
# chown usuario2 -R carpeta
o bien:
# chown usuario2 --recursive carpeta
Esto es muy parecido a chown, el comando para cambiar el grupo es chgrp y funciona muy similar:
Cambiar el grupo de un solo archivo:
# chgrp grupo archivo
Cambiar el grupo de mas de un archivo:
# chgrp grupo archivo1 archivo2 archivo3
Cambiar el grupo de una carpeta y su contenido:
# chgrp grupo --recursive carpeta
o bién:
# chgrp grupo --R carpeta
Seguro habrás hecho muchas pruebas y lo seguirás haciendo, ¿Se ve un poco de desorden en la terminal, no? Si quieres limpiar la terminal:
$ clear
¿Como colocar un espacio en los nombres de los archivos o directorios en la terminal? Se hace con el carácter barra invertida + espacio: “\ ”, por ejemplo, queremos entrar a un directorio llamado “fotos vacaciones” con el comando cd:
$ cd fotos\ vacaciones/
También pueden auto-completar presionando la tecla Tab.
Si quieres usar chmod en todos los elementos dentro de una carpeta, puedes usar -R para aplicar los permisos de forma recursiva tal y como lo harías con chown y chgrp.
Por ejemplo:
$ chmod 777 -R fotos\ vacaciones/
Si lo deseas, puedes consultar documentación extra a la que te estoy proporcionando con el comando man prueba a escribir alguno de estos:
$ man chown
$ man chmod
$ man chgrp
Y eso es todo por ahora, recordaré lo mismo de la entrada anterior: Si quieren más información de estos comandos, busquen en Google, ejecuten el comando "man" o consulten en alguna wiki, lo que presento aquí es lo más básico y fundamental y lo que uso la mayoría de las veces, es decir, esto es solamente el primer empujón para que puedas valerte por ti mismo en la terminal 😉 Por cierto, espera la siguiente parte. Saludos.