Je viens de faire un chmod -x chmod


Réponses:


43

Sous Linux:

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

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


bindbn, j'étais sur le point de poster le même lien :-) mais je me lisais car je suis nouveau dans les trucs unix / linux !!!
rihatum

2
Sur une distribution 64 bits, vous devrez peut-être utiliser à la /lib64/ld-linux-x86-64.so.2place. ldd /bin/chmoddevrait répertorier exactement l'éditeur de liens à exécuter.
goldPseudo

J'écrirais un programme minimal qui utilise chmod (2), mais c'est plus cool
adamo

1
@Stefan: De man ld-linux.so: "ld.so [et ld-linux.so] charge les bibliothèques partagées nécessaires à un programme, prépare le programme à s'exécuter, puis l'exécute." ( ld.soconcerne les a.outexécutables au format et le ld-linux.soformat ELF.)
pause jusqu'à nouvel ordre.

1
@Stefan: Le noyau ne sait pas vraiment comment charger et exécuter des exécutables liés dynamiquement, car il est très complexe et suit la glibc, pas le noyau. ld-linux.soest une sorte d'exécutable / bibliothèque hybride, une sorte de lien statique, s'exécute dans l'espace utilisateur et est chargé de charger les exécutables liés dynamiquement et toutes leurs dépendances, puis de les exécuter.
Juliano

18

Utilisez python:

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

4
Et, en une seule ligne:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos

18

Cela repose sur le fait que les autorisations d'un fichier de destination sont préservées plutôt que sur le fichier source lors de sa copie. Nous «empruntons» les autorisations de ls:

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

Je pense que votre premier cpbesoin d'avoir le drapeau -p
Riking

@Riking: Ce n'est pas nécessaire à cette fin.
pause jusqu'à nouvel ordre.

Ceci était similaire à la solution que j'ai trouvée, mais après avoir cpexécuté l'exécutable, je venais juste catd'en retrouver le contenu chmoddans le fichier temporaire.
SpellingD

9

Utilisation de Perl:

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

7

setfacl -m u::rx /bin/chmod

... accordera au propriétaire des autorisations d'exécution.

Mais, l' /lib/ld-linux.so.2astuce est soignée. :)


5

C'est bizarre ... J'ai vu quelque chose comme ça il y a quelques jours via le tweet de quelqu'un ...

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


Les liens vers d'autres sites ne sont pas utiles car le lien sera rompu à un moment donné. C'est comme dire à quelqu'un de google la réponse.
Phil Hannent

@Phil Hannent: J'ai aussi vu ce diaporama, il y a seulement trois jours, donc c'était ma première pensée, si l'OP était l'un des candidats là-bas.
Boldewyn

Idem, je viens de voir ça sur Reddit il y a quelques jours ...
Dentrasi

4

Si vous êtes sur un système où /bin/chmodne peut pas être chargé par l'éditeur de liens dynamique:

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

Cela fonctionne sur mon système MacOS X.


2

/ sauvetage / chmod 555 / poubelle / chmod

Je pense que vous pouvez également utiliser mtree.


Ce serait ma solution préférée. Cela ne fonctionne malheureusement pas avec Linux.


1

créer un nouveau chmod et l'utiliser pour l'original

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

La définition d'un umask de 000 ne donnera pas la permission d'exécuter un fichier lors de sa création. Il obtiendra au mieux les autorisations rw-rw-rw-.
Barry Brown

2
@Barry: Cela dépend en fait du mode passé à creat (2) / open (2) / mkdir (2) / etc. Si umask == 0 et l'appel système qui crée le fichier reçoit 0777 pour le mode, alors le fichier aura les bits d'exécution activés. Par exemple, les éditeurs de liens / compilateurs passent 0777 lors de l'écriture d'un «fichier exécutable» (par exemple (umask 000;gcc -o foo foo.c), produira un fooavec le mode 777). Cependant, de nombreux shells (la plupart?) Passent 0666 lorsqu'ils ouvrent / créent des fichiers pour la redirection, ce qui signifie que cette réponse ne fonctionnera pas sous de nombreux shells.
Chris Johnsen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.