Para acceder a un archivo o directorio, debe tener execute acceso a su directorio principal (y, por lo tanto, a todos los padres que se encuentran arriba).
Por lo tanto, si puedo acceder a '/ var / www / html', implícitamente también puedo acceder a /var/www/
y /var
y /
. Sin embargo, eso no significa que pueda hacer mucho con él, ya que mi permiso para cualquier otro subárbol está determinado por el permiso en ese directorio.
Entonces, aunque puedo llegar a /var/www/html
, eso no significa que pueda llegar a /var/www/docs
, depende de los permisos de docs
.
Ahora, aquí está el detalle importante para los permisos de archivos, y una vez que lo entiendas, puedes crear un conjunto de permisos razonables:
Para archivos
-
leer : significa que tiene acceso para abrir el archivo de solo lectura y acceder a su contenido
-
escribir : significa que tiene acceso para abrir un archivo existente de lectura-escritura y modificar o eliminar su contenido. No significa que pueda eliminar la entrada de archivo , pero puede truncar el archivo para vaciarlo o cambiarlo para que diga otra cosa.
-
ejecutar : significa que tienes permiso para ejecutar el archivo. Es posible que no vea su contenido porque el sistema operativo leerá el archivo en su nombre y lo ejecutará por usted.
Para directorios
-
leer : significa que tiene acceso a lista los archivos en un directorio. Es posible que no tenga acceso para hacer nada con ellos, pero al menos puede ver sus nombres, tamaños, permisos, etc.
-
escribir : significa que tiene acceso a cambiar la lista de archivos en un directorio. Es decir, puede crear archivos, eliminarlos, cambiarles el nombre, etc. Es posible que no pueda abrir (leer o escribir) ningún archivo existente, pero puede modificar la lista.
-
ejecutar : significa que puede acceder a los archivos o directorios en lugar del directorio siempre que sepa el nombre y tenga los permisos adecuados en el archivo secundario o dir. Puede usar el directorio, pero no tiene permiso para modificar o ver la lista de archivos.
Para acceder a un directorio secundario dado, todo lo que necesita es el bit de ejecución. Así, por ejemplo, en /home/
, no es raro ver los permisos establecidos en rwx--x--x
y propiedad de root , con los directorios de usuarios establecidos en rwx------
y propiedad del usuario. Esto le da a cada usuario acceso a su propio directorio, pero él no puede acceder o incluso listar los otros directorios bajo /home
.
Incluso mejor
Un sistema aún mejor, que todavía está en desarrollo pero es lo suficientemente estable para los primeros usuarios, es usar Linux cgroups para dar a cada usuario o sitio o programa su propio sistema de archivos en su totalidad. Esto se hace usando una combinación de chroot
y mount --bind
y, a menudo, sindicalizando sistemas de archivos (como unionfs o aufs) para dar a cada proceso acceso solo a los archivos que necesita, sin duplicación innecesaria.
Además, cgroups permite que los procesos individuales vivan en redes aisladas con dominios aislados de memoria y socket y recursos similares. Esto crea el potencial de lo que parece y actúa como una máquina virtual, pero sin la máquina virtual. Esta tecnología sigue avanzando, pero está bastante claro que este será el camino a seguir para el aislamiento de procesos en Linux.
Los proyectos relevantes que utilizan esta tecnología incluyen LXC y Docker , ofrece una forma muy fácil de configurar contenedores aislados que incluyen todo su" mundo "desde una perspectiva de ejecución (como una VM), pero sin agregar una sobrecarga de virtualización .