Więc zrobiłem chmod -x chmod
. Jak mogę rozwiązać ten problem? Jak mogę przekazać uprawnienia do wykonania chmod?
Więc zrobiłem chmod -x chmod
. Jak mogę rozwiązać ten problem? Jak mogę przekazać uprawnienia do wykonania chmod?
Odpowiedzi:
W systemie Linux:
/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod
/lib64/ld-linux-x86-64.so.2
zamiast tego. ldd /bin/chmod
powinien wypisać dokładnie, który linker ma zostać uruchomiony.
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.so
dotyczy a.out
plików wykonywalnych formatu i ld-linux.so
formatu ELF.)
ld-linux.so
jest 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.
Użyj python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
python -c "import os; os.chmod('/bin/chmod', 0755)"
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
cp
musi mieć
cp
uruchomieniu pliku wykonywalnego po prostu cat
włączyłem zawartość chmod
pliku tymczasowego.
setfacl -m u::rx /bin/chmod
... przyzna właścicielowi uprawnienia do wykonywania.
Ale /lib/ld-linux.so.2
sztuczka jest zgrabna. :)
To dziwne ... Kilka dni temu widziałem coś takiego przez czyjś tweet ...
Podejrzewam, że to nie jest prawdziwe pytanie: http://www.slideshare.net/cog/chmod-x-chmod
utwórz nowy chmod i użyj go do oryginału
umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod
(umask 000;gcc -o foo foo.c)
Utworzą foo
tryb 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.
chmod
!