Сколько есть способов восстановить 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
Кто ещё знает способы?
Самый дилетантский: грузануться с live-CD и с него запустить `chmod +x /mnt/bin/chmod`
Самый простой: проставить права в mc :)
Комментарий для astur.net.ru:
Тоже способы :)
Комментарий для astur.net.ru:
Тут можно подмонтировать CD и скопировать оттуда chmod.
Это в каких таких операционках при копировании по ssh сохраняется флаг исполнения?
Комментарий для jankkhvej.blogspot.com:
А в каких не сохраняется?
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
Комментарий для Евгения Степанищева:
ОМГ, это действительно везде.
perl -e ’chmod 0755, «/bin/chmod»’
Комментарий для maxim-zotov.livejournal.com:
Как-то я забыл, что можно и ещё какими-то языками воспользоваться. :)
python -c ’import os; os.chmod(«chmod», 0755)’
Самый интересный, конечно, второй способ, остроумен, потому что не просто предлагает воспользоваться функцией chmod просто в другом языке или среде (C, perl, php, mc...), а другим принципом присвоения прав, и более надежен, так как вероятность отсутствия сети, компиляторов и интерпретаторов гораздо выше, чем отсутствия cp и cat.
Комментарий для maxim-zotov.livejournal.com:
Да, я тоже им горжусь больше всего. Собственно, когда я его придумал я и решил написать эту заметку.
busybox chmod 755 /bin/chmod
А можно объяснить нелинуксоиду, зачем первая строчка во втором методе?
Почему нельзя сразу в новый файл chmod скопировать?
Комментарий для Михаил:
Михаил, у нового файла не будет прав на исполнение, то есть chmod2 будет столь же бесполезен, как и исходный chmod. Фишка в том, что права остаются от sh, а содержимое копируется из chmod.
Комментарий для Евгения Степанищева:
В общем, суть поста понятна: есть один гениальный способ и куча очевидных :)
Всё украдено до нас :-)
http://www.slideshare.net/cog/chmod-x-chmod
Комментарий для alexeyten.ya.ru:
Фигассе. И даже тоже шелл копируют.
Комментарий для alexeyten.ya.ru:
Вот это круто:
/lib/ld-linux-x86-64.so.2 /bin/chown +x /bin/chown
И вот хорошо:
install -m 0777 chmod chmod.new
вообще это... раньше было принято ставить на системные файлики специфические аттрибуты ФС, например в этой вашей FreeBSD над системными утилитами это проделывает инсталлятор или скрипты сборки мира — man 1 chflags
В этом вашем линуксе — chattr i /bin/chmod не позволит далее моменять права по неосторожности.
кстати....
lsattr /bin/chmod
-----------------e- /bin/chmod
Не стоит(в моем случае это убунта). а зря. раньше было принято в старых система доп. аттрибуты на файлы лепить как защиту от дубомудрых одминов.
Комментарий для анонимус:
Пост совершенно не об этом. Есть конкретная задача — сброшены права на chmod, надо их восстановить. Как там получилось, совершенно неважно :)
Комментарий для анонимус:
Ну и да, про расширенные атрибуты я знаю :)
вот мне самому странно что они не применяются на файлах которые можно считать частью ОС при установке/апгрейде и тд. по определеюию ОС — они и есть ее часть...
Нашлось, что можно через mc поставить права нужные.
Комментарий для libc6.org:
Второй комментарий.
Точно, не заметил :)
По мотивам: http://groups.google.com/group/alt.sysadmin.recovery/msg/777b3992c628410a?pli=1
Комментарий для Евгения Степанищева:
Ещё придумал: