No, los permisos del sistema de archivos son exigidos por el sistema operativo.
Cuando un programa quiere eliminar un archivo, llama a la función unlink () , que inmediatamente gira el control hacia el núcleo. El kernel primero verifica si el archivo existe y luego verifica los permisos asociados con él. Si el usuario tiene permiso para eliminar (lo que generalmente significa permiso de escritura en el directorio que contiene el archivo), el kernel, mediante el controlador del sistema de archivos, realizará todas las acciones necesarias para eliminar el archivo del disco. Una vez hecho esto, el control se devuelve al programa del usuario.
Esta distinción entre acciones realizadas directamente por su programa (normalmente llamado "modo de usuario" o "dominio de usuario") y las acciones realizadas por el kernel en nombre del usuario (típicamente llamado "modo de kernel") son una característica clave de todos los sistemas operativos, no solo de Linux, y son la base de cómo se aplican las reglas del kernel, incluida la separación de procesos, la separación de privilegios, la segmentación de memoria y todo lo que el kernel es responsable de proporcionar.
Cualquier defecto o laguna que permita que un programa evite esta protección se consideraría una vulnerabilidad de escalada de privilegios , y tiene que ser arreglado para que el sistema operativo sea seguro de usar. Estos son sorprendentemente comunes, pero generalmente se solucionan rápidamente una vez descubiertos.
Con respecto a los privilegios del sistema de archivos, lo que le impide escribir su propio controlador del sistema de archivos para eludir el controlador del sistema de archivos del kernel es el hecho de que un usuario no tiene acceso directo de lectura o escritura al disco en bruto. Estos derechos están controlados (una vez más) por los permisos del sistema de archivos.
En los sistemas Linux y Unix, hay un conjunto de archivos especiales que representan dispositivos físicos, que generalmente se guardan en el directorio /dev/
. Por ejemplo, /dev/sda
representa el primer disco SCSI o SATA en Linux. En BSD (incluido OSX) es /dev/disk0
.
Leer o escribir estos archivos realmente leerá o escribirá directamente en el disco, omitiendo el controlador del sistema de archivos, pero aún pasando por el kernel. Dado que estos archivos tienen sus propios permisos establecidos, el núcleo realiza las mismas comprobaciones antes de permitir el acceso al dispositivo, por lo que la seguridad permanece intacta.
Si tuviera que cambiar los permisos o la propiedad de la entrada en /dev/
para permitir que los usuarios normales accedan directamente al disco, al hacerlo, crearía (lo adivinó) una vulnerabilidad de escalada de privilegios.