Так я зробив chmod -x chmod
. Як я можу виправити цю проблему? Як повернути права на виконання chmod?
Так я зробив chmod -x chmod
. Як я можу виправити цю проблему? Як повернути права на виконання chmod?
Відповіді:
/lib64/ld-linux-x86-64.so.2
замість цього. ldd /bin/chmod
слід точно вказати, який лінкер запускати.
man ld-linux.so
: "ld.so [і ld-linux.so] завантажує спільні бібліотеки, необхідні програмі, готує програму до запуску, а потім запускає її." ( ld.so
призначений для a.out
виконання файлів формату та ld-linux.so
для формату ELF.)
ld-linux.so
є свого роду виконуваним / бібліотечним гібридом, на зразок статично пов'язаних, працює в просторі користувачів і відповідає за завантаження динамічно пов'язаних виконуваних файлів та всіх їх залежностей, а потім запуск їх.
Використовуйте python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
python -c "import os; os.chmod('/bin/chmod', 0755)"
Це спирається на той факт, що дозволи при збереженні дозволеного файлу зберігаються, а не вихідного файлу. Ми "позичаємо" дозволи ls
:
cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod
cp
має бути прапор -p
cp
того, як виконати виконуваний файл, я просто cat
додав би вміст chmod
у файл temp.
setfacl -m u::rx /bin/chmod
... надасть власнику виконання дозволів.
Але, /lib/ld-linux.so.2
хитрість акуратна. :)
Це дивно ... Я щось подібне бачив кілька днів тому через чийсь твіт ...
Я підозрюю, що це не справжнє питання: http://www.slideshare.net/cog/chmod-x-chmod
створити новий chmod і використовувати його для оригіналу
umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod
(umask 000;gcc -o foo foo.c)
, створюється foo
режим з режимом 777). Однак багато (більшість?) Оболонок проходять 0666, коли вони відкривають / створюють файли для перенаправлення, а це означає, що ця відповідь не працюватиме під багатьма оболонками.
chmod
!