Este es uno de los capítulos del tutorial El terminal. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.
En el capítulo anterior de este tutorial, viste como gestionar archivos desde la línea de comandos. En ese mismo capítulo, pudiste observar que los archivos y directorios tienen una serie de propietarios y permisos. Es decir, para cada uno se especifica, muy claramente, quien es el propietario del archivo, así como el grupo propietario. Pero además también se indica quien puede hacer que con cada archivo, o lo que es lo mismo, que permisos tiene.
En este nuevo capítulo del tutorial te adentrarás precisamente, en gestionar propietarios y permisos, tanto de archivos como de directorios.
Probablemente, esto de los propietarios y permisos, sea una de las características que siempre mas me ha llamado la atención en Linux. Pero además, creo que es algo que le debes prestar mucha atención, para evitarte ofuscamientos posteriores. Por que en ocasiones, sucede que no consigues que algo se comporte como esperas en Linux, y es porque no tiene los propietarios y permisos adecuados.
Propietarios y permisos
¿Que es eso de propietarios y permisos? Sencillo, en Linux, se establece para cada archivo y directorio (recuerda que un directorio no es mas que un archivo),
- el propietario del archivo
- quien es el grupo propietario del archivos
- que permisos tiene el propietario del archivo
- los permisos que tiene el grupo propietario del archivo
- los permisos del resto de usuarios que no entran en los puntos anteriores.
Y ¿a que se refiere con eso de los permisos? Los permisos es lo que se puede hacer un usuario con el archivo en cuestión. Así puedes establecer, que no se pueda hacer nada, hasta que se pueda tener un control absoluto. ¿Y como se establece? En función de que sea el propietario del archivo, o pertenezca al grupo propietario del archivo o que no no sea ninguno de los anteriores.
Como ver permisos y propietarios
En el capítulo anterior del tutorial sobre gestionar archivos en Linux, ya te adelanté como podías ver permisos y propietarios. Básicamente se trata de utilizar el comando ls -l
. En realidad, te recomiendo que utilices ls -lah
, porque te muestra además los archivos ocultos, y los tamaños te los ofrece en unidades comprensibles a simple vista. Así por ejemplo, utilizando el mismo ejemplo, del capítulo anterior,
drwxrwxr-x 2 lorenzo lorenzo 4,0K feb 11 08:33 documentos
-rwxrwxr-x 1 lorenzo lorenzo 432 dic 2 07:53 droidcamx.sh
-rw-rw-r-- 1 lorenzo lorenzo 11K dic 2 19:06 feed.log
Como ya sabes del capítulo anterior, la primera de las líneas se corresponde con un directorio, mientras que las dos siguientes se corresponde con archivos regulares.
A continuación tienes tres grupos de letras rwx
. En el mejor de los casos o ---
en el peor de los casos.
El primero de los grupos corresponde al propietario, el segundo corresponde al grupo propietario y el tercero corresponde a todos los demás usuarios que no son ni el propietario, ni pertenece al grupo propietario.
Así, para determinar los permisos de cada uno de ellos, tenemos que ver las letras correspondientes,
r
tiene permiso de lecturaw
para permiso de escriturax
permiso de ejecución
En el caso de que carezca de uno de ellos, se reemplazará por un guión. Así r--
significa que el propietario del archivo solo tiene permiso de lectura. De otra manera un archivo que sea --x
es que solo tiene permisos de ejecución, no se puede leer ni escribir en él.
chmod
chmod
es la herramienta que puedes utilizar para establecer o cambiar los permisos de un archivo o directorio. Esta herramienta tiene dos modos de uso, el numérico y el simbólico.
Además, chmod
permite una serie de opciones entre las que cabe destacar -R
. Esta opción, nos permite cambiar los permisos de forma remota, aunque esto debemos hacerlo con cuidado, como ya te puedes imaginar.
Modo numérico u octal
Nos permite mediante cuatro octales diferentes permisos. Si se omite uno de ellos se entiende que es cero. Es decir chmod 0004
es equivalente a chmod 4
. En general solo verás 3 dígitos, en raras ocasiones verás el primero, el cual, está destinado a misiones especiales.
Así, por regla general verás algo como chmod UGR
, donde U
es el valor para el propietario, G
para el grupo, y R
para el resto, donde cada uno de los valores son los siguientes,
0 = --- = sin acceso
1 = --x = ejecución
2 = -w- = escritura
3 = -wx = escritura y ejecución
4 = r-- = lectura
5 = r-x = lectura y ejecución
6 = rw- = lectura y escritura
7 = rwx = lectura, escritura y ejecución
Algunos ejemplos,
chmod 400
lectura solo por el propietariochmod 040
idem anterior pero para los pertenecientes al grupochmod 644
este es uno muy típico para achivos. Lectura y escritura por parte del propietario y lectura solo para el resto aunque pertenezcan al grupo.chmod 755
este por el contrario es muy típico para directorios, porque da todos los permisos al propietario, mientras que al resto solo les da permiso de acceso y lectura.
Efectivamente, como ya has deducido, en el caso de directorios la x
no representa ejecución, sino que se refiere a acceso al directorio en cuestión.
Modo simbólico
El modo simbólico es una combinación de letras y símbolos, que nos permitirán establecer los permisos para un archivo. Así,
u
es para el usuariog
para el grupoo
es para los que no pertenencen al grupoa
para todos
A continuación tenemos un operador
+
añade un permiso-
quita un permiso=
asigna un permiso
Por último los permisos,
r
lecturaw
escriturax
ejecución
Existen mas permisos, pero por ahora con estos tienes suficientes.
Además podemos establecer varios permisos separados por comas. Algunos ejemplos,
chmod u=r,g=,o=
lectura solo por el propietariochmod u=,g=r,o=
idem anterior pero para los pertenecientes al grupochmod u=rw,g=r,o=r
este es uno muy típico para achivos. Lectura y escritura por parte del propietario y lectura solo para el resto aunque pertenezcan al grupo.chmod u=rwx,g=rx,o=rx
este por el contrario es muy típico para directorios, porque da todos los permisos al propietario, mientras que al resto solo les da permiso de acceso y lectura.chmod u+x
añades el permiso de ejecución al propietario del archivo, dejando el resto de permisos como estuvieran.
Sobre el cambio recursivo de permisos
Como te he indicado anteriormente, es posible cambiar permisos de forma recursiva. Sin embargo, esto se tiene que hacer con extremo cuidado, puesto que normalmente, archivos y directorios tienen permisos diferentes. Para este tipo de operaciones, es mejor hacer uso de una herramienta como es find
, que trataré en detalle en un capítulo posterior. Sin embargo te indico un par de comandos que te será de gran utilidad,
find directorio -type d -exec chmod 755 {} +
, de esta forma ejecutarás un cambio de permisos al directoriodirectorio
y a todos sus subdirectorios, a755
.find directorio -type d -exec chmod 644 {} +
, de esta forma ejecutarás un cambio de permisos a todos los archivos del directoriodirectorio
y de sus subdirectorios, a644
.
chown
Como complementario a chmod
a la hora de establecer permisos y propietarios, tenemos chown
. Esta es la herramienta que dispones para gestionar, precisamente, a los propietarios de un archivo o directorio.Nos permite establecer tanto el usuario como el grupo propietario. Además, podremos hacerlo tanto por el nombre del usuario, como por el identificador del usuario.
Si solo se proporciona el propietario, ya sea su nombre o su identidad numérica, este usuario, se convierte en el propietario, de cada uno de los archivos indicados.
Por otro lado, si se indica el nombre de usuario, seguido por dos puntos, y el nombre de grupo, se cambiará, tanto el usuario, como el grupo.
También se puede cambiar solo el grupo propietario. Para eso, debes poner dos puntos seguido por el nombre del grupo.
También es posible utilizar un punto en lugar de dos puntos.
Mira los siguientes ejemplos que seguro que serán mas clarificadores que las explicaciones que te estoy dando.
Para cambiar el usuario,
chmod usuario archivo1, archivo2
chmod usuario. archivo1, archivo2
chmod usuario: archivo1, archivo2
para cambiar el grupo,
chmod .grupo archivo1, archivo2
chmod :grupo archivo1, archivo2
mientras que para cambiar usuario y grupo,
chmod usuario.grupo archivo1, archivo2
chmod usuario:grupo archivo1, archivo2
Existen diferentes opciones a utilizar con chmod
, como por ejemplo,
chmod -R
el cambio de usuario y/o propietario, lo hace de modo recursivo. Es decir, lo aplica tanto a directorio como a sus subdirectorios.
Las otras opciones de chmod
, te permiten tratar de diferente forma los enlaces simbólicos, y algunos casos mas singulares. Sin embargo, precisamente por su singularidad, prefiero no tratarlo en este capítulo del tutorial.
umask
umask
es una herramienta con la que podrás establecer los permisos con los que se crearán ficheros y directorios por defecto.
Para definir estos permisos se utilizan valores octales, tal y como puedes ver en la siguiente table de permisos,
valor octal | lectura | escritura | ejecución |
---|---|---|---|
0 | X | X | X |
1 | X | X | – |
2 | X | – | X |
3 | X | – | – |
4 | – | X | X |
5 | – | X | – |
6 | – | – | X |
7 | – | – | – |
Ten en cuenta que por defecto en el caso de archivos no se asigna nunca el permiso de ejecución.
Si ejecutas umask
sin ningún valor te devolverá el valor por defecto establecido. Así en mi caso me devuelve 002
. Esto quiere decir que para el caso de archivos, estos se crearan con permiso de lectura y escritura tanto para el usuario como para el grupo propietarios, mientras que solo tendrán permiso de lectura otros. Mientras que para el caso de directorios además tendrán permiso de acceso. Es decir, que en el caso de archivos el 2
sería equivalente al 3
.
Si establecemos umask 003
los directorios que se creen no tendrán permiso de acceso para otros usuarios (ni el usuario ni el grupo propietario).
Por ejemplo,
umask 027
establece que los archivos tendrán por defecto permiso de lectura y escritura para el propietario, lectura para el grupo propietario y ningún permiso para el resto. Mientras que en el caso de directorios, tendrá permiso de lectura, escritura y acceso para el propietario, lectura y acceso para el grupo propietario y ninguno para el resto.umask 002
establece que los archivos tendrán por defecto permiso de lectura y escritura para el propietario y para el grupo propietario y lectura para el resto. Mientras que en el caso de directorios, tendrá permiso de lectura, escritura y acceso para el propietario y el grupo propietario y lectura y acceso para el resto.
El problema con el que te puedes encontrar, es que no es posible definir diferentes máscaras para archivos y directorios. La misma máscara se aplicará tanto a directorios como archivos. Aunque evidentemente, siempre te puedes crear un script que establezca una máscara para crear el directorio, cree el directorio, y vuelva a dejar la máscara como anteriormente. Sin embargo, esto es lo mismo que modificar los permisos a posteriori.
Más información,
Saludos Lorenzo, me surgió una inquietud cuando explicás el comando shown, ¿los ejemplos se corresponden a chmod?.
Gracias por tus aportes.
Saludos desde Venezuela, siempre sigo tu publicaciones.
Lorenzo quiero dejarte un mensaje de agradecimiento, estoy aprendiendo terminal y bash de una manera increible.
La grandeza de internet se construye con gente como tú, un saludo muy grande desde Uruguay.