Introducción
Los permisos de archivos y directorios en RHEL son fundamentales para garantizar la seguridad y la organización dentro del sistema. Estos permisos controlan qué acciones pueden realizar los usuarios y grupos sobre archivos y directorios, y se complementan con configuraciones especiales que fortalecen aún más la gestión del acceso. Además, la personalización de permisos predeterminados, mediante herramientas como umask, y el uso de permisos avanzados como setuid, setgid y sticky bit permiten ajustar los entornos colaborativos y proteger recursos críticos de manera efectiva.
Objetivos
Esta sección tiene como propósito:
- Explicar las bases de los permisos en archivos y directorios, y cómo afectan a usuarios, grupos y otros.
- Proveer habilidades prácticas para gestionar permisos básicos y avanzados utilizando comandos como chmod, chown y chgrp.
- Detallar el uso y los efectos de los permisos especiales (setuid, setgid y sticky bit) en diversos contextos.
- Introducir la configuración de permisos predeterminados y personalización mediante umask para entornos colaborativos y seguros.
Permisos de Archivos y Directorios en RHEL
Categorías de Permisos y Usuarios
Los permisos de archivos controlan el acceso y las acciones permitidas en archivos y directorios. Se aplican a tres categorías de usuarios:
- Propietario: Usuario que normalmente creó el archivo o directorio.
- Grupo: Grupo principal del propietario, aunque esto puede modificarse.
- Otros: Usuarios que no sean el propietario ni miembros del grupo propietario.
Los permisos son específicos para cada categoría y no se heredan por subdirectorios. En caso de conflicto, los permisos más específicos tienen prioridad, como los permisos de usuario sobre los permisos de grupo.
Tipos de Permisos
Los permisos en Linux se dividen en tres tipos básicos, con efectos diferentes dependiendo de si se aplican a un archivo o un directorio:
| Permiso | Efecto en los archivos | Efecto en los directorios |
|---|---|---|
r(lectura) |
Puede leerse el contenido del archivo. | El contenido del directorio (nombres de archivo) puede detallarse. |
w(escritura) |
Puede cambiarse el contenido del archivo. | Cualquier archivo en el directorio puede crearse o eliminarse. |
x(ejecución) |
Los archivos pueden ejecutarse como comandos. | El directorio puede convertirse en el directorio de trabajo actual. Puede ejecutar el comandocden él, pero también se requiere permiso de lectura para enumerar los archivos que se encuentran allí. |
Visualización de Permisos y Propiedades
Usa el comando ls -l para listar los permisos de un archivo o directorio: ls -l archivo_o_directorio El primer carácter representa el tipo de archivo (- para archivos regulares, d para directorios, l para enlaces simbólicos). Los siguientes nueve caracteres reflejan los permisos en tres grupos:
- Primer conjunto: Permisos del propietario.
- Segundo conjunto: Permisos del grupo.
- Tercer conjunto: Permisos de otros.
El primer carácter del listado extenso representa el tipo de archivo, que se interpreta de la siguiente manera:
-es un archivo regular.des un directorio.les un enlace simbólico.ces un archivo de dispositivo de caracteres.bes un archivo de dispositivo de bloque.pes un archivo de tubería nombrado.ses un archivo de socket local.
Ejemplo:
-rw-rw-r-- 1 user group 1024 Mar 8 17:36 archivo.txt
- El propietario tiene permisos de lectura y escritura.
- El grupo tiene permisos de lectura y escritura.
- Otros usuarios solo tienen permisos de lectura.
Efectos de los Permisos
Un usuario con permisos de escritura y ejecución en un directorio puede eliminar archivos de ese directorio, independientemente de quién sea el propietario. Para evitarlo, se puede configurar el permiso especial "sticky bit" en directorios. Esto restringe la eliminación a los propietarios de los archivos o al usuario root. Ejemplos de efectos de permisos En los siguientes ejemplos, se ilustra cómo interactúan los permisos de archivos. Para estos ejemplos, su sistema tiene cuatro usuarios con las siguientes membresías de grupo:
| Usuario | Membresías de grupo |
|---|---|
operator1 |
operator1, consultant1 |
database1 |
database1, consultant1 |
database2 |
database2, operator2 |
contractor1 |
contractor1, operator2 |
Esos usuarios trabajan con archivos en el directorio dir. A continuación se incluye un listado extenso de los archivos en ese directorio:
ls -la
total 24
drwxrwxr-x. 2 database1 consultant1 4096 Mar 4 10:23 .
drwxr-xr-x. 10 root root 4096 Mar 1 17:34 ..
-rw-rw-r--. 1 operator1 operator1 1024 Mar 4 11:02 app1.log
-rw-r--rw-. 1 operator1 consultant1 3144 Mar 4 11:02 app2.log
-rw-rw-r--. 1 database1 consultant1 10234 Mar 4 10:14 db1.conf
-rw-r-----. 1 database1 consultant1 2048 Mar 4 10:18 db2.conf
El comando ls con la opción -a muestra los permisos de los archivos ocultos, incluidos los archivos especiales usados para representar el directorio y su directorio principal.
En este ejemplo, el directorio especial . refleja los permisos de dir, y el directorio especial .., los permisos de su directorio principal.
Para el archivo db1.conf, el usuario propietario del archivo (database1) tiene permisos de lectura y escritura en el archivo, pero no tiene permiso de ejecución.
El grupo que es propietario del archivo (consultant1) tiene permisos de lectura y escritura, pero no de ejecución.
Todos los demás usuarios tienen permiso de lectura, pero no de escritura ni de ejecución. En la siguiente tabla, se muestran algunos efectos de este conjunto de permisos para estos usuarios:
| Efecto | ¿Por qué es verdadero este efecto? |
|---|---|
El usuariooperator1puede cambiar el contenido del archivodb1.conf. |
El usuariooperator1es miembro del grupoconsultant1, y ese grupo tiene permisos de lectura y escritura respecto del archivodb1.conf. |
El usuariodatabase1puede ver y modificar el contenido del archivodb2.conf. |
El usuariodatabase1es propietario del archivodb2.confy tiene permisos de lectura y de escritura. |
El usuariooperator1puede ver, pero no modificar el contenido del archivodb2.conf. |
El usuariooperator1es miembro del grupoconsultant1, y ese grupo tiene solamente permiso de lectura respecto del archivodb2.conf. |
Los usuariosdatabase2ycontractor1no tienen acceso al contenido del archivodb2.conf. |
Los permisosotherse aplican a los usuariosdatabase2ycontractor1, y dichos permisos no incluyen permisos de lectura ni escritura. |
El usuariooperator1es el único usuario que puede cambiar el contenido del archivoapp1.log. |
El usuariooperator1y los miembros del grupooperator1tienen permiso de escritura en el archivo, pero otros usuarios no lo tienen. Sin embargo, el único miembro del grupooperator1es el usuariooperator1. |
El usuariodatabase2puede cambiar el contenido del archivoapp2.log. |
El usuariodatabase2no es el propietario del archivoapp2.logy no está en el grupoconsultant1; por ende, rigen permisos deother. Los permisosotherotorgan permiso de escritura al archivo. |
El usuariodatabase1puede ver el contenido del archivoapp2.log, pero no modificar el contenido del archivoapp2.log. |
El usuariodatabase1es miembro del grupoconsultant1, y ese grupo tiene solo permisos de lectura respecto del archivoapp2.log. Si bien los permisosotherincluyen permiso de escritura, los permisos del grupo tienen prioridad. |
El usuariodatabase1puede eliminar los archivosapp1.logyapp2.log. |
El usuariodatabase1tiene permisos de escritura en el directoriodir, que se muestra en el directorio especial.y, como tal, puede eliminar cualquier archivo de ese directorio. Esta operación es posible incluso si el usuariodatabase1no tiene permiso de escritura en los archivos directamente. |
Comparativa con Sistemas Windows
En Linux, los permisos se aplican únicamente al archivo o directorio configurado y no se heredan automáticamente. En Windows NTFS, los permisos tienden a heredarse, y el comportamiento del bit "sticky" en Linux se asemeja al permiso "Write" en directorios de Windows con restricciones.
Gestión de Permisos y Propiedad de Archivos y Directorios
Cambiar Permisos con el Comando chmod
El comando chmod modifica los permisos de archivos y directorios, conocido también como "cambiar modo". Dos métodos principales para especificar permisos:
- Simbólico: Usa letras para representar usuarios y permisos.
- Octal (Numérico): Usa dígitos para definir permisos.
Método Simbólico:
Representa las clases de usuarios con:
-
u para usuario (propietario).
-
g para grupo.
-
o para otros.
-
a para todos los usuarios.
Operadores para modificar permisos:
-
+ agrega permisos.
-
- elimina permisos.
-
\= establece permisos exactamente como se indican.
-
Ejemplos:
- Agregar permiso de ejecución para todos:
chmod a+x myscript.sh- Eliminar permiso de lectura/escritura para grupo y otros:
chmod go-rw document.pdf- Cambiar permisos recursivamente con -R:
chmod -R g+rwx /home/user/myfolder
Método Octal:
Representa los permisos con números del 0 al 7. Cada dígito corresponde a un tipo de acceso: usuario, grupo y otros.
- Lectura (
r) = 4. - Escritura (
w) = 2. -
Ejecución (
x) = 1. -
Ejemplo:
- Permisos 644 (usuario: lectura/escritura, grupo y otros: solo lectura):
chmod 644 sample.txt
Cambiar Propiedad de Archivos con chown
Cambia el propietario de un archivo o directorio:
chown user archivo
Cambia el grupo propietario usando :grupo:
chown :grupo archivo
Cambia propietario y grupo al mismo tiempo:
chown user:grupo archivo
Cambiar propiedad recursivamente:
chown -R user:grupo /home/user
Cambiar Propiedad del Grupo con chgrp
Modifica el grupo propietario de un archivo o directorio: chgrp grupo archivo
-
Ejemplo:
- Permisos 644 (usuario: lectura/escritura, grupo y otros: solo lectura):
chgrp admins /var/logs
Precaución con Notación Alternativa en chown Evita usar el punto (.) para separar propietario y grupo, ya que puede ser ambiguo. Usa siempre dos puntos (:): chown user:grupo archivo
Permisos Especiales y Predeterminados en RHEL
Permisos Especiales
Los permisos especiales en RHEL proporcionan funcionalidades adicionales más allá de los permisos básicos de lectura, escritura y ejecución. Se aplican a archivos y directorios, y están representados por las siguientes configuraciones:
- Setuid (u+s):
Archivos: Los comandos ejecutados en un archivo con setuid se ejecutan con los privilegios del propietario del archivo, no con el usuario que ejecutó el comando.
- Ejemplo:
ls -l /usr/bin/passwd
-rw s r-xr-x. 1 root root 35504 Jul 16 2010 /usr/bin/passwd
Directorios: No tiene efecto en directorios.
- Setgid (g+s):
Archivos: Similar a setuid, pero los comandos se ejecutan con el grupo propietario del archivo.
Directorios: Los archivos creados dentro de un directorio con setgid heredan la propiedad del grupo del directorio en lugar del grupo privado del usuario que los creó.
- Ejemplo:
ls -ld /run/log/journal
drwxr- s r-x. 3 root systemd-journal 60 May 18 09:15 /run/log/journal
- Sticky Bit (o+t):
Archivos: No tiene efecto.
Directorios: Restringe la eliminación de archivos dentro de un directorio a sus propietarios y al usuario root, incluso si otros tienen permisos de escritura.
- Ejemplo:
ls -ld /tmp
drwxrwxrw t . 39 root root 4096 Feb 8 20:52 /tmp
Establecer permisos especiales:
-
Método simbólico:
-
chmod u+s archivo -
chmod g+s directorio -
chmod o+t directorio
-
-
Método octal: Usa un cuarto dígito para agregar el permiso especial:
- Setuid: 4
- Setgid: 2
-
Sticky: 1
-
Ejemplo:
chmod 2770 directorio
Permisos Predeterminados y Umask
Al crear archivos y directorios, se asignan permisos iniciales que dependen de dos factores:
- Tipo de elemento creado:
Archivos regulares: 0666 (-rw-rw-rw-)
Directorios: 0777 (drwxrwxrwx)
- Umask actual:
El umask es una máscara de bits que elimina permisos específicos en los archivos nuevos creados por un proceso.
-
Ejemplo:
-
Permisos iniciales de un archivo:
0666. -
Umask:
0022. -
Permisos resultantes:
-rw-r--r--.
-
-
Usa el comando
umaskpara consultar o modificar la configuración:
umask
umask 0027
Valores predeterminados del umask:
- Definidos en
/etc/login.defspara shells de inicio de sesión. - Definidos en
/etc/bashrcpara shells no interactivas.
Personalizar umask:
El administrador puede personalizar umask mediante scripts en /etc/profile.d/ para ajustarlo globalmente:
# Overrides default umask configuration
umask 022
Conclusión
Comprender y gestionar correctamente los permisos en archivos y directorios es esencial para mantener un entorno seguro y eficiente en RHEL. Desde los permisos básicos hasta los avanzados, estas herramientas permiten un control preciso sobre el acceso y las acciones de los usuarios. Con el conocimiento adquirido, es posible garantizar la protección de información, facilitar la colaboración segura y evitar errores críticos que comprometan la integridad del sistema.