Comunidad de diseño web y desarrollo en internet

Permisos en *NIX: los comandos chown y chmod

Los sistemas operativos UNIX-like o también llamados *NIX como: Linux, FreeBSD, Unix, Mac OS X (que está basado en FreeBSD), utilizan sistemas de ficheros muy robustos con una seguridad increíble, basada en permisos de usuarios y por grupos de usuarios, y para lograr este cometido se puede utilizar tanto una interfaz gráfica como consola. Si estás comenzando a utilizar SO *NIX te recomiendo utilizar herramientas gráficas, que pueden ser los mismos gestores de archivos en el caso de Gnome (Nautilus), KDE (Dolphin), Cinnamon (Nemo), Mac OS X (Finder) entre otros.

En el caso de consola, solo con los comandos sencillos de recorrido de archivos usando los comandos cd y ls pueden explorar los archivos de todo su árbol de directorios, pero si desean una recomendación pueden utilizar Midnight Commander.

Este post desea demostrar las definiciones básicas de chown y chmod.



Permisos en *NIX


Antes de adentrarnos a la asignación de permisos de archivos y directorio, definamos algunos puntos para tenerlos un poco mas claro.

En primer lugar, en sistemas *NIX no existen directorios como tal. Un directorio es un archivo más que se le ha asignado una estructura de "directorio", pero no deja de ser archivo. Es más, se puede abrir con vi y vemos que es un archivo con un contenido como el siguiente:

Código :

" ============================================================================                                                        
" Netrw Directory Listing                                        (netrw v149)
"   /home/xxxx/xxxx/xxxx/zoort
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec
" ============================================================================
../
./
.git/
build/
dist/
etc/
zoort.egg-info/
setup.py*
.gitignore
LICENSE
MANIFEST.in
README.rst
zoort.py


En el archivo podemos ver que contiene la ruta y cómo es el ordenamiento que realiza para mostrar los archivos que "contiene".

Otra cosa importante a la hora de asignar permisos es que uno debe decir quién puede tener acceso al archivo, bien sea a través de un usuario en concreto o un grupo de usuario, esto quiere decir que el dueño de un archivo puede cambiar a lo largo del tiempo, o más personas pueden tener acceso a un determinado archivo siempre y cuando se configuren los permisos como deben ser.

Y por último mucha de la seguridad en un sistema se basa en los permisos que le den a los archivos y directorios. En muchos de los ataques hacia sitios web lo que hacen es conseguir vulnerabilidades de permisos y modifican información que puede o no ser sensible.

El comando chown


Como ya se mencionó, los archivos pueden pertenecer a un usuario y a un grupo de usuarios, por defecto todos los archivos que un usuario crea, tienen como dueño el nombre del usuario y como grupo, el grupo del usuario. Y cuál es la importancia de esto? que ningún otro usuario del sistema a excepción de root, no pueden ver mis archivos y directorios.

Pero siempre surge la necesidad de compartir ciertos archivos con otros usuarios del sistema, y eso lo pueden lograr a través del comando chown. Con este comando se puede cambiar tanto el usuario del sistema, o el grupo de usuarios de una manera sencilla.

El uso de chown es el siguiente:

Código :

chown [OPCION]... [DUEÑO][:[GRUPO]] ARCHIVO ...


Cambiar un archivo de un usuario a otro:

Código :

# chown yograterol cristalab.html


En este ejemplo cambia el dueño del usuario a yograterol. Es importante mencionar que si el usuario al cual se le asigna el permiso no existe, arroja un error "chown: invalid user: ‘cristalab’".

Ahora otro ejemplo, cambiar el usuario y el grupo:

Código :

# chown usuario:grupo cristalab.html


chown y los directorios

A pesar de que los directorios son ficheros, nunca se manejan de la misma manera, por eso existe una opción llamada "recursiva" y por lo general es "-r" o "-R", en el caso de chown es "-R".

Código :

# chown usuario:grupo directorio.cristalab/


El comando chmod


chmod por otra parte realiza la acción de otorgar los permisos necesarios de lectura, escritura y ejecución para los distintos archivos o directorios, basándose en el dueño y el grupo de usuarios.

Hay que tener en cuenta que los permisos se asignan de dos maneras distintas, la primera de modo OCTAL, y la segunda en modo simbólico. Este post abarca solo el modo OCTAL.

Las combinaciones posibles para permisos son los siguientes:

Código :

- - -    = 0    no se tiene ningún permiso
- - x    = 1    solo permiso de ejecución
- w -    = 2    solo permiso de escritura
- w x    = 3    permisos de escritura y ejecución
r - -    = 4    solo permiso de lectura
r - x    = 5    permisos de lectura y ejecución
r w -    = 6    permisos de lectura y escritura
r w x    = 7    todos los permisos establecidos, lectura, escritura y ejecución


Si deseo asignar el permiso a un archivo o directorio, debo asignar un número para Usuario, Grupo y Otros en ese mismo orden, por lo tanto, si deseo que el Usuario tenga todos los permisos, el Grupo tenga solo permiso de lectura y para Otros ningún permiso, debo asignarle el número 740.

Ejemplo:

Código :

# chmod 740 cristalab.html


Este post introduce un poco la seguridad a través de permisos en los archivos y directorios, existe otro comando llamado umask que también sirve para asignar permisos, es un poco más avanzado pero podrían investigar de ese comando para así saber un poco más.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate