Bueno, para ser específicos, lo fue chmod -R 755
. Ahora cada archivo es ejecutable, lo que no quiero. Estoy pensando que debería mirar los dos primeros bytes de cada archivo #!
, pero ¿esto cubrirá todo? ¿Debería usar file
para mirar todo y basar mi decisión en eso? O, más probablemente, ¿hay una forma aún mejor de hacer esto?
¿Cuál es la forma preferida de ir recursivamente a través de un directorio y establecer -x en archivos que no deben ser ejecutables?
permissions
files
chmod
Larry Wang
fuente
fuente
/
otro directorio?/
, un directorio que me pertenece por completo.Respuestas:
No hay una bala mágica aquí. Los permisos llevan información que no siempre es redundante.
Si hubiera hecho esto en un directorio del sistema, su sistema estaría en muy mal estado, porque tendría que preocuparse por los bits setuid y setgid, y por los archivos que no deberían ser legibles en todo el mundo, y por los archivos que se supone que se pueden escribir en grupo o en el mundo.
En un directorio por usuario, debe preocuparse por los archivos que no deberían ser legibles en todo el mundo. Nadie puede ayudarte allí.
En cuanto a la capacidad de ejecución, una buena regla general sería hacer que todo lo que no parece que pueda ejecutarse, sea no ejecutable. El kernel puede ejecutar scripts cuyos primeros dos bytes son
#!
, binarios ELF cuyos primeros cuatro bytes son\x7fELF
donde\x7f
está el byte con el valor 12 y algunos tipos de archivos más raros (a.out, cualquier cosa registrada conbinfmt_misc
). Por lo tanto, el siguiente comando debería restaurar sus permisos a un estado razonable (supone bash 4 o zsh; de lo contrario, usefind
para recorrer el árbol de directorios; advertencia, escrita directamente en el navegador):Tenga en cuenta que hay una manera simple de hacer una copia de seguridad y restaurar los permisos de un árbol de directorios, en Linux y posiblemente en otros dispositivos compatibles con ACL:
fuente
**/*
requiereglobstar
.find
lugar de globstar; dos, en lugar de mirar la cabeza, use elfile
comando para ver qué es y bifurcarse desde allí.find
es menos confiable queglobstar
,globstar
es preferible en casi todos los casos.Creo que querrás algo como
find dir -type f -exec chmod ugo-x '{}' +
Esto busca todos los archivos regulares, recursivamente en dir, (excluye directorios y dispositivos) y elimina el bit ejecutable.
Comenzaría aquí y luego trabajaría para crear archivos que se supone que son ejecutables, ejecutables.
Lo siguiente debería funcionar exactamente como lo solicitó (encontrará todos los archivos normales, agréguelos por #! Y luego elimine los bits x si no se encuentran)
posiblemente una mejor versión de lo anterior (menos tuberías)
fuente
grep -L '^#!'
al menos (las comillas son necesarias y se^
restringe a la coincidencia al comienzo de la línea), pero sigue siendo demasiado permisivo ya que coincide#!
en cualquier línea. El usoxargs
fallará con los nombres de archivo que contengan espacios o comillas; usoxargs -d '\n'
(requiere GNUxargs
).Bueno, sin una línea shebang, el archivo se ejecutará como un script de shell, nominalmente con
/bin/sh
. Su idea es un buen comienzo y suponiendo que el directorio en cuestión no contenga archivos de misión crítica, probablemente no exista mucho riesgo de ejecutar algunosgrep
ychmod
combo. Puede encontrar falsos positivos, es decir, archivos con una línea shebang que no están destinados a tener su bit ejecutable establecido pero sin conocer más información sobre el propósito de lo que hay en el directorio, solo usted puede decidir si eso representa una amenaza existencial significativa para su sistema y / o datos.fuente
#!
.