Як повернути команду chown?


17

Якщо я біжу:

sudo chown -R user:user /

Чи можу я повернути його до того, що було до того, як я його запустив?


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

Відповіді:


22

Коротше кажучи: ні.

Вам потрібно буде відновити з резервної копії. (У деяких інструментах резервного копіювання можуть бути налаштовані лише відновлення лише дозволу, інші можуть перелічити резервні файли з їх дозволами, і ви можете використовувати це для виправлення системи.)

Якщо у вас немає резервної копії, вам потрібно буде виправити все це вручну.


Після sudo chown -R user:user /цього, ймовірно, що система настільки сильно збита, що неможливо відновити її з резервної копії.
— Кіт Томпсон

1
Якщо ви не можете відновити важливі частини своїх даних користувачів у цьому сценарії з резервної копії, ваша "резервна копія" насправді не є такою. Якщо ви не можете відновити всю ОС, ви все одно зможете повторно встановити базу та відновити після резервного копіювання. У цьому випадку, швидше за все, знадобиться живий компакт-диск або мережеве завантаження, але якщо ваша стратегія резервного копіювання не зможе відновитися після цього, це насправді недостатньо добре.
— Мат

Мій попередній коментар був, ймовірно, незрозумілим. Функціонуючу систему можна відновити за допомогою самої системи. Після того, як ви зробили chownописано, цілком ймовірно , що ви не будете в змозі зробити що - небудь перед установкою всієї системи з нуля; система навіть не має rootоблікового запису і sudoне працюватиме. Напевно, варто спробувати завантажитися на однокористувацьку оболонку, але не сподівайтеся, що вона спрацює.
— Кіт Томпсон

1
Кореневий обліковий запис не зник (це все ще 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.