Permisos en Linux: acceso administrativo, chmod y chown

Permisos en Linux: acceso administrativo, chmod y chown

Introducción

La gestión de permisos en Linux es uno de los pilares de la seguridad del sistema. Saber quién puede leer, escribir o ejecutar un archivo, y cómo elevar privilegios de forma controlada, es una competencia imprescindible para cualquier administrador de sistemas. En esta guía se cubren los comandos esenciales: su y sudo para el acceso administrativo, chmod para modificar permisos y chown para cambiar el propietario de un archivo.

Acceso administrativo en Linux

Muchos comandos de Linux trabajan con información confidencial —contraseñas, hardware del sistema— o realizan operaciones que solo deben estar disponibles para el administrador. Evitar que usuarios ordinarios ejecuten estos comandos ayuda a proteger el sistema. Iniciar sesión como usuario root proporciona acceso administrativo y permite la ejecución de comandos privilegiados.

Elevar privilegios con el comando su

su OPCIONES NOMBRE-DE-USUARIO

El comando su permite actuar temporalmente como un usuario diferente creando un nuevo shell. Si no se especifica ninguna cuenta de usuario, su abre un nuevo shell como usuario root, proporcionando privilegios administrativos.

Se recomienda utilizar la opción de inicio de sesión, ya que configura completamente el nuevo shell con los ajustes del nuevo usuario. Esta opción puede especificarse de tres formas equivalentes:

su – su -l su –login

Tras ejecutar el comando, el sistema solicitará la contraseña del usuario destino. Como medida de seguridad, la contraseña no será visible mientras se escribe. El símbolo del sistema cambia al iniciar sesión como root (#) y vuelve al original al salir con exit:

sysadmin@localhost:~$ su –
Password:
root@localhost:~# exit
logout sysadmin@localhost:~$

Verificación de privilegios con su: el comando sl

Para ilustrar la diferencia de permisos, el comando sl (steam locomotive) está configurado para requerir acceso administrativo. Si se ejecuta como usuario ordinario, aparece un error de permisos. Tras cambiar a root con su -, el mismo comando se ejecuta sin problemas:

sysadmin@localhost:~$ sl
-bash: /usr/bin/sl: Permission denied
sysadmin@localhost:~$ su –
Password:
root@localhost:~# sl


root@localhost:~# exit
logout sysadmin@localhost:~$

Ejecutar comandos puntuales con sudo

sudo [OPCIONES] COMANDO

El comando sudo permite ejecutar un comando puntual con privilegios de root sin abrir un nuevo shell ni cambiar de sesión. Se prefija antes del comando que se quiere ejecutar con privilegios administrativos. También puede usarse la opción -u para ejecutar el comando como un usuario diferente al root.

sysadmin@localhost:~$ sudo sl
[sudo] password for sysadmin:

Una vez completado el comando, el símbolo del sistema no cambia: el usuario sigue bajo la cuenta sysadmin. Esto es una ventaja importante, ya que reduce el riesgo de ejecutar accidentalmente comandos como root. La solicitud de contraseña no vuelve a aparecer mientras el usuario continúe ejecutando comandos sudo a intervalos inferiores a cinco minutos.

Permisos de archivos en Linux

Los permisos determinan la forma en que los diferentes usuarios pueden interactuar con un archivo o directorio. Al listar un archivo con ls -l, la salida incluye información detallada sobre sus permisos. Por ejemplo, para el script hello.sh ubicado en el directorio Documents:

sysadmin@localhost:~$ cd ~/Documents
sysadmin@localhost:~/Documents$ ls -l hello.sh
-rw-r–r– 1 sysadmin sysadmin 647 Dec 20 2017 hello.sh

Tipo de archivo

El primer carácter indica el tipo de archivo. Un guion (-) indica un archivo ordinario; la letra d indica un directorio.

Los tres grupos de permisos

Los siguientes nueve caracteres se dividen en tres grupos de tres, uno por cada nivel de acceso:

  • Propietario (usuario): el primer grupo se aplica al usuario que posee el archivo. Si la cuenta actual es la propietaria, se usan estos permisos y los demás no tienen efecto.
  • Grupo: el segundo grupo se aplica si la cuenta actual es miembro del grupo propietario del archivo, pero no es el propietario directo.
  • Otros: el tercer grupo se aplica a cualquier otro usuario que no sea el propietario ni miembro del grupo propietario.

Tipos de permisos: lectura, escritura y ejecución

Cada grupo puede contener tres tipos de permisos, cuyo significado varía según se trate de un archivo o un directorio:


Un caso práctico importante: en el conjunto de permisos -r--rw-rwx, el usuario propietario sysadmin termina teniendo menos acceso que los miembros del grupo o que el resto de usuarios. Esto se debe a que, una vez establecida la propiedad del usuario, solo se aplican los permisos del propietario, independientemente de los demás grupos.

Cambiar los permisos de un archivo con chmod

El comando chmod se utiliza para cambiar los permisos de un archivo o directorio. Solo el usuario root o el usuario propietario del archivo puede modificarlos. El nombre del comando proviene de change access mode (cambiar el modo de acceso).

Existen dos métodos: el simbólico (más intuitivo, permite cambiar permisos individuales) y el octal (numérico, requiere especificar los tres grupos completos cada vez). A continuación se documenta el método simbólico.

Sintaxis del método simbólico

chmod [<CONJUNTO><ACCIÓN><PERMISO>]… ARCHIVO

El comando se construye en tres partes:

ParteSímboloSignificado
Conjunto de permisosuUsuario — el propietario del archivo.
gGrupo — el grupo propietario del archivo.
oOtros — cualquiera que no sea propietario ni miembro del grupo.
aTodos — usuario, grupo y otros a la vez.
Acción+Añadir el permiso indicado.
=Establecer exactamente el permiso indicado (elimina los demás).
-Eliminar el permiso indicado.
PermisorLeer (read).
wEscribir (write).
xEjecutar (execute).

Añadir permiso de ejecución al propietario

El archivo hello.sh es un script, pero inicialmente no tiene permiso de ejecución para ningún grupo. Al intentar ejecutarlo, el sistema devuelve un error:

sysadmin@localhost:~/Documents$ ls -l hello.sh
-rw-r–r– 1 sysadmin sysadmin 647 Dec 20 2017 hello.sh
sysadmin@localhost:~/Documents$ ./hello.sh
-bash: ./hello.sh: Permission denied

Para añadir el permiso de ejecución (x) únicamente al usuario propietario (u), se usa chmod u+x:

sysadmin@localhost:~/Documents$ chmod u+x hello.sh
sysadmin@localhost:~/Documents$ ls -l hello.sh
-rwxr–r– 1 sysadmin sysadmin 647 Dec 20 2017 hello.sh

La ausencia de mensaje de error confirma que el comando se ejecutó correctamente. La x aparece ahora en el primer grupo de permisos (-rwxr--r--). Al ejecutar el script con ./hello.sh, la combinación ./ indica que el comando debe ejecutarse desde el directorio actual:

sysadmin@localhost:~/Documents$ ./hello.sh


Cambiar el propietario de un archivo con chown

El propietario inicial de un archivo es el usuario que lo crea. El comando chown permite cambiar el usuario o grupo propietario. Cambiar el usuario propietario requiere acceso administrativo; un usuario ordinario no puede ceder la propiedad de sus propios archivos a otro usuario. Sin embargo, el propietario sí puede cambiar el grupo propietario.

chown [OPCIONES] [PROPIETARIO] ARCHIVO

Verificar los propietarios actuales del directorio

Antes de realizar cambios, se verifica que todos los archivos del directorio Documents pertenecen al usuario sysadmin mediante ls -l:

sysadmin@localhost:~/Documents$ ls -l
total total 144
drwx—— 5 sysadmin sysadmin 4096 Dec 20 2017 School
drwx—— 2 sysadmin sysadmin 4096 Dec 20 2017 Work
-rw-r–r– 1 sysadmin sysadmin 39 Dec 20 2017 adjectives.txt
-rw-r–r– 1 sysadmin sysadmin 90 Dec 20 2017 alpha-first.txt
-rw-r–r– 1 sysadmin sysadmin 106 Dec 20 2017 alpha-second.txt
-rw-r–r– 1 sysadmin sysadmin 195 Dec 20 2017 alpha-third.txt
-rw-r–r– 1 sysadmin sysadmin 390 Dec 20 2017 alpha.txt
-rw-r–r– 1 sysadmin sysadmin 42 Dec 20 2017 animals.txt
-rw-r–r– 1 sysadmin sysadmin 14 Dec 20 2017 food.txt
-rwxr–r– 1 sysadmin sysadmin 647 Dec 20 2017 hello.sh
-rw-r–r– 1 sysadmin sysadmin 67 Dec 20 2017 hidden.txt
-rw-r–r– 1 sysadmin sysadmin 10 Dec 20 2017 letters.txt
-rw-r–r– 1 sysadmin sysadmin 83 Dec 20 2017 linux.txt
-rw-r–r– 1 sysadmin sysadmin 66540 Dec 20 2017 longfile.txt
-rw-r–r– 1 sysadmin sysadmin 235 Dec 20 2017 newhome.txt
-rw-r–r– 1 sysadmin sysadmin 10 Dec 20 2017 numbers.txt
-rw-r–r– 1 sysadmin sysadmin 77 Dec 20 2017 os.csv
-rw-r–r– 1 sysadmin sysadmin 59 Dec 20 2017 people.csv
-rw-r–r– 1 sysadmin sysadmin 110 Dec 20 2017 profile.txt
-rw-r–r– 1 sysadmin sysadmin 51 Dec 20 2017 red.txt

Cambiar el propietario de hello.sh a root

Para transferir la propiedad del script hello.sh al usuario root, se combina sudo con chown:

sysadmin@localhost:~/Documents$ sudo chown root hello.sh
[sudo] password for sysadmin:
sysadmin@localhost:~/Documents$ ls -l hello.sh
-rwxr–r– 1 root sysadmin 647 Dec 20 2017 hello.sh

El campo de usuario propietario muestra ahora root, confirmando que el cambio se realizó correctamente.

Por qué hello.sh ya no se puede ejecutar como sysadmin

Al intentar ejecutar el script de nuevo como sysadmin, el sistema devuelve un error:

sysadmin@localhost:~/Documents$ ./hello.sh
-bash: ./hello.sh: Permission denied

El motivo es que el permiso de ejecución (x) solo está asignado al usuario propietario, que ahora es root. Al aplicarse los permisos del propietario para sysadmin (que ya no es el propietario), el sistema deniega la ejecución. Para volver a ejecutarlo, es necesario usar sudo y así actuar como root.

Resumen de comandos

ComandoFunciónEjemplo
su -Abre un shell completo como root.su -
sudoEjecuta un comando puntual con privilegios de root.sudo chown root hello.sh
ls -lLista archivos con sus permisos y propietarios.ls -l hello.sh
chmodModifica los permisos de un archivo o directorio.chmod u+x hello.sh
chownCambia el usuario o grupo propietario de un archivo.sudo chown root hello.sh

Conclusión

El sistema de permisos de Linux es preciso y consistente: cada archivo tiene un propietario, un grupo y un conjunto de permisos para el resto de usuarios. Los comandos su, sudo, chmod y chown son las herramientas fundamentales para gestionar quién puede hacer qué sobre cada recurso del sistema.