¿Qué es el comando chown en Linux y cómo funciona?
El comando chown es uno de los más importantes a la hora de administrar sistemas o incluso desarrollar aplicaciones y webs que van a funcionar en Linux. Si te dedicas profesionalmente al mundo del desarrollo o la administración lo debes de conocer.
- ¿Qué es el comando chown en Linux?
- Sintaxis básica del comando chown en Linux
- Cómo cambiar propietario y grupo con chown en Linux
- Opciones avanzadas de chown en Linux
- Casos comunes de uso del comando chown en Linux
- Buenas prácticas y precauciones al usar chown en Linux
- Errores frecuentes al usar chown en Linux y cómo evitarlos
- Alternativas y comandos relacionados con chown en Linux
¿Qué es el comando chown en Linux?
El comando chown es una utilidad existente en todos los sistemas Linux y unix like, como MacOS, que sirve para gestionar la propiedad de archivos y directorios, tanto para usuarios propietarios como grupos.
En Linux, cada archivo y/o directorio tiene un propietario, que es un usuario del sistema, y un grupo, que define el conjunto de usuarios con permisos compartidos sobre los mismos recursos. Estas configuraciones son muy importantes porque los permisos de los archivos se definen tanto para usuarios como grupos.
De todos modos, para aclarar posibles dudas, chown no cambia los permisos en sí, para eso se usa el comando chmod. Pero afecta indirectamente a los permisos, ya que chown lo usamos para modificar la propiedad de los archivos o directorios, de modo que entonces se aplicarán los permisos de una manera diferente.
Sintaxis básica del comando chown en Linux
Vamos a ver los usos básicos de este comando, para que puedas entender las características más importantes y necesarias para trabajar en la asignación de propietarios y grupos.
Formato general del comando
El formato general del comando chown es el siguiente:
chown [opciones] nuevo_propietario[:nuevo_grupo] archivo
En el anterior esquema, nuevo_grupo es opcional y la verdad es que no se usa tanto como el cambio de propietario, aunque también es muy útil en situaciones diversas que vamos a revisar más adelante en los casos prácticos.
Parámetros principales y su significado
En el anterior esquema del comando habrás podido apreciar que se pueden aplicar parámetros, que sirven para configurar el uso del comando.
Los parámetros más importantes de chown son los siguientes:
- nuevo_propietario: Es el usuario que quedará configurado como dueño del archivo o directorio.
- nuevo_grupo: es el grupo que queremos asignar al recurso.
- archivo: que es el archivo o directorio en cuestión que quieres configurar.
Adicionalmente, tienes algunas configuraciones extra que puedes asignar vía opciones del comando. Un poco más adelante en este post los vamos a repasar.
Uso con rutas relativas y absolutas
Con chown podemos trabajar con rutas absolutas o relativas. Cualquiera de ellas son válidas y nos pueden servir. Por si acaso no entiendes qué diferencia hay entre entre ellas:
- Rutas relativas se construyen a partir de la carpeta donde lanzamos el comando chown.
- Rutas absolutas se construyen desde la raíz del disco y comienzan por una barra, como por ejemplo /home/manuel/archivo.txt.
Cómo cambiar propietario y grupo con chown en Linux
Vamos a ver algunos ejemplos de cambios de propietarios y grupos con chown.
Cambiar solo el propietario
En este ejemplo veremos cómo cambiar únicamente el propietario del archivo.txt.
chown usuario archivo.txt
Esto asigna el archivo.txt un nuevo usuario. El grupo no se tocará y permanecerá el mismo que había previamente.
Cambiar solo el grupo
Ahora bien, si queremos cambiar solo el grupo, tenemos que agregar dos puntos «:» antes del nombre del grupo, de esta manera:
chown :grupo archivo.txt
Con el comando anterior no se modificará el propietario.
Cambiar propietario y grupo simultáneamente
Por último vamos a ver un ejemplo en el que vamos a modificar ambos elementos, tanto el usuario como el grupo del archivo.
chown usuario:grupo archivo.txt
Opciones avanzadas de chown en Linux
El comando permite una gran cantidad de configuraciones. Vamos a ver las que se usan de manera más frecuente.
Recursividad con -R
La opción -R nos sirve para aplicar de una vez el cambio en un directorio y todos sus subdirectorios y archivos:
chown -R usuario:grupo carpeta/
Hay que tener cuidado con esa configuración, porque puede que cambiemos cosas de manera masiva que puedan causar problemas, como explicaremos más adelante en este post.
Opción –reference para copiar permisos
Esta configuración permite asignar a un archivo el mismo propietario y grupo que otro archivo que se toma como referencia. Es muy útil cuando se necesita hacer un script donde no se puede especificar los usuarios o grupos finales, siendo portable a otros sistemas.
chown --reference=archivo_referencia.txt nuevo.txt
Así estaríamos aplicando el usuario y grupo de archivo_referencia.txt a nuevo.txt.
Combinación con find para aplicar cambios por tipo o nombre
En Linux es habitual combinar comandos y en el caso de find se puede usar con -exec, de modo que la salida del find se usa para la entrada de otros comandos. De este modo es posible aplicar a los archivos encontrados por find un cambio de propietario o grupo con chown.
Por ejemplo, podríamos cambiar todos los .log de una carpeta con un comando como este:
find /var/log -name '*.log' -exec chown usuario:grupo {} \;
Aplicación con sudo y permisos necesarios
No siempre es necesario, pero dado que cambiar propietarios puede afectar la seguridad del sistema, a veces se necesita ejecutar usando privilegios administrativos con «sudo»:
sudo chown usuario archivo.txt
Casos comunes de uso del comando chown en Linux
Ahora que ya conoces la sintaxis básica y las opciones más recurrentes, vamos a ver algunas situaciones habituales en el día a día donde este comando sirve de ayuda.
Cambiar el propietario de un archivo después de copiarlo desde otro usuario
Cuando un archivo se copia desde otras cuentas se conservará un propietario o grupo, lo que no siempre es deseable. Es por ello que a veces es necesario asignarlo al usuario correcto con chown.
Asignar la propiedad de archivos al crear nuevos usuarios
Cuando creamos nuevos usuarios a veces necesitamos mover archivos a su carpeta personal, en cuyo caso es muy importante cambiarles la propiedad para que puedan luego trabajar con ellos.
Modificar el grupo de trabajo de un archivo compartido
Si estamos trabajando con archivos que deban estar disponibles para varias personas, por ejemplo para que varios usuarios puedan leerlos o actualizarlos, es habitual meterlos dentro de un mismo grupo y luego cambiar los archivos para que sean propiedad de ese grupo.
Transferir la propiedad de un directorio completo con -R (recursivo)
A veces necesitamos otorgar a un usuario el control total de un directorio y todo su contenido. Esto se puede dar por ejemplo cuando copiamos toda una carpeta de un sitio web y necesita ser accedida por el usuario de Apache.
sudo chown -R usuario:grupo /var/www/proyecto/
Establecer permisos correctos en archivos de configuración de servidores
En el mismo contexto de administración de servidores, algunos servicios como Apache, Nginx o MySQL tienen archivos de configuración, los cuales necesitan estar asignados a un usuario o grupo específico para poder leerse.
sudo chown www-data:www-data /etc/apache2/sites-available/000-default.conf
Buenas prácticas y precauciones al usar chown en Linux
El comando chown es muy sencillo de usar pero si no tenemos cuidado podríamos afectar gravemente a la seguridad del sistema. Estas son algunas recomendaciones esenciales que deberías tener en cuenta:
Verificar los permisos antes de cambiar la propiedad de archivos críticos
Antes de cambiar la propiedad de los archivos críticos te recomendamos echar un vistazo a los permisos que tienen, de modo que podamos verificar que son los adecuados.
Esto lo consigues con un simple listado de carpeta o directorio con la opción «-l».
ls -l archivo.conf
Usar sudo solo cuando sea necesario y con cuidado
Te recomendamos usar solamente sudo cuando el cambio sea realmente necesario. De hecho sudo permite hacer todo tipo de cosas en el sistema y debemos siempre ejecutarlo cuando sepamos bien lo que hacemos, incluido por supuesto el comando chown.
Evitar el uso de chown -R en directorios sensibles sin revisar
Si necesitas usar -R para hacer cambios en directorios, revisa siempre dónde los vas a realizar y qué posibles consideraciones puedan surgir al ejecutar un chown.
Por ejemplo, algunos directorios como /etc, /bin o /usr pueden dañar el sistema si cambiamos los propietarios de manera recursiva.
Comprobar los cambios con ls -l después de ejecutar chown
Una vez que has aplicado el comando chown siempre es interesante que verifiques como ha quedado la asignación de propietarios y grupos.
Como hemos visto antes, simplemente lo puedes verificar con un comando ls -l.
Documentar o registrar los cambios de propiedad en entornos de producción
En entornos de producción es importante mantener un registro de los cambios realizados sobre los archivos o carpetas. De este modo podemos aplicar esas configuraciones más adelante en otro despliegue, o revertir las configuraciones si no eran necesarias.
Errores frecuentes al usar chown en Linux y cómo evitarlos
También es posible cometer errores a la hora de trabajar con chown. Hay que tener especial cuidado, ya que su uso incorrecto puede provocar problemas serios. Te presentamos algunos errores comunes.
Usar un usuario o grupo inexistente en el comando
Un fallo que puede ocurrir fácilmente es indicar un usuario o grupo que no exista en el sistema. No es un problema muy crítico porque simplemente el comando fallará.
chown usuario_inexistente index.html
La salida del comando sería la siguiente: «chown: usuario_inexistente: illegal user name»
Aplicar chown recursivamente en directorios del sistema por error
Un chown -R sobre directorios como /, /etc o /usr puede dejar al sistema inutilizable, por lo que debemos prestar especial atención a lo que estamos haciendo.
Aquí la única protección que podemos tener es hacer un doble chequeo de la ruta o la carpeta en la que estamos, antes de lanzar el comando.
No verificar el efecto de los cambios antes de automatizarlos con scripts
A veces usas chown en scripts, donde cualquier pequeño despiste puede tener desastrosas consecuencias. Es importante probar los comandos de los scripts previamente para asegurarse que no puedan darse situaciones indeseables. Puedes probar primero con un conjunto reducido de archivos y usar el comando chown con la opción -v para ver qué cambios se realizan.
Alternativas y comandos relacionados con chown en Linux
Ahora vamos a ver otros comandos y mecanismos relacionados con la gestión de permisos en los sistemas Linux.
Diferencia entre chown y chmod
Estos comandos son totalmente distintos pero muy relacionados entre sí.
Como hemos visto, chown: cambia el propietario y/o el grupo de un archivo, pero chmod se usa para modificar los permisos de esos archivos o carpetas.
Los permisos, ya sea lectura, escritura o ejecución, se aplican de manera separada a usuarios, grupos y otros, por lo que es importante saber qué combinaciones son las adecuadas para cada caso.
Uso de chgrp para modificar solo el grupo
Existe un comando en Linux que hace de atajo para cambiar únicamente el grupo de un archivo, sin afectar al propietario.
Se trata de chgrp y un ejemplo podría ser así:
sudo chgrp desarrolladores archivo.txt
Eso sería equivalente a lanzar este otro comando chown:
sudo chown :desarrolladores archivo.txt
Cuándo usar ACL en lugar de chown
Las ACL (Access Control Lists) permiten definir permisos más granulares en archivos o directorios. Pueden ser útiles si con chown no consigues la configuración deseada.