Поиск по сайту:

Восстановить разрешение исполняемого файла для команды 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
  • Как скопировать файлы и одновременно изменить владельца и разрешения

Статьи по данной тематике