Восстановить разрешение исполняемого файла для команды Chmod в Linux
Я наткнулся на интересную ветку обсуждения в Твиттере. Речь идет о вопросе на собеседовании. Вопрос в следующем: Что делать, если разрешение на выполнение команды Chmod случайно удалено? Как вы, возможно, знаете, Chmod (расшифровывается как Команда Changeange mode) используется для установки или изменения прав доступа к файлу или каталогу в Unix-подобных системах. Поэтому, если разрешение на выполнение chmod удалено, вы не сможете назначать разрешения каким-либо программам, включая саму команду chmod. Вы сидите на собеседовании, и интервьюер только что задал этот вопрос. Итак, как восстановить разрешение на выполнение команды chmod в Linux?
«Я скопирую двоичный файл chmod из других систем?» — можете ответить вы. Что ж, вам дана только одна система. Таким образом, вы не можете скопировать двоичный файл chmod из других систем. Вы можете ответить еще раз: "Я установлю бит выполнения из Perl.". Интервьюер говорит: «На вашем компьютере нет переводчиков». Также нет подключения к Интернету/телефону, поэтому вы также не можете ни к кому обратиться за помощью. Как в такой тяжелой ситуации восстановить разрешение исполняемого файла команды Chmod? Если вы уже знаете ответ, то большое спасибо за ваш интеллект. Если вы не являетесь критическим мыслителем (как я!), пожалуйста, читайте дальше.
Внимание! Не пытайтесь удалить разрешение на выполнение команды chmod в производственной системе. Попробуйте это на виртуальной машине или тестовой машине. Это просто в образовательных целях.
Что делать, если вы случайно удалили разрешение на исполняемый файл команды Chmod?
Допустим, вы случайно запустили следующую команду:
chmod -x $(which chmod)
Здесь флаг -x
удалит разрешение на выполнение данной программы. В нашем случае это chmod
.
Вы очень любопытны и действительно не знаете, что сделает эта команда. Теперь вы потеряли разрешение на выполнение команды chmod. Невозможно снова восстановить разрешение исполняемого файла chmod. Если вы попытаетесь установить разрешение, выполните следующую команду:
chmod +x $(which chmod)
Вы получите следующее сообщение об ошибке:
bash: /usr/bin/chmod: Permission denied
Удалить исполняемое разрешение команды chmod в Linux
Даже если вы выйдете из системы и попытаетесь от других пользователей sudo, вы не сможете назначить разрешения с помощью команды chmod
:
sudo chmod +x $(which chmod)
sudo: chmod: command not found
Как восстановить исходные разрешения chmod? Что ж, это проще, чем вы думаете.
Восстановить разрешение на исполняемый файл для команды Chmod в Linux
Есть несколько способов восстановить разрешение на выполнение chmod. Здесь я привел 7 методов.
Способ 1. Скопируйте содержимое двоичного файла chmod в другие рабочие двоичные файлы.
Помните, что мы удалили разрешение на выполнение только команды chmod
, но не разрешения других команд. Верно? Да! Другие команды по-прежнему имеют разрешение на выполнение. Итак, мы можем решить эту проблему, скопировав содержимое команды chmod
в любую другую исполняемую команду, например «mkdir
», и восстановив chmod
разрешение исполняемого файла обратно в исходное состояние.
Перед копированием давайте создадим резервную копию команды mkdir
с помощью команды:
cp /usr/bin/mkdir /usr/bin/mkdir.bak
Затем скопируйте содержимое /usr/bin/chmod в /usr/chmod/mkdir с помощью команды «cat
»:
cat /usr/bin/chmod > /usr/bin/mkdir
Теперь команда mkdir
стала командой chmod
(поскольку мы скопировали содержимое chmod в двоичный файл mkdir).
А затем восстановите разрешение исполняемого файла фактического двоичного файла chmod с помощью команды:
mkdir +x /usr/bin/chmod
Альтернативно вы можете скопировать содержимое mkdir обратно в двоичный файл chmod:
mv /usr/bin/mkdir /usr/bin/chmod
Наконец, восстановите исходную команду mkdir
из резервной копии:
mv /usr/bin/mkdir.bak /usr/bin/mkdir
Восстановить разрешение исполняемого файла для команды chmod в Linux
Сделанный! Мы успешно восстановили разрешение на выполнение команды chmod
.
Проверьте, восстановлены ли права исполняемого файла с помощью команды «ls
»:
ls -l /usr/bin/chmod
Или,
ls -l $(which chmod)
-r-xr-xr-x 1 root root 63864 May 27 07:16 /usr/bin/chmod
Обратите внимание на буквы «x
» в приведенном выше выводе. Это указывает на разрешение на выполнение.
Вы также можете проверить это, назначив разрешения на исполняемый файл любым другим программам с помощью chmod, как показано ниже:
chmod +x ostechnix.sh
ls -l
total 0
-rwxr-xr-x 1 root root 0 May 27 07:43 ostechnix.sh
Это самый простой метод, поскольку вам не нужно ничего запоминать. Мы просто скопировали содержимое chmod в другие команды с помощью команды cat, а затем восстановили разрешение на выполнение.
Я тестировал его в серверной версии Ubuntu 20.04. В других дистрибутивах Linux двоичный файл chmod может быть доступен в каталоге /bin/
. Вы можете найти двоичное расположение chmod с помощью следующей команды:
which chmod
Однако это не только путь. Я быстро поискал в Google и нашел еще несколько методов. Возможно, вам придется запомнить следующие команды.
Способ 2. Использование команды cp
Это еще один способ восстановить разрешение исполняемого файла для chmod.
В этом методе мы используем команду «cp
» для копирования атрибутов:
cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod
Способ 3 — использование компоновщика/загрузчика GNU (ld)
В этом методе вы можете напрямую запустить загрузчик «ld» и передать ему команду, которую хотите запустить, как показано ниже:
/lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod
Если вы используете 32-битные системы, команда будет такой:
/lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod
Путь к загрузчику может сильно зависеть от используемого вами дистрибутива Linux. Вышеуказанные команды предназначены для Ubuntu и ее производных. В других дистрибутивах путь может быть другим:
/lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod
Способ 4 — использование setfacl
Мы можем восстановить разрешения исполняемого файла chmod с помощью команды «setfacl
».
Сначала измените ACL двоичного файла chmod для пользователя с разрешениями на чтение и выполнение:
setfacl -m u::rx /usr/bin/chmod
Затем восстановите исходные разрешения chmod:
chmod +x $(which chmod)
Наконец, удалите все записи ACL chmod. Это необязательно.
setfacl -b /usr/bin/chmod
Если команда setfacl
недоступна, установите пакет «acl». Например, запустите следующую команду, чтобы установить acl в Debian, Ubuntu и их производных:
apt install acl
Способ 5 — использование rsync
Rsync предназначен не только для копирования или резервного копирования файлов и каталогов между системами. Его также можно использовать для назначения разрешений для файлов.
Сначала давайте скопируем двоичный файл chmod в папку /tmp
, назначив разрешения на выполнение всем, то есть пользователям, группам и другим:
rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x
Затем проверьте, назначено ли chmod разрешение на исполняемый файл:
ls -l /tmp/chmod
Пример вывода:
-r-xr-xr-x 1 root root 63864 May 27 10:01 /tmp/chmod
Если разрешения в порядке, просто перезапишите исходный файл файлом /tmp/chmod:
mv /tmp/chmod /usr/bin
Способ 6 — использование Busybox
В некоторых последних дистрибутивах Linux по умолчанию установлен Busybox. На справочной странице Busybox:
BusyBox объединяет миниатюрные версии многих распространенных утилит UNIX в один небольшой исполняемый файл. Он предоставляет минималистскую замену большинству утилит, которые вы обычно найдете в GNU coreutils, util-linux и т. д. Утилиты в BusyBox обычно имеют меньше возможностей, чем их полнофункциональные собратья GNU; однако включенные параметры обеспечивают ожидаемую функциональность и ведут себя очень похоже на свои аналоги GNU.
Чтобы восстановить разрешение на выполнение Chmod с помощью busybox, запустите:
busybox chmod +x /usr/bin/chmod
Метод 7 — Использование Perl
На тот случай, если Perl доступен в вашей системе, вы можете исправить разрешения на выполнение Chmod с помощью команды:
perl -e 'chmod 0755, "/usr/bin/chmod"'
Заключение
Как видите, это тривиальная проблема, которую могут легко решить умные пользователи Linux. Если вы начинающий или средний пользователь Linux, вы, вероятно, никогда этого не поймете. Подобные вопросы можно задавать, чтобы проверить присутствие духа интервьюируемого и его нестандартное мышление. Благодаря вышеупомянутой теме в Твиттере я сегодня узнал кое-что полезное. Надеюсь, это будет полезно и вам.
Связанное чтение:
- Как найти файлы на основе их разрешений в Linux
- Как скопировать файлы и одновременно изменить владельца и разрешения