Właśnie zrobiłem chmod -x chmod


Odpowiedzi:


43

W systemie Linux:

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

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


bindbn, miałem zamiar opublikować ten sam link :-), ale czytałem siebie, ponieważ jestem nowy w sprawach unix / linux !!!
rihatum

2
W 64-bitowej dystrybucji może być konieczne użycie /lib64/ld-linux-x86-64.so.2zamiast tego. ldd /bin/chmodpowinien wypisać dokładnie, który linker ma zostać uruchomiony.
goldPseudo


1
@Stefan: From man ld-linux.so: „ld.so [i ld-linux.so] ładuje biblioteki współdzielone potrzebne programowi, przygotowuje program do uruchomienia, a następnie uruchamia.” ( ld.sodotyczy a.outplików wykonywalnych formatu i ld-linux.soformatu ELF.)
Wstrzymano do odwołania.

1
@Stefan: Jądro tak naprawdę nie wie, jak ładować i wykonywać dynamicznie połączone pliki wykonywalne, ponieważ jest bardzo złożone i postępuje zgodnie z glibc, a nie jądrem. ld-linux.sojest swego rodzaju hybrydą plików wykonywalnych / bibliotek, sortowaną statycznie połączoną, działa w przestrzeni użytkownika i jest odpowiedzialny za ładowanie dynamicznie powiązanych plików wykonywalnych i wszystkich ich zależności, a następnie ich uruchamianie.
Juliano,

18

Użyj python:

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

4
I, jako jeden liniowiec:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos,

18

Opiera się to na tym, że uprawnienia do pliku docelowego są zachowywane, a nie pliku źródłowego podczas kopiowania. „Pożyczamy” uprawnienia ls:

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

Myślę, że twoja pierwsza cpmusi mieć
włączoną

@Riking: W tym celu nie jest to konieczne.
Wstrzymano do odwołania.

Było to podobne do rozwiązania, które wymyśliłem, ale po cpuruchomieniu pliku wykonywalnego po prostu catwłączyłem zawartość chmodpliku tymczasowego.
SpellingD


7

setfacl -m u::rx /bin/chmod

... przyzna właścicielowi uprawnienia do wykonywania.

Ale /lib/ld-linux.so.2sztuczka jest zgrabna. :)


5

To dziwne ... Kilka dni temu widziałem coś takiego przez czyjś tweet ...

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


Linki do innych stron nie są pomocne, ponieważ w pewnym momencie link się zepsuje. To tak, jakby powiedzieć komuś, aby znalazł odpowiedź w Google.
Phil Hannent,

@Phil Hannent: Widziałem też ten pokaz slajdów, zaledwie trzy dni temu, więc to była moja pierwsza myśl, czy OP był jednym z kandydatów.
Boldewyn

Tak samo, widziałem to na Reddit kilka dni temu ...
Dentrasi,

4

Jeśli korzystasz z systemu, w którym /bin/chmoddynamiczny linker nie może go załadować:

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

Działa to na moim systemie MacOS X.


2

/ rescue / chmod 555 / bin / chmod

Myślę, że możesz także użyć mtree.


To byłoby moje ulubione rozwiązanie. Niestety nie działa z linuksem.


1

utwórz nowy chmod i użyj go do oryginału

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

Ustawienie umask na 000 nie spowoduje przyznania pliku uprawnień do wykonania po jego utworzeniu. W najlepszym wypadku uzyska uprawnienia rw-rw-rw-.
Barry Brown,

2
@ Barry: To zależy od trybu przekazanego do creat (2) / open (2) / mkdir (2) / etc. Jeśli umask == 0 i syscall, który tworzy plik, otrzyma 0777 dla trybu, to plik będzie miał włączone bity wykonania. Na przykład linkery / kompilatory przekazują 0777 podczas zapisywania „pliku wykonywalnego” (np. (umask 000;gcc -o foo foo.c)Utworzą footryb z 777). Jednak wiele (większość?) Powłok przechodzi 0666 podczas otwierania / tworzenia plików do przekierowania, co oznacza, że ​​ta odpowiedź nie zadziała w wielu powłokach.
Chris Johnsen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.