Digamos que tengo una carpeta llamada folder
en la siguiente ruta:
my_path = /a/b/c/d/e/folder
y un archivo llamado file
en esa carpeta.
Luego, digamos que ejecuto este comando para eliminar los permisos de grupo en / a /
> chmod g-rwx -R /a/
Ahora, digamos que doy +rx
permisos a folder
:
> chmod g+rx /a/b/c/d/e/folder
Luego, si se ejecuta un segundo usuario en mi grupo:
> ls /a/b/c/d/e/folder
o
> cat /a/b/c/d/e/folder/file
ella recibe errores de permiso, y hasta donde yo entiendo esto es porque necesito proporcionar g+x
acceso a todos los padres de folder
. Mi pregunta es, ¿ cuándo o por qué sería útil dar +x
permiso a un directorio cuyo padre no lo tiene?
Gracias
permissions
Amelio Vazquez-Reina
fuente
fuente
chmod +grx -R /a/b/c/d/e/folder
? Está mal, la forma correcta de ejecutarlo es:chmod g+rx -R /a/b/c/d/e/folder
Respuestas:
La mayoría de las veces, si desea bloquear el acceso y el uso de un directorio completo (incluido su subdirectorio), puede hacerlo eliminándolo (no de forma recursiva)
-x
. Por lo tanto, puede haber dejado subdirectorios con+x
, sin hacer daño.Mantener los permisos en los subdirectorios puede ser útil por varias razones (especialmente cuando
-x
no se aplica a todos, pero al menos un usuario aún puede hacer algo).Por ejemplo, podría bloquear el uso del directorio contenedor temporalmente, mientras realiza otros cambios en los permisos dentro de esa estructura de directorio, y luego volver a habilitar el acceso a todo el árbol en una sola operación (dando
+x
al directorio de nivel superior).También podría tener una situación en la que una secuencia de comandos (no necesariamente ejecutada por el propietario) realiza una copia de seguridad del árbol de directorios en una ubicación temporal (que no debería ser legible por otros) y coloca todo en un archivo tar, preservando la configuración de permisos del contenido del directorio.
fuente
Necesita permisos + x en todos los directorios principales para crear un CD o acceder a un archivo en un directorio.
Necesita permisos + r en los directorios para enumerar los archivos. Así que aquí hay un ejemplo:
puede emitir estos comandos para obtener algunas configuraciones:
mkdir -p /a/b
touch /a/b/{file1,file2}
cd /a
echo 1 > b/file1
echo 2 > b/file2
Sin derechos:
Con ejecutar solo
Ahora con lectura:
Esta parte puede ser un poco confusa, pero con solo leer y no ejecutar, en realidad puede enumerar los archivos en el directorio, pero no leer los metadatos de inodes, por lo que obtendrá el permiso denegado pero aún podrá ver la lista de archivos en un directorio como a continuación ..
fuente
Desea usar
+x
permisos no recursivos en la situación que otorgó:(Eso supone que el usuario es miembro del grupo de cada directorio. De lo contrario, tendría que hacerlo
chmod o+x
para dichos directorios).Para que un usuario lo haga con
ls /a/b/c/d/e/folder
éxito, debe tener permiso de ejecución en cada directorio de la ruta y leer permiso enfolder
.Si lo hiciste
funcionaría, pero le daría permiso de ejecución de grupo a cada archivo y directorio bajo / a. Eso es innecesario y, en el caso de los archivos, probablemente esté mal.
fuente
En la situación particular a la que se enfrenta, el problema es que, incluso si
folder
tiene los permisos adecuados para que algún usuario acceda desde su propio grupo, si alguna de las carpetas principales defolder
no está accesible para ese usuario, entonces no podrá acceda al interior (el que se llamafolder
en su ejemplo).Si ejecuta:
entonces
a
y todos sus hijos tendrán ese permiso.Cuando ejecutas:
entonces
folder
y todos sus hijos tendrán ese permiso también. Pero, con este comando posterior, las carpetasa/
,a/b
etc., hastaa/b/c/d/e
que no cambien sus permisos.fuente
El caso común para eliminar el bit x en los directorios es bloquear a los usuarios en sus directorios de inicio. Los shells restringidos tienen la opción de no permitir
cd
hacer referencia a nombres de ruta absolutos y no permitir la ejecución de programas que usan rutas absolutas. Tampoco pueden accedercd ..
al directorio principal de su directorio principal y, por lo tanto, están efectivamente bloqueados y no pueden ejecutar ningún programa que no esté en $ PATH.fuente