Как восстановить потерянные метаданные разрешения в / etc?

По ошибке была выполнена команда:

sudo chmod -R 777 /etc/ 

Есть ли способ вернуть разрешения в правильном состоянии?

2 Solutions collect form web for “Как восстановить потерянные метаданные разрешения в / etc?”

Этот ответ предполагает, что у вас нет резервной копии.

Поскольку информация – метаданные разрешений – была потеряна в вашей системе, обратного пути нет без внешнего источника.

Это может быть другой Linux, в идеале тот же дистрибутив и выпуск, что и у вас.

Сначала установите права доступа, для всех каталогов 755 и для всех файлов 644. Это можно сделать в /etc с помощью следующего скрипта:

 find -type d -print0|xargs -n 500 -P 1 -0 chmod 755 find -type f -print0|xargs -n 500 -P 1 -0 chmod 644 

Во-вторых, выгрузите данные разрешения в текстовый файл в другой системе с помощью команды

 find -print 0|xargs -0 -P 1 -n 500 ls -ld|sort -k +9 > permdata_ok.txt 

Вы получите permdata.txt в удаленной системе. Сортировка нужна, позже я объясню, почему. Переместите этот файл из удаленной системы в локальную.

Сделайте тот же сценарий и в вашей локальной системе, но вместо permdata_ok.txt используйте permdata_bad.txt .

Теперь приходит хитрость. Сравните эти файлы вместе!

Команда выглядит так: diff -urNw permdata_bad.txt permdata_ok.txt . Его выходной синтаксис не будет очень красивым для вас, если вы не разработчик, но вы можете привыкнуть к нему.

Вы увидите различия в режимах файла и в файле. Если разница слишком велика, установите ее обратно вручную.

Поскольку не все файлы существуют в обеих системах, вам понадобится разумное мышление.

Если ваша система чувствительна к безопасности, лучше всего на первом шаге установить 700/600. Тогда у вас будет гораздо больше проблем, связанных с разрешениями, но это не приведет к нарушению безопасности.

Если у вас есть резервная копия, даже если она старая – используйте star :

 cd / star -xpU -meta pat=etc* < backup.tar 

Ths не восстанавливает содержимое, а только метаданные для файлов, например, владелец прав ....).

Если у вас есть вторая установка с той же версией ОС, сделайте резервную копию метаданных из этой системы, используя:

 cd / star -c -meta etc > /tmp/backup.tar 

и позже извлекать метаданные в поврежденной системе, используя:

 cd / star -xpU -meta < backup.tar 

Если это не относится к вам, вам нужно переустановить ...

См. Справочную страницу http://schilytools.sourceforge.net/man/man1/star.1.html для получения дополнительной информации.

Как упоминалось в @ dsstorefile1, копирование метаданных из другой системы будет полным решением, только если в поврежденной системе нет файлов, отсутствующих в системе ссылок, но вы можете проверить файлы в / etc / после восстановления метаданных для файлы, которые так же молоды, как скопление, но старше, чем восстановление, и все еще имеют 777.

Кстати, star также можно использовать для сравнения разрешений, поскольку star -diff позволяет сравнивать содержимое файла и все метаданные, и, что более важно, star позволяет настраивать то, что сравнивается, используя diffopts= .

Поэтому, если у вас есть резервная копия из другой подобной системы, вы можете запустить:

 cd / star -diff -v diffopts=perm pat=etc* < backup.tar 

сравнивать только разрешения. Если эта резервная копия была создана с помощью star -c -dump ... ,

 cd / star -diff -vv diffopts=perm,dir pat=etc* < backup.tar 

также перечислит файлы, которые находятся в локальной системе, но отсутствуют в резервной копии.

Linux и Unix - лучшая ОС в мире.