Controle quién puede entrar a los archivos, buscar directorios y ejecutar scripts usando Linux chmod
mando. Este comando modifica los permisos de archivos de Linux, que parecen complicados a primera vista, pero en realidad son bastante simples una vez que sabes cómo funcionan.
chmod modifica los permisos del archivo
En Linux, quién puede hacer qué con un archivo o directorio se controla a través de conjuntos de permisos. Hay tres conjuntos de permisos. Un conjunto para el propietario del archivo, otro conjunto para los miembros del grupo del archivo y un conjunto final para todos los demás.
Los permisos controlan las acciones que se pueden realizar en el archivo o directorio. Posibilitan o impiden que un archivo sea leído, modificado o, si es un script o programa, ejecutado. Para un directorio, los permisos gobiernan quién puede cd
en el directorio y quién puede crear o modificar archivos dentro del directorio.
Usas el chmod
comando para establecer cada uno de estos permisos. Para ver qué permisos se han establecido en un archivo o directorio, podemos utilizar ls
.
Ver y comprender los permisos de archivos
Podemos utilizar el -l
(formato largo) opción para tener ls
enumere los permisos de archivo para archivos y directorios.
ls -l
En cada línea, el primer carácter identifica el tipo de entrada que se enumera. Si es un guión (-
) es un archivo. Si es la letra d
es un directorio.
Los siguientes nueve caracteres representan la configuración de los tres conjuntos de permisos.
- Los primeros tres caracteres muestran los permisos del usuario propietario del archivo (Permisos de usuario).
- Los tres caracteres del medio muestran los permisos para los miembros del grupo del archivo (permisos de grupo).
- Los últimos tres caracteres muestran los permisos para cualquier persona que no esté en las dos primeras categorías (otros permisos).
Hay tres caracteres en cada conjunto de permisos. Los personajes son indicadores de la presencia o ausencia de uno de los permisos. Son un guión (-
) o una carta. Si el personaje es un guión, significa que no se otorga el permiso. Si el personaje es un r
, w
, o un x
, ese permiso ha sido concedido.
Las letras representan:
- r: Leer permisos. El archivo se puede abrir y su contenido se puede ver.
- w: Permisos de escritura. El archivo se puede editar, modificar y borrar.
- X: Ejecutar permisos. Si el archivo es un script o un programa, se puede ejecutar (ejecutar).
A modo de ejemplo:
-
---
significa que no se ha concedido ningún permiso. -
rwx
significa que se han concedido permisos completos. Los indicadores de lectura, escritura y ejecución están todos presentes.
En nuestra captura de pantalla, la primera línea comienza con un d
. Esta línea se refiere a un directorio llamado «archivo». El propietario del directorio es «dave» y el nombre del grupo al que pertenece el directorio además se llama «dave».
Los siguientes tres caracteres son los permisos de usuario para este directorio. Estos muestran que el propietario tiene todos los permisos. los r
, w
, y x
todos los personajes están presentes. Esto significa que el usuario dave tiene permisos de lectura, escritura y ejecución para ese directorio.
El segundo conjunto de tres caracteres son los permisos de grupo, estos son r-x
. Estos muestran que los miembros del grupo dave han leído y ejecutado permisos para este directorio. Eso significa que pueden enumerar los archivos y su contenido en el directorio, y pueden cd
(ejecutar) en ese directorio. No disponen permisos de escritura, por lo que no pueden crear, editar ni borrar archivos.
El conjunto final de tres personajes además r-x
. Estos permisos se aplican a personas que no se rigen por los dos primeros conjuntos de permisos. Estas personas (llamadas «otras») disponen permisos de lectura y ejecución en este directorio.
Entonces, para resumir, los miembros del grupo y otros han leído y ejecutado permisos. El propietario, un usuario llamado Dave, además tiene permisos de escritura.
Para todos los demás archivos (aparte del archivo de secuencia de comandos mh.sh), Dave y los miembros del grupo de Dave disponen propiedades de lectura y escritura en los archivos, y los demás solo disponen permisos de lectura.
Para el caso especial del archivo de script mh.sh, el propietario dave y los miembros del grupo disponen permisos de lectura, escritura y ejecución, y los demás solo disponen permisos de lectura y ejecución.
Comprensión de la sintaxis de permisos
Utilizar chmod
para determinar permisos, necesitamos decirle:
- OMS: Para quién estamos configurando permisos.
- Qué: ¿Qué cambio estamos haciendo? ¿Estamos agregando o quitando el permiso?
- Cuales: ¿Cuál de los permisos estamos configurando?
Usamos indicadores para representar estos valores y formamos breves «declaraciones de permisos» como u+x
, donde «u» significa «usuario» (quién), «+» significa agregar (qué) y «x» significa el permiso de ejecución (cuál).
Los valores de «quién» que podemos usar son:
- tu: Usuario, dicho de otra forma, el propietario del archivo.
- gramo: Grupo, dicho de otra forma, miembros del grupo al que pertenece el archivo.
- o: Otros, dicho de otra forma, personas que no se rigen por el
u
yg
permisos. - a: Todo, dicho de otra forma, todo lo anterior.
Si no se utiliza ninguno de estos, chmod
se comporta como si «a
» ha sido usado.
Los valores de «qué» podemos utilizar son:
- –: Signo menos. Elimina el permiso.
- +: Signo de más. Otorga el permiso. El permiso se agrega a los permisos existentes. Si desea tener este permiso y solo este conjunto de permisos, utilice el
=
opción, que se describe a continuación. - =: Signo de igual. Establezca un permiso y elimine otros.
Los «qué» valores que podemos usar son:
- r: El permiso de lectura.
- w: El permiso de escritura.
- X: El permiso de ejecución.
Determinar y modificar permisos
Digamos que tenemos un archivo en el que todos disponen permisos completos.
ls -l new_ file.txt
Queremos que el usuario dave tenga permisos de lectura y escritura y que el grupo y otros usuarios solo tengan permisos de lectura. Podemos hacerlo usando el siguiente comando:
chmod u=rw,og=r new_file.txt
El uso del operador «=» significa que eliminamos los permisos existentes y después establecemos los especificados.
revisemos el nuevo permiso en este archivo:
ls -l new_file.txt
Se han eliminado los permisos existentes y se han establecido los nuevos permisos, como esperábamos.
¿Qué tal agregar un permiso? sin ¿borrar la configuración de permisos existente? Además podemos hacerlo fácilmente.
Digamos que tenemos un archivo de script que hemos terminado de editar. Necesitamos hacerlo ejecutable para todos los usuarios. Sus permisos actuales se ven así:
ls -l new_script.sh
Podemos agregar el permiso de ejecución para todos con el siguiente comando:
chmod a+x new_script.sh
Si echamos un vistazo a los permisos, veremos que el permiso de ejecución ahora se otorga a todos, y los permisos existentes aún están vigentes.
ls -l new_script.sh
Podríamos haber logrado lo mismo sin la «a» en la declaración «a + x». El siguiente comando habría funcionado igual de bien.
chmod +x new_script.sh
Determinar permisos para varios archivos
Podemos aplicar permisos a varios archivos al mismo tiempo.
Estos son los archivos del directorio actual:
ls -l
Digamos que queremos borrar los permisos de lectura para los «otros» usuarios de los archivos que disponen una extensión «.page». Podemos hacer esto con el siguiente comando:
chmod o-r *.page
Veamos qué efecto tuvo eso:
ls -l
Como podemos ver, el permiso de lectura se ha eliminado de los archivos «.page» para la categoría «otros» de usuarios. Ningún otro archivo se ha visto afectado.
Si hubiéramos querido incluir archivos en subdirectorios, podríamos haber usado la -R
opción (recursiva).
chmod -R o-r *.page
Taquigrafía numérica
Otra manera de utilizar chmod
es proporcionar los permisos que desea otorgar al propietario, grupo y otras personas como un número de tres dígitos. El dígito más a la izquierda representa los permisos del propietario. El dígito del medio representa los permisos para los miembros del grupo. El dígito más a la derecha representa los permisos para los demás.
Los dígitos que puede utilizar y lo que representan se enumeran aquí:
- 0: (000) Sin permiso.
- 1: (001) Permiso de ejecución.
- 2: (010) permiso de escritura.
- 3: (011) Escribir y ejecutar permisos.
- 4: (100) Permiso de lectura.
- 5: (101) Leer y ejecutar permisos.
- 6: (110) Permisos de lectura y escritura.
- 7: (111) Leer, escribir y ejecutar permisos.
Cada uno de los tres permisos está representado por uno de los bits en el semejante binario del número decimal. Entonces, 5, que es 101 en binario, significa leer y ejecutar. 2, que es 010 en binario, significaría el permiso de escritura.
Con este método, establece los permisos que desea tener; no agrega estos permisos a los permisos existentes. Entonces, si los permisos de lectura y escritura ya estuvieran en su lugar, tendría que utilizar 7 (111) para agregar permisos de ejecución. El uso de 1 (001) eliminaría los permisos de lectura y escritura y agregaría el permiso de ejecución.
Agreguemos el permiso de lectura nuevamente en los archivos «.page» para la categoría de otros usuarios. Además debemos configurar los permisos de usuario y grupo, por lo que debemos configurarlos en lo que ya son. Estos usuarios ya disponen permisos de lectura y escritura, que son 6 (110). Queremos que los «otros» tengan permisos de lectura y, por eso, deben establecerse en 4 (100).
El siguiente comando logrará esto:
chmod 664 *.page
Esto establece los permisos que requerimos para el usuario, los miembros del grupo y otros en los que requerimos. Se restablecen los permisos de los usuarios y miembros del grupo a lo que ya eran, y se restablece el permiso de lectura de los demás.
ls -l
Opciones avanzadas
Si tu leer la página del manual por chmod
verá que hay algunas opciones avanzadas asociadas con los bits SETUID y SETGID, y con el borrado restringido o bit «pegajoso».
Para el 99% de los casos, necesitará chmod
para, las alternativas descritas aquí lo tendrán cubierto.
setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);