El acceso privilegiado a archivos y directorios está realmente determinado por las capacidades, no solo por ser root
o no. En la práctica, root
generalmente tiene todas las capacidades posibles, pero hay situaciones en las que todas / muchas de ellas podrían descartarse, o algunas podrían entregarse a otros usuarios (sus procesos).
En resumen, ya describió cómo funcionan las verificaciones de control de acceso para un proceso privilegiado. Así es como las diferentes capacidades realmente lo afectan:
El principal capacidad aquí es queCAP_DAC_OVERRIDE
un proceso que tiene puede "omitir la lectura, escritura y ejecución de verificaciones de permisos". Eso incluye leer y escribir en cualquier archivo, así como leer, escribir y acceder a directorios.
En realidad, no se aplica a la ejecución de archivos que no están marcados como ejecutables. El comentario engeneric_permission
(fs/namei.c
), antes de que el acceso verifique los archivos, dice que
Los DAC de lectura / escritura son siempre reemplazables. Los DAC ejecutables son reemplazables cuando hay al menos un conjunto de bits de ejecución.
Y el código verifica que haya al menos uno x
bit establecido si está intentando ejecutar el archivo. Sospecho que es solo una característica conveniente, para evitar la ejecución accidental de archivos de datos aleatorios y obtener errores o resultados extraños.
De todos modos, si puede anular los permisos, puede hacer una copia ejecutable y ejecutarla. (Aunque podría hacer una diferencia en teoría, los archivos setuid de un proceso podían anular los permisos de archivo ( CAP_DAC_OVERRIDE
), pero no tenían otras capacidades relacionadas ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
). Pero tenerCAP_DAC_OVERRIDE
permitir la edición /etc/shadow
y cosas así, es aproximadamente igual solo tener acceso completo a la raíz de todos modos)
También existe la CAP_DAC_READ_SEARCH
capacidad que permite leer cualquier archivo y acceder a cualquier directorio, pero no ejecutar ni escribir en ellos; yCAP_FOWNER
eso permite que un proceso haga cosas que generalmente están reservadas solo para el propietario del archivo, como cambiar los bits de permiso y el grupo de archivos.
Anular el bit adhesivo en los directorios solo se menciona debajo CAP_FOWNER
, por lo que parece queCAP_DAC_OVERRIDE
no sería suficiente para ignorar eso. (Le daría permiso de escritura, pero generalmente en directorios fijos lo tiene de todos modos, y lo +t
limita).
(Creo que los dispositivos especiales cuentan como "archivos" aquí. Al menos generic_permission()
solo tiene una verificación de tipo para los directorios, pero no verifiqué fuera de eso).
Por supuesto, todavía hay situaciones en las que incluso las capacidades no lo ayudarán a modificar archivos:
- algunos archivos
/proc
y/sys
, dado que no son realmente archivos reales
- SELinux y otros módulos de seguridad que pueden limitar la raíz
chattr
inmutable +i
y solo agregar+a
indicadores en ext2 / ext3 / ext4, los cuales detienen incluso la raíz y evitan también el cambio de nombre de archivos, etc.
- sistemas de archivos de red, donde el servidor puede hacer su propio control de acceso, p. ej.
root_squash
en mapas NFS root a nadie
- FUSE, que supongo que podría hacer cualquier cosa
- montajes de solo lectura
- dispositivos de solo lectura
capabilities(7)
página del manual, ¡considere presentar un informe de error!