Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
На днях в комментариях зашёл разговор о ситуации, когда с утилиты chmod сняли бит исполнения. Эта утилита как раз предназначена для того, чтобы этот бит ставить. Теоретически получается тупиковая ситуация. Это, кстати, отличная безобидная шутка для начинающего Linux админа: # chmod -x chmod К сожалению, сейчас решение очень легко находится через поиск. А вот когда-то давно это могло стать хорошим испытанием на сообразительность. Выходов из сложившейся ситуации много. Вот несколько примеров: 1️⃣ Используем утилиту setfacl. По умолчанию её может не быть в системе, но не проблема установить. # setfacl -m u::rwx,g::rx,o::x /usr/bin/chmod 2️⃣ Можно запустить утилиту chmod, передав её явно динамическому компоновщику. В контексте данной заметки считайте компоновщик интерпретатором для программы chmod. В разных дистрибутивах он может иметь разное название и расположение. Пример для Debian 11: # /usr/lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod 3️⃣ Можно скопировать права с любого исполняемого файла и записать содержимое утилиты chmod в этот файл. Получается рабочая копия chmod. Создаём пустой файл с правами утилиты ls. # cp --attributes-only /usr/bin/ls ./new_chmod Копируем содержимое утилиты chmod в созданный файл: # cat /usr/bin/chmod > ./new_chmod Можно использовать: # ./new_chmod +x /usr/bin/chmod 4️⃣ Почти то же самое что и предыдущий вариант только проще: # install -m 755 /usr/bin/chmod ./new_chmod или так: # rsync --chmod=ugo+x /usr/bin/chmod ./new_chmod 5️⃣ Если умеете программировать на какой-то языке, то можно с его помощью вернуть бит исполнения. Пример с python: python -c "import os;os.chmod('/usr/bin/chmod', 0755)" Если знаете ещё какие-то интересные и необычные решения данной проблемы, делитесь в комментариях. #terminal #linux #юмор