Я щойно зробив chmod -x chmod


Відповіді:


43

У Linux:

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

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


bindbn, я збирався опублікувати те саме посилання :-), але я читав себе, коли я новачок у Unix / Linux Linux !!!
rihatum

2
У 64-бітному дистрибутиві, можливо, вам доведеться використовувати /lib64/ld-linux-x86-64.so.2замість цього. ldd /bin/chmodслід точно вказати, який лінкер запускати.
золотоПсевдо

Я б написав мінімальну програму, яка використовує chmod (2), але це крутіше
adamo

1
@Stefan: Звідки man ld-linux.so: "ld.so [і ld-linux.so] завантажує спільні бібліотеки, необхідні програмі, готує програму до запуску, а потім запускає її." ( ld.soпризначений для a.outвиконання файлів формату та ld-linux.soдля формату ELF.)
Призупинено до подальшого повідомлення.

1
@Stefan: Ядро насправді не знає, як завантажувати та виконувати динамічно пов'язані виконувані файли, тому що воно дуже складне і слідкує за glibc, а не ядром. ld-linux.soє свого роду виконуваним / бібліотечним гібридом, на зразок статично пов'язаних, працює в просторі користувачів і відповідає за завантаження динамічно пов'язаних виконуваних файлів та всіх їх залежностей, а потім запуск їх.
Джуліано


18

Це спирається на той факт, що дозволи при збереженні дозволеного файлу зберігаються, а не вихідного файлу. Ми "позичаємо" дозволи ls:

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

Я думаю, що у вас вперше cpмає бути прапор -p
Riking

@ Riking: Це не потрібно для цієї мети.
Призупинено до подальшого повідомлення.

Це було схоже на рішення, яке я придумав, але після cpтого, як виконати виконуваний файл, я просто catдодав би вміст chmodу файл temp.
ПравописD


7

setfacl -m u::rx /bin/chmod

... надасть власнику виконання дозволів.

Але, /lib/ld-linux.so.2хитрість акуратна. :)


5

Це дивно ... Я щось подібне бачив кілька днів тому через чийсь твіт ...

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


Посилання на інші сайти не є корисними, оскільки посилання в якийсь момент буде розірвано. Це як сказати комусь відповісти на гугл.
Філ Ханнент

@Phil Hannent: Я також бачив це слайд-шоу лише три дні тому, тому це було моєю першою думкою, якщо ОП був одним із претендентів там.
Болдевін

Це ж, щойно побачив це на Reddit кілька днів тому ...
Dentrasi

4

Якщо ви перебуваєте в системі, де /bin/chmodдинамічний лінкер не може бути завантажений:

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

Це працює в моїй системі MacOS X.


2

/ рятувальний / chmod 555 / бін / chmod

Я думаю, ви також можете використовувати mtree.


Це було б моє улюблене рішення. На жаль, він не працює з Linux.


1

створити новий chmod і використовувати його для оригіналу

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

Встановлення umask 000 не дасть дозволу на виконання файлу при його створенні. Це, в кращому випадку, отримає дозволи rw-rw-rw-.
Баррі Браун

2
@Barry: Це фактично залежить від режиму, який передається create (2) / open (2) / mkdir (2) / тощо. Якщо umask == 0 і системному виклику, який створює файл, задано режим 0777, то у файлі буде включено біти виконання. Наприклад, лінкери / компілятори передають 0777, коли виписують "виконуваний файл" (наприклад (umask 000;gcc -o foo foo.c), створюється fooрежим з режимом 777). Однак багато (більшість?) Оболонок проходять 0666, коли вони відкривають / створюють файли для перенаправлення, а це означає, що ця відповідь не працюватиме під багатьма оболонками.
Кріс Джонсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.