Как отменить команду chown?


17

Если я бегу:

sudo chown -R user:user /

Могу ли я вернуть его к тому, что было до запуска?


1
Так же, как предупреждение для других: следующая команда sudo chown -R user:user ..может иметь тот же эффект, что и упомянутая здесь, если вы находитесь на один уровень ниже корня файловой системы. Не пытайтесь делать что-то подобное.
— passerby51

Ответы:


22

Короче говоря: нет.

Вам нужно будет восстановить из резервной копии. (Некоторые инструменты резервного копирования могут иметь параметры только для восстановления только разрешений, другие могут отображать файлы резервных копий с их разрешениями, и вы можете использовать это для исправления вашей системы.)

Если у вас нет резервной копии, вам нужно все исправить вручную.


После sudo chown -R user:user /этого вполне вероятно, что система настолько плохо подключена, что вы не сможете восстановить ее из резервной копии.
— Кит Томпсон,

1
Если вы не можете восстановить важные части ваших пользовательских данных в этом сценарии из резервной копии, ваша «резервная копия» на самом деле не одна. Если вы не можете восстановить всю ОС, вы все равно сможете переустановить базу и затем восстановить ее из резервной копии. В этом случае, скорее всего, понадобится загрузка с живого компакт-диска или загрузка по сети, но если ваша стратегия резервного копирования не может восстановиться после этого, она недостаточно хороша.
— Мат

Мой предыдущий комментарий был, вероятно, неясным. Работающая система может быть восстановлена ​​с помощью самой системы. После того, как вы сделали chownописано, вполне вероятно , что вы не будете в состоянии сделать что - либо перед установкой всей системы с нуля; система даже не имеет rootучетной записи и sudoне будет работать. Вероятно, стоит попробовать загрузиться с однопользовательской оболочки, но не ожидайте, что она будет работать.
— Кит Томпсон

1
Учетная запись root не исчезла (все равно UID 0); он просто больше не владеет файлами, но root в любом случае обходит обычные проверки прав доступа. Независимо от того , sudoили даже suбудет продолжать функционировать , когда все его соответствующие файлы принадлежат userдругое дело (вероятно , не потому , что среди прочего бит SUID на ехе пропадут).
— jw013

6

Только если вы знаете пользователя и группу владельцев каждого файла и каталога в вашем /каталоге.

Даже тогда вы уже потеряли владение критически важными системными файлами, которые должны принадлежать пользователю root, включая sudoкоманду. Возможно, вам понадобится смонтировать жесткий диск в другой системе - и помните, что другая система, скорее всего, не будет иметь тех же сопоставлений UID и GID, что и только что скопированная.

Сделайте копию всего жесткого диска, если можете, затем переустановите операционную систему. После того, как вы это сделаете, вы можете попробовать скопировать файлы обратно во вновь стёртую систему и восстановить их права собственности. Вы, вероятно, можете предположить (хотя и не на 100% достоверно), что все находящееся /home/fooв собственности принадлежит пользователю foo, и что каждый файл почтового спула /var/mailпринадлежит соответствующему пользователю (если у вас есть электронная почта в системе). Скорее всего, вы можете обойтись без восстановления большинства файлов, которые не находятся под /home, в зависимости от того, что вы сделали с системой.

А затем начните культивировать привычку перепроверять любую команду, под которой вы работаете, sudo прежде чем ударить Enter.


6

Если ваш дистрибутив основан на RPM, вы можете восстановить ТОЛЬКО файлы, установленные пакетами rpm.

Чтобы восстановить все разрешения пакета:

rpm --setperms -a

Для восстановления всего владельца пакета (пользователь / группа):

rpm --setugids -a

Если -a не запускается, вы можете выполнить цикл bash:

Для разрешений:

for x in $(rpm -qa); do rpm --setperms $x; done

Для владельца:

for x in $(rpm -qa); do rpm --setugids $x; done

Извлечено из: http://www.sysadmit.com/2016/10/linux-restaurar-permisos-de-un-paquete.html


1

Вы можете сохранить текущие версии, а затем проанализировать их, чтобы отменить, используя опцию -v.

chown -R nobody:nobody -v /tmp/some_file > /tmp/chown.log
cat /tmp/chown.log

Содержание будет:

changed ownership of `/tmp/some_file' from me:users to nobody:nobody

Используя ваш любимый язык сценариев и регулярные выражения, вы можете выполнить болезненный процесс их возврата (если необходимо).

Я настоятельно рекомендую не делать рекурсивный переход на /, так как вы выставите / etc / shadow или любой другой важный файл.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.