Acabo de hacer un chmod -x chmod


Respuestas:


43

En Linux:

/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod

http://www.slideshare.net/cog/chmod-x-chmod


bindbn, yo estaba a punto de publicar el mismo enlace :-) pero yo estaba leyendo como soy nuevo en Unix Linux cosas / !!!
rihatum

2
En una distribución de 64 bits, puede que tenga que usar /lib64/ld-linux-x86-64.so.2en su lugar. ldd /bin/chmoddebería enumerar exactamente qué enlazador ejecutar.
goldPseudo

Escribiría un programa mínimo que usa chmod (2), pero este es más
genial

1
@Stefan: De man ld-linux.so: "ld.so [y ld-linux.so] carga las bibliotecas compartidas que necesita un programa, prepara el programa para ejecutarlo y luego lo ejecuta". ( ld.soes para a.outformatos ejecutables y ld-linux.soes para formato ELF)
Pausado hasta nuevo aviso.

1
@Stefan: El núcleo no sabe realmente cómo cargar y ejecutar ejecutables vinculados dinámicamente, porque es muy complejo y sigue el glibc, no el núcleo. ld-linux.soes una especie de híbrido ejecutable / biblioteca, un tipo de enlace estático, se ejecuta en el espacio de usuario y es responsable de cargar ejecutables vinculados dinámicamente y todas sus dependencias, y luego ejecutarlos.
Juliano

18

Utiliza python:

# python
Python> import os
Python> os.chmod("/bin/chmod",0755)

44
Y, como una frase:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos

18

Esto se basa en el hecho de que los permisos de un archivo de destino se conservan en lugar del archivo de origen cuando se copia. Estamos "tomando prestados" los permisos de ls:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod

Creo que tu primera cpnecesidad debe tener la bandera -p encendida
Riking

@Riking: No es necesario para este propósito.
Pausado hasta nuevo aviso.

Esto fue similar a la solución que se me ocurrió, pero después cpde crear el ejecutable, acabo catde chmodingresar el contenido en el archivo temporal.
SpellingD


7

setfacl -m u::rx /bin/chmod

... otorgará al propietario permisos de ejecución.

Pero, el /lib/ld-linux.so.2truco es bueno. :)


5

Esto es extraño ... Hace unos días vi algo así a través del tweet de alguien ...

http://www.slideshare.net/cog/chmod-x-chmod


Los enlaces a otros sitios no son útiles ya que el enlace se romperá en algún momento. Esto es como decirle a alguien que busque en Google la respuesta.
Phil Hannent

@ Phil Hannent: También he visto esa presentación de diapositivas, hace solo tres días, así que fue mi primer pensamiento, si el OP era uno de los solicitantes allí.
Boldewyn

Igual, acabo de ver esto en Reddit hace unos días ...
Dentrasi

4

Si está en un sistema donde /bin/chmodel enlazador dinámico no puede cargarlo:

# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod

Esto funciona en mi sistema MacOS X.


2

/ rescate / chmod 555 / bin / chmod

Creo que también podrías usar mtree.


Esta sería mi solución favorita. Desafortunadamente, no funciona con Linux.


1

crear un nuevo chmod y usarlo para el original

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod

Establecer una umask de 000 no otorgará a un archivo permiso de ejecución cuando se cree. En el mejor de los casos, obtendrá los permisos rw-rw-rw-.
Barry Brown

2
@Barry: en realidad depende del modo pasado a creat (2) / open (2) / mkdir (2) / etc. Si umask == 0 y la llamada al sistema que crea el archivo recibe 0777 para el modo, entonces el archivo tendrá los bits de ejecución activados. Por ejemplo, los enlazadores / compiladores pasan 0777 al escribir un "archivo ejecutable" (por ejemplo (umask 000;gcc -o foo foo.c), producirá un foomodo 777). Sin embargo, muchos shells (¿la mayoría?) Pasan 0666 cuando abren / crean archivos para la redirección, lo que significa que esta respuesta no funcionará en muchos shells.
Chris Johnsen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.