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)
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:
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.
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:
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.
chmod
!Respuestas:
En Linux:
http://www.slideshare.net/cog/chmod-x-chmod
fuente
/lib64/ld-linux-x86-64.so.2
en su lugar.ldd /bin/chmod
debería enumerar exactamente qué enlazador ejecutar.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.so
es paraa.out
formatos ejecutables yld-linux.so
es para formato ELF)ld-linux.so
es 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.Utiliza python:
fuente
python -c "import os; os.chmod('/bin/chmod', 0755)"
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
:fuente
cp
necesidad debe tener la bandera -p encendidacp
de crear el ejecutable, acabocat
dechmod
ingresar el contenido en el archivo temporal.Usando Perl:
fuente
setfacl -m u::rx /bin/chmod
... otorgará al propietario permisos de ejecución.
Pero, el
/lib/ld-linux.so.2
truco es bueno. :)fuente
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
fuente
Si está en un sistema donde
/bin/chmod
el enlazador dinámico no puede cargarlo:Esto funciona en mi sistema MacOS X.
fuente
/ rescate / chmod 555 / bin / chmod
Creo que también podrías usar mtree.
fuente
Sospecho que esta no es una pregunta real: http://www.slideshare.net/cog/chmod-x-chmod
fuente
crear un nuevo chmod y usarlo para el original
fuente
(umask 000;gcc -o foo foo.c)
, producirá unfoo
modo 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.