CHMOD
From Movaxes
Contents |
Comando CHMOD
chmod significa CHange access MODe, es un comando que le indica al sistema los permisos que debe dar o negar a un archivo.
Introducción
Si escribes en un terminal:
$ls -l
te aparecen al lado de los archivos o directorios los permisos que tiene cada uno, por ejemplo:
-rw-r--r-- 1 movaxes movaxes 3125 2007-01-18 10:48 comentarios.c
El primer carácter indica si es un archivo o directorio, en este caso '-' significa que es un archivo común, si hubiera una 'd' significa que es un directorio, los demás caracteres, en este caso 'rw-r--r--' muestran los permisos del archivo o directorio.
El numero 1 que aparece en la segunda columna muestra los enlaces que hay al archivo.
La tercera y cuarta columna, en este caso 'movaxes movaxes' muestra el usuario dueño y el grupo, 3125 es el tamaño en bytes, '2007-01-18 10:48' es la fecha de creación y al final está el nombre del archivo.
En rw-r--r-- las primeras 3 letras muestran el permiso de el dueño del archivo, en este caso 'rw-' significa que puedo leer (r = read) escribir (w = write) pero no ejecutar (x = execute) el archivo.
Si un directorio tiene la 'x' significa que se puede buscar en el directorio.
Las siguientes tres letras 'r--' muestran que los demás en el grupo movaxes (en este caso) solo pueden leer (r=read) el archivo pero no editarlo ni ejecutarlo (o buscar en el si es directorio),
Las ultimas tres 'r--' muestra lo que el grupo others (todos los demás) pueden hacer con el archivo o directorio.
Uso de chmod
Una de las formas de usar es este comando es:
$chmod u=rw archivo.txt
En ese ejemplo 'u' es el dueño, 'rw' significa que puede leer y escribir, y al final está el nombre del archivo.
Puede usarse también 'g' (que es el grupo), 'o' (todos los demás) o 'a' que son todos los anteriores (es una abreviatura de 'ugo').
Exactamente después del usuario al que se refiere se pone el signo '=' y los permisos que se dan (sin dejar espacios), este es otro ejemplo:
$chmod ugo=rwx text.txt
Puedess ver si funcionó escribiendo en el terminal: $ls -l y revisar que los cambios estén hechos, te debería de salir algo como:
rwxrwxrwx
También se puede restar o sumar literalmente permisos, por ejemplo si tenemos un archivo con permiso de escritura 'w' para el grupo 'o' y 'g' y no queremos ese permiso (supongamos que tenemos: '-rw-rw-rw--') en lugar de poner:
$chmod go=r text.txt
podemos restarle el permiso de escritura a los grupos así:
$chmod go-w text.txt
tambien podemos usar el signo '+' para agregar permisos a un archivo:
$chmod a+w texto.txt
eso le suma permiso de escritura a todos.
En resumen entonces '=' asigna permisos, '-' los resta y '+' los suma, pero también puede usarse el signo igual '=' para copiar permisos de un grupo a otro, por ejemplo:
$chmod g=o texto.txt
este comando copia los permisos del grupo 'o' al del grupo 'g'.
Tambien se pueden sumar o restar los permisos de los otros grupos:
$chmod g-u texto.txt
eso le resta los permisos del usuario dueño 'u' al 'g'rupo
No se pueden mezclar permisos 'rwx' con usuarios 'ugo' asi:
$chmod u=rwo texto.txt
eso daría un error
Set User ID (SUID)
Ahora he aquí un problema :), supongamos que tenemos un programa que se llama reader y un archivo que se llama dato.d que es usado por nuestro programa reader, pero no queremos que nadie tenga acceso al archivo dato.d a menos que use el programa, no podemos darle a dato.d el permiso '-rw------' porque entonces el programa no podría abrir el archivo sin que el dueño ejecute el programa.
Cómo hacemos para que otros puedan ejecutar el programa y leer el archivo?
Si al archivo dato.d le ponemos este permiso 'rw------' y al programa reader con 'rwxr-xr-x' y usamos este comando:
$chmod u+s reader
eso nos deja con 'rwsr-xr-x' como vemos ahora en lugar de 'x' para el usuario dueño tenemos 's' (set user id) que indica al sistema que cuando alguien use el programa reader tiene los mismos permisos que el dueño, ahora cualquiera que tenga permiso para usar el reader puede leer tambien el archivo dato.d como si fuera el dueño, pero si intenta abrirlo con otro programa o de alguna otra forma no tendrá el acceso. Mágicamente se convierte en el dueño al usar el programa.
Tambien podríamos usar:
$chmod g+s reader
sucede lo mismo que expliqué pero ahora le damos todos los permisos que tiene el grupo pero no los del dueño.
Usando Números con CHMOD
También podemos usar el modo binario con chmod que es así:
-rwxrw-r-- (suponiendo que estos son los permisos que queremos) 111110100 (ponemos 1 a los permitidos)
como vemos arriba, ponemos un 1 en el lugar en donde queremos permiso y separamos los tres:
rwx rw- r-- 111 110 100
ahora convertimos a decimales para obtener tres numeros:
111 = 7 110 = 6 100 = 4
Ahora en lugar de escribir:
$chmod u=rwx reader $chmod g=rw reader $chmod o=r reader
o en lugar de esto otro:
$chmod a=r reader $chmod ug=w reader
usamos los decimales que obtuvimos antes así:
$chmod 764 reader
Esto nos facilita poner los permisos de los tres de una sola vez, en donde 7 es el del dueño, 6 el del grupo y 4 el de los demás.