chmod – chown – ACL – Administración de permisos en archivos y directorios de Linux

En todos los sistemas UNIX en general existe un estándar para configurar los permisos adecuados para que a cada archivo y directorio solamente pueda acceder la aplicación o los usuarios y grupos que deban hacerlo y no otras.

La configuración de permisos de lectura, escritura y ejecución para cada archivo y directorio es primordial para la seguridad de nuestros datos.

Modificación de permisos de lectura, escritura y ejecución

Con el comando chmod podremos modificar los permisos de cualquier archivo o directorio de nuestro sistema.

# ls -la 
total 8 
drwxrwxr-x 2 usuario1 usuario1 24 nov 8 06:46 . 
drwx------ 7 usuario1 usuario1 4096 nov 8 06:46 .. 
-rw-rw-r-- 1 usuario1 usuario1 5 nov 8 06:46 fichero.txt 
#

Añadiremos permisos con el símbolo «+» y los eliminaremos con el «-«.

Añadiremos permisos a nivel de usuario utilizaremos el parámetro «u», para el grupo «g» y para el resto de usuarios «o».

Por lo tanto, si queremos eliminar el permiso de lectura al fichero del ejemplo anterior para el grupo, ejecutaremos el comando «chmod g-r fichero.txt».

Si queremos añadir permisos de escritura para el resto de usuarios, utilizaremos «chmod o+w fichero.txt».

Otra manera de modificar los permisos es de forma numérica:

 PermisoValor
 Propietario del archivo 
Lectura 400 
Escritura 200 
Ejecución 100 
 Grupo al que pertenece el archivo 
Lectura 40 
Escritura 20 
Ejecución 10 
 Other users 
Lectura 4 
Escritura 2 
Ejecución 1 

Por lo tanto, si queremos permisos totales para el propietario del archivo, de lectura y escritura para el grupo y sólo lectura para el resto de usuarios, asignaremos permisos 764, tal y como se detalla a continuación:

# chmod 764 fichero.txt
# ls -la
total 8
drwxrwxr-x 2 usuario1 usuario1 24 nov 8 06:46 .
drwx—— 7 usuario1 usuario1 4096 nov 8 06:59 ..
-rwxrw-r– 1 usuario1 usuario1 5 nov 8 06:46 fichero.txt
#

Asignación de permisos mediante ACL (Access Control List o Listas de Control de Acceso)

Las listas de control de acceso son un método alternativo a los permisos que asignamos con chmod. De hecho, ACL es prioritario a chmod.

Para que funcionen los permisos ACL, el filesystem debe estar montado con este permiso:

# mount |grep vgserveis |grep log
/dev/mapper/vgtest-lvtest on /test type ext4 (rw,acl)
#

Con ACL también podemos permitir o denegar accesos de lectura, escritura y ejecución a archivos y directorios a usuarios y grupos de sistema, independientemente de los permisos «chmod» que tengan asignados.

Asignación de permisos de lectura

setfacl -m u:usuario1:rwx /test/prueba.txt
ls -la /test/prueba.txt
-rw-rwxr--+ 1 root root 7 nov 2 11:07 /test/prueba.txt
getfacl /test/prueba.txt
getfacl: Removing leading '/' from absolute path names
file: test/prueba.txt
owner: root
group: root
user::rw-
user:usuario1:rwx
group::r--
mask::rwx
other::r--

NOTA: Los permisos ACL no funcionan con todos los tipos de filesystems. Por ejemplo, en el momento en el que escribo este arículo funciona con EXT4 pero no con XFS.

Eliminación de permisos de lectura

setfacl -x u:usuario1 /test/prueba.txt

Permiso setuid

Este permiso se utiliza para poder ejecutar comandos como si fuésemos el root de manera temporal. Por ejemplo, el fichero /etc/passwd solamente es propiedad del usuario root pero el resto de usuarios han de poder cambiar su contraseña y almacenarla en este fichero.

# ls -la /etc/passwd 
-rw-r--r-- 1 root root 2120 nov 8 06:46 /etc/passwd 
#

Ahora bien, si nos fijamos en los permisos que tiene el comando passwd, veremos que tiene el setuid activado (vemos la «s» en el listado de permisos).

# ls -la /usr/bin/passwd 
-rwsr-xr-x 1 root root 29368 abr 8 2008 /usr/bin/passwd 
#

Permiso setgid

Es un permiso especial que sirve para que todos los ficheros que se crean dentro de un directorio hereden el grupo propietario del directorio y no del usuario que los crea.

Veamos un ejemplo:

[root@server1 ~]# id david
uid=1000(david) gid=1000(david) groups=1000(david)
[root@server1 ~]# groupadd grupotest
[root@server1 ~]# mkdir /test
[root@server1 ~]# chown david:grupotest /test
[root@server1 ~]# chmod g+s /test/
[root@server1 ~]# ls -ld /test/
drwxr-sr-x 2 david grupotest 6 Aug  5 18:33 /test/
[root@server1 ~]# su - david
Last login: Thu Aug  5 18:32:37 CEST 2021 on pts/0
[david@server1 ~]$ echo test > /test/test.txt
[david@server1 ~]$ ls -la /test/test.txt 
-rw-rw-r-- 1 david grupotest 5 Aug  5 18:33 /test/test.txt
[david@server1 ~]$ 

Como podemos observar, el fichero creado anteriormente (test.txt) se ha creado con el grupo «grupotest» y no con el grupo «david» que es el del usuario que ha creado el fichero.

Cambiar el propietario de un archivo

Para cambiar el usuario y grupo de sistema al que pertenece un archivo, utilizaremos el comando chown.

chown usuario:grupo fichero

Ejemplo:

# ls -la
total 8
drwxrwxr-x 2 usuario1 usuario1 24 nov 8 06:46 .
drwx—— 7 usuario1 usuario1 4096 nov 8 06:59 ..
-rwxrw-r– 1 usuario1 usuario1 5 nov 8 06:46 fichero.txt
# chown David:David fichero.txt
# ls -la
total 8 drwxrwxr-x 2 usuario1 usuario1 24 nov 8 06:46 .
drwx—— 7 usuario1 usuario1 4096 nov 8 06:59 ..
-rwxrw-r– 1 David David 5 nov 8 06:46 fichero.txt
#

Como vemos, una vez ejecutado el comando, ya hemos cambiado el propietario del archivo Linux tanto a nivel de usuario como de grupo.

También podemos cambiar sólo el grupo con el comando chgrp.

[root@prt53ws1 ~]# ll index.html
-rw-r--r-- 1 root root 112019 Dec 17 10:02 index.html
[root@prt53ws1 ~]# chgrp adminer index.html
[root@prt53ws1 ~]# ll index.html
-rw-r--r-- 1 root adminer 112019 Dec 17 10:02 index.html
[root@prt53ws1 ~]#

Te puede interesar

COMPÁRTEME

Deja un comentario