Я щойно зробив 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.