Как сбросить права доступа к папкам по умолчанию в Ubuntu?

19

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

sudo chmod 777 -R /

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

sudo -i

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

Braiam
источник
Я не думаю, что Linux запоминает предыдущие настройки разрешений. Попробуйте создать новый файл и посмотрите, какие настройки разрешений он получает.
Thecoshman
Ой, подожди, я вижу, что ты там сделал. Вероятно, это ситуация переустановки. Просто сделайте резервную копию ваших данных, запишите, какие приложения вы установили. Получайте удовольствие, почему бы не попробовать 10.4! (лучшее имя когда-либо между прочим ... что это за радио значит?)
thecoshman
Смею вас найти одного человека, который не сделал этого точно: D Это очень сложная ситуация. Вы можете это исправить, попробуйте ответ Jlovi, но это потребует времени и усилий, и это будет разочаровывать. просто переустановите и покончите с этим. И никогда не используйте sudo chmod, если вы не знаете, что делаете.
Джек Майерц

Ответы:

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.

jlovi
источник
просто отличный ответ. Я указал на это в Ask Ubuntu
Private
Просто идеальное решение для меня!
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)
Иван Буттинони
источник
действительно ли debsums проверяет разрешения? Я пытался chmod a-x /bin/pingи debsums -cне сообщал об этом файле.
reox
0

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

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

инвертировать
источник
0

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

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

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

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

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

Удачи!

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

KDO
источник
0

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

slhck
источник
0

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

Svisstack
источник