Сколько есть способов восстановить chmod?

Иногда на собеседованиях спрашивают такую задачу, на соображалку: предположим вы случайно сняли права исполнения с команды chmod. Как их восстановить?

Я решил подумать сколько способов исправить эту ситуацию я знаю.

Первый способ — скопировать chmod с соседней машины при помощи scp, sshfs и т. п. Если такая машина имеется, конечно.

Способ второй:

cp /bin/sh ~/chmod2
cat /bin/chmod > ~/chmod2
sudo ~/chmod2 +x /bin/chmod
rm ~/chmod2

Третий способ (при условии, что у вас какой-то дистрибутив, использующий пакеты, у меня способ для Debian):

sudo apt-get --reinstall install `dpkg -S /bin/chmod | cut -f1 -d:`

Способ четвёртый:

gcc -x c - <<CHMOD
#include <sys/stat.h>
main(){chmod("/bin/chmod", S_IXUSR | S_IXGRP | S_IXOTH);}
CHMOD

sudo ./a.out
rm a.out

Кто ещё знает способы?

Читайте также

Запись в NTFS средствами Mac OS X
Как оказалось, использование этого небезопасно, используйте только если нет другого выхода. Как известно пользователям «маков», Mac OS X умеет монтировать диски с файловой системой NTFS только на чтение.
2011
Антипаттерн: useless cat
Есть такой антипаттерн программирования в командной строке как useless cat. Переводится не «бесполезная кошка» (хотя для смеха можно переводить и так), а как «бесполезная [команда] cat».
2013

Комментарии 28

Евгений Степанищев (bolknote.ru) автор № 4

Комментарий для astur.net.ru:

Самый дилетантский: грузануться с live-CD и с него запустить `chmod +x /mnt/bin/chmod`

Тут можно подмонтировать CD и скопировать оттуда chmod.

jankkhvej (jankkhvej.blogspot.com) № 5
Это в каких таких операционках при копировании по ssh сохраняется флаг исполнения?
Евгений Степанищев (bolknote.ru) автор № 6
А в каких не сохраняется?

dev ~ $ scp bolk@localhost:/bin/chmod /tmp/chmod
bolk@localhost's password:
chmod 100% 59KB 58.6KB/s 00:00
dev ~ $ ls -l /tmp/chmod
-rwxr-xr-x 1 bolk users 60000 2011-03-04 15:56 /tmp/chmod
maxim-zotov (maxim-zotov.livejournal.com) № 10
Самый интересный, конечно, второй способ, остроумен, потому что не просто предлагает воспользоваться функцией chmod просто в другом языке или среде (C, perl, php, mc…), а другим принципом присвоения прав, и более надежен, так как вероятность отсутствия сети, компиляторов и интерпретаторов гораздо выше, чем отсутствия cp и cat.
Евгений Степанищев (bolknote.ru) автор № 11
Комментарий для maxim-zotov.livejournal.com:

Да, я тоже им горжусь больше всего. Собственно, когда я его придумал я и решил написать эту заметку.
Михаил № 13
А можно объяснить нелинуксоиду, зачем первая строчка во втором методе?
Почему нельзя сразу в новый файл chmod скопировать?
astur (astur.net.ru) № 14
Михаил, у нового файла не будет прав на исполнение, то есть chmod2 будет столь же бесполезен, как и исходный chmod. Фишка в том, что права остаются от sh, а содержимое копируется из chmod.
Lynn «Кофеман» (alexeyten.ya.ru) № 16
Всё украдено до нас :-)
http://www.slideshare.net/cog/chmod-x-chmod
анонимус № 20
вообще это… раньше было принято ставить на системные файлики специфические аттрибуты ФС, например в этой вашей FreeBSD над системными утилитами это проделывает инсталлятор или скрипты сборки мира — man 1 chflags

В этом вашем линуксе — chattr i /bin/chmod не позволит далее моменять права по неосторожности.
кстати….
lsattr /bin/chmod
-----------------e- /bin/chmod

Не стоит(в моем случае это убунта). а зря. раньше было принято в старых система доп. аттрибуты на файлы лепить как защиту от дубомудрых одминов.
Евгений Степанищев (bolknote.ru) автор № 21
Пост совершенно не об этом. Есть конкретная задача — сброшены права на chmod, надо их восстановить. Как там получилось, совершенно неважно :)
анонимус № 23
Ну и да, про расширенные атрибуты я знаю :)

вот мне самому странно что они не применяются на файлах которые можно считать частью ОС при установке/апгрейде и тд. по определеюию ОС — они и есть ее часть…