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:
Permiso | Valor | ||
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
- Configuración de sudo
- Conexiones seguras con SSH
- Comandos que actúan sobre el sistema de archivos de Linux
Mi pasión por la tecnología me lleva constantemente a explorar las últimas tendencias y aplicaciones, buscando siempre formas de implementar soluciones innovadoras que mejoren la eficiencia. En puerto53.com comparto contenido valioso para ayudar a otros profesionales y entusiastas de la informática a navegar y dominar el complejo mundo de la tecnología. Mi especialidad en Linux RedHat.
Más sobre mí en el este enlace,