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

17

Если я бегу:

sudo chown -R user:user /

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

fronthem
источник
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 или любой другой важный файл.

SailorCire
источник
0

если дистрибутив основан на rpm:

rpm -a --setperms
Щербак
источник