19

Я недавно набрал команду

sudo chmod 777 -R /

после этого некоторые вещи, такие как

sudo -i

не работают нормально. Так что мне интересно, если есть какой-нибудь способ, которым я мог бы сбросить разрешения для папки в их исходное состояние?

6 ответов6

17

Можно вернуться из этой грязной ситуации.

Я снова запустил такой же вопрос (какая-то ошибка в сценарии, который я писал) и решил ее, но вам нужно обратиться за помощью к эксперту. Будьте очень осторожны!

Во-первых, мою ситуацию было проще разрешить, потому что у меня была система с двойной загрузкой (Ubuntu и моя старая установка Fedora), но запуск ОС с CD/DVD или USB-ключа должен делать то же самое.

MPOINT=/mount/ubuntu

Сначала я смонтировал свои файловые системы следующим образом (не забудьте создать точки монтирования):

mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home

Затем я выполнил следующую команду (моя проблема была только в нескольких - критических - каталогах), чтобы скопировать разрешения из запущенной системы в грязную (фактически, в моем случае я установил систему Ubuntu в Virtual Box под Fedora и получил там разрешения)

find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh

И тогда я запустил скрипт restoreperms.sh.

Я снова смог загрузиться на Ubuntu.

Содержимое restoreperms.sh будет примерно таким:

(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)

Я не тестировал его, но он должен работать и для владельцев, и для групп владельцев. Что-то вроде:

find /etc /usr /bin -exec stat --format 'chown %U:%G ${MPOINT}%n' {} \; > /tmp/restoreperms.sh^

(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)

Конечно, вы должны позаботиться о том, чтобы UID и GID были одинаковыми в обеих системах, но для пользователей и групп, связанных с системой, это не должно быть проблемой.

Редактировать:

Кроме того, настройка владельца обнуляет флаги SGID и SUID, что вызывает странные проблемы (например, вы не сможете выполнить sudo, если у вас нет разрешения 4755). Вы должны и должны устанавливать права только ПОСЛЕ настройки владельцев. СОХРАНИТЕ полную информацию о правах доступа к файлам вместе с информацией о владельце.

Rk:

  1. Для этого важно синхронизировать установочный диск с версией, которую вы используете, или, по крайней мере, работать с текущей версией Ubuntu.
  2. Теперь у меня есть эти команды в cronjob, которые выполняются каждый день (могут быть недели), чтобы сохранить эту информацию. Это облегчит решение в следующий раз, но, разумеется, так как у меня сейчас, это никогда не повторится. ;-) Что-то вроде этого:

    0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2

    0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2

Правильная (комбинированная) команда больше похожа на:

`/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2`

Обратите внимание, что для учета скобок в именах файлов (например, в локалях, например) может потребоваться дополнительная осторожность, и что chown может молча сбрасывать биты setuid и setgid, установленные chmod. В последнем случае, который сломает, скажем, /bin /su и /usr /bin /sudo, вам может потребоваться поменять местами приведенные выше инструкции exec.

2

После восстановления sudo или выбора режима восстановления при загрузке

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

со страницы руководства:

apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)

Переустанавливает пакеты с измененными файлами

или ограничен определенным путем, например: /usr:

apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/usr ) | cut -d : -f 1 | sort -u)

или ограничен несколькими наборами пути, например: /sbin /etc /var

apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/etc -e ^/sbin -e ^/var  ) | cut -d : -f 1 | sort -u)
0

Вы не можете отменить операцию chmod ; по крайней мере, не в смысле отката к предыдущей настройке, к которой призывает эта ситуация.  Можно утверждать, что вы можете отменить операцию chmod по chmod ИНГ каждый файл и каталог обратно в исходный режим - но они не все равно ты; Определение оригинальных режимов сложно (как обсуждалось в других ответах).

0

Всегда смотрите, что вы запускаете как sudo.

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

0

Вау, ты убил это. Он мертв! Попробуйте войти в систему и использовать компьютер в качестве пользователя root (поскольку вы его включили), а затем измените членство в группе пользователей root. Это может или не может работать, потому что я никогда не пробовал это раньше, но это стоит попробовать.

0

Насколько я знаю, только пакеты System V и RPM предлагают команду для восстановления прав доступа к файлам. В System V (Solaris) это pkgchk, с RPM это rpm --setperms.

К сожалению, похоже, что для пакетов Debian / Ubuntu такой команды не существует, но я могу ошибаться.

Но даже с помощью этих команд не является простой задачей вернуть вашу систему в нормальное состояние, и, восстановив ее, вы можете легко нанести новый вред вашей системе - если вы не будете осторожны.

Кроме того, что сказал Иосиф, вы не первый, и вы не будете последним, кто введет такую команду. Но сама по себе идея изменить права доступа к файлам на 777 в системе Unix является ярким свидетельством того, что вы не очень опытны с такой системой. Лучшее, что вы можете сделать в этой ситуации, - это сделать резервную копию того, что вам понадобится снова (домашние каталоги, файлы конфигурации, почтовые файлы?), И попробовать новую установку.

И вы должны быть очень, очень осторожны, когда восстанавливаете свои - поврежденные - резервные файлы.

Удачи!

PS: мне просто интересно, какую проблему вы хотели решить?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .