Ho appena fatto un chmod -x chmod


Risposte:


43

In Linux:

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

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


bindbn, stavo per pubblicare lo stesso link :-) ma stavo leggendo me stesso dato che sono nuovo alle cose unix / linux !!!
Rihatum,

2
In una distribuzione a 64 bit, potrebbe essere necessario utilizzare /lib64/ld-linux-x86-64.so.2invece. ldd /bin/chmoddovrebbe elencare esattamente quale linker eseguire.
goldPseudo,

Scriverei un programma minimale che utilizza chmod (2), ma è più interessante
adamo,

1
@Stefan: Da man ld-linux.so: "ld.so [e ld-linux.so] carica le librerie condivise necessarie a un programma, prepara l'esecuzione del programma e quindi lo esegue." ( ld.soè per gli a.outeseguibili di formato ed ld-linux.soè per il formato ELF.)
Messo in pausa fino a nuovo avviso.

1
@Stefan: Il kernel non sa davvero come caricare ed eseguire eseguibili collegati dinamicamente, perché è altamente complesso e segue il glibc, non il kernel. ld-linux.soè una sorta di ibrido eseguibile / libreria, una specie di link statico, viene eseguito nello spazio utente ed è responsabile del caricamento di file eseguibili collegati dinamicamente e di tutte le loro dipendenze, quindi della loro esecuzione.
Juliano,

18

Usa Python:

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

4
E, come one-liner:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos,

18

Ciò si basa sul fatto che le autorizzazioni di un file di destinazione vengono conservate anziché il file di origine quando viene copiato. Stiamo "prendendo in prestito" le autorizzazioni di ls:

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

Penso che i tuoi primi cpdebbano avere la bandiera -p
attivata

@Riking: non è necessario per questo scopo.
In pausa fino a nuovo avviso.

Questo era simile alla soluzione che mi è venuta in mente, ma dopo aver cpeseguito il file eseguibile, ho appena inserito il catcontenuto chmodnel file temporaneo.
OrtografiaD

9

Utilizzando Perl:

% perl -e 'chmod 0755, qw[/bin/chmod]'

7

setfacl -m u::rx /bin/chmod

... garantirà al proprietario l'esecuzione delle autorizzazioni.

Ma il /lib/ld-linux.so.2trucco è pulito. :)


5

È strano ... Ho visto qualcosa del genere qualche giorno fa tramite il tweet di qualcuno ...

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


I collegamenti ad altri siti non sono utili in quanto il collegamento si interromperà a un certo punto. È come dire a qualcuno di google la risposta.
Phil Hannent,

@Phil Hannent: ho visto anche quella presentazione, solo tre giorni fa, quindi è stato il mio primo pensiero, se l'OP era uno dei candidati lì.
Boldewyn,

Lo stesso, l'ho visto su Reddit pochi giorni fa ...
Dentrasi,

4

Dovresti essere su un sistema in cui /bin/chmodnon può essere caricato dal linker dinamico:

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

Funziona sul mio sistema MacOS X.


2

/ rescue / chmod 555 / bin / chmod

Penso che potresti usare anche mtree.


Questa sarebbe la mia soluzione preferita. Sfortunatamente non funziona con Linux.


1

crea un nuovo chmod e usalo per l'originale

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

L'impostazione di un umask di 000 non autorizzerà l'esecuzione di un file quando viene creato. Nella migliore delle ipotesi otterrà le autorizzazioni rw-rw-rw-.
Barry Brown,

2
@ Barry: In realtà dipende dalla modalità passata a creat (2) / open (2) / mkdir (2) / etc. Se umask == 0 e la syscall che crea il file riceve 0777 per la modalità, il file avrà i bit di esecuzione attivati. Ad esempio, i linker / compilatori passano 0777 quando scrivono un “file eseguibile” (ad es. (umask 000;gcc -o foo foo.c)Produrranno un foocon modalità 777). Tuttavia, molte (la maggior parte?) Shell passano 0666 quando aprono / creano file per il reindirizzamento, il che significa che questa risposta non funzionerà con molte shell.
Chris Johnsen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.