El acceso privilegiado a archivos y directorios está realmente determinado por las capacidades, no solo por ser rooto no. En la práctica, rootgeneralmente 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/shadowy cosas así, es aproximadamente igual solo tener acceso completo a la raíz de todos modos)
También existe la CAP_DAC_READ_SEARCHcapacidad 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 +tlimita).
(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
/procy/sys , dado que no son realmente archivos reales
- SELinux y otros módulos de seguridad que pueden limitar la raíz
chattrinmutable +iy 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!