Gestión de permisos
En linux cada archivo y directorio tienen permisos de:
- Usuario: El UID del usuario propietario.
- Grupo: El GID del grupo propietario.
- Otros: El resto de de usuarios que no tienen ni el UID del usuario propietario ni el GID de del grupo propietario.
El comando ls -l
lista los archivos y directorios incluyendo información de sus permisos:
$ touch file.txt
$ ls -l
total 0
-rw-rw-r-- 1 vagrant vagrant 0 Aug 24 20:12 file.txt
El primer carácter indica si el archivo es un archivo regular:
-
para archivo regulares.d
para directorios.l
para enlaces simbólicos.
El resto de los carácteres indican los permisos de lectura, escritura y ejecución para el propietario, grupo y otros respectivamente:
r
indica que el archivo tiene permisos de lectura.w
indica que el archivo tiene permisos de escritura.x
indica que el archivo tiene permisos de ejecución.
El permiso de ejecución en directorios significa que se puede acceder dentro del mismo y listar su contenido. Un usuario sin permiso de lectura a un directorio no podrá ver su contenido. Un usuario sin permiso de ejecución a un directorio podrá ver el nombre de los archivos pero no su información.
Cambio de permisos
Para modificar los permisos de un archivo o directorio se utiliza el comando chmod
.
Se puede cambiar los permisos de forma relativa o absoluta.
Modo relativo
Cambiar permisos de forma relativa significa cambiar uno de los campos de forma aislada sin alterar el resto de permisos. Para ello:
- Se indica a quién se va a cambiar el permiso (se puede poner varios):
u
: usuariog
: grupoo
: otrosa
: todos (equivalente augo
, también se puede dejar en blanco)
- Se indica el tipo de operación:
+
: añadir permisos-
: quitar permisos
- Tipo de permiso:
r
: lecturaw
: escriturax
: ejecución
Ejemplos:
$ # Añadir permiso de lectura a otros
$ chmod o+r file.txt
$ # Eliminar todos los permisos de escritura y ejecución para todos excepto el propietario
$ chmod go-wx file.txt
$ # Añadir permiso de ejecución para todos
$ chmod +x file.txt
Modo absoluto
Cambiar permisos de forma absoluta significa establecer los permisos de lectura, escritura y ejecución para el propietario, grupo y otros de una. Los permisos se establecen en octal aunque son fácilmente representables en binario
-rw-rw-r-- 1 vagrant vagrant 0 Aug 24 20:12 file.txt
Si Augaramos los permisos del archivo file.txt
en cada contexto obtenemos:
rw-
para el propietariorw-
para el grupor--
para otros
Si los transformamos en binario obtenemos:
110
para el propietario110
para el grupo100
para otros
Si los transformamos a octal:
6
para el propietario6
para el grupo4
para otros
El archivo file.txt
tiene permisos 664
. Vamos a cambiarle los permisos para que sólo el propietario sea capaz de leer y ejecutar:
- propietario:
rw-
en binario es110
y en octal6
- grupo:
---
en binario es000
y en octal0
- otros:
---
en binario es000
y en octal0
$ chmod 600 file.txt
$ ls -l file.txt
-rw------- 1 vagrant vagrant 0 Aug 24 20:12 file.txt
Vamos a cambiar sus permisos para que el propietario tenga todos los permisos, el grupo pueda leer y ejecutar pero no editar y el resto sólo puedan leer:
- propietario:
rwx
en binario es111
y en octal7
- grupo:
r-x
en binario es101
y en octal5
- otros:
r--
en binario es100
y en octal4
$ chmod 600 file.txt
$ ls -l file.txt
-rwxr-xr-- 1 vagrant vagrant 0 Aug 24 20:12 file.txt
Cambio de propietario y grupo
Para cambiar el propietario de un archivo se utiliza el comando chown
y para el grupo chgrp
.
Ambos comandos admiten el flag -R
en directorios para que realice la operación de foma recursiva.
$ ls -l file.txt
-rwxr-xr-- 1 vagrant vagrant 0 Aug 24 20:12 file.txt
$ sudo chgrp user1 file.txt
$ ls -l file.txt
-rwxr-xr-- 1 vagrant user1 0 Aug 24 20:12 file.txt
$ sudo chown user1 file.txt
$ ls -l file.txt
-rwxr-xr-- 1 user1 user1 0 Aug 24 20:12 file.txt
$ sudo chown vagrant:vagrant file.txt
$ ls -l file.txt
-rwxr-xr-- 1 vagrant vagrant 0 Aug 24 20:12 file.txt
Sudoers
En Linux se pueden ejecutar determinados comandos con permisos de superusuario mediante sudo <comando>
. Si el usuario intenta ejecutar algo con sudo
, se comprueba si tiene permisos para ejecutar el comando y, si no los tiene, no lo ejecuta y el intento queda registrado en el sistema.
Se puede configurar los privilegios de los usuarios para ejecutar ciertos comandos en el archivo /etc/sudoers
. Las modificaciones sobre este archivo no se deben realizar como si fuese un archivo normal, sino que hay que modificarlos con el comando visudo
.
Especificación de privilegios:
usuario host = (usuario_privilegiado_opcional:especificación) comandos
Ejemplos:
# Permitir al grupo `sudo` en cualquier definición de host ejecutar cualquier comando
%sudo ALL=(ALL) ALL
# Permitir al usuario `user1` poder ver el archivo de auth.log sin requerir contraseña.
user1 ALL=(ALL:NOPASSWD) /usr/bin/less /var/log/auth.log
# Permitir al grupo `developers` poder ejecutar el comando `ls` con contraseña
%developers ALL=(ALL:PASSWD) /usr/bin/ls