Как восстановить / восстановить Ubuntu 10.04 после 'sudo chmod / 777'


12

Смотрите также:
Почему «chmod -R 777 /» разрушителен?

Я изменил права доступа к файлам рекурсивно в корневой каталог /, выполнив sudo chmod -R / 777, и после того, что моя система не загружается (я получаю много «разрешения отказано» ошибки).

Пожалуйста помоги.


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

Следуйте этому внимательно: откройте в режиме восстановления> Mount Drive> Откройте интерактивную оболочку> cd на смонтированный жесткий диск (для меня это был / mnt / [каталог])> chmod -R 755 ./**> #cd ./etc/ SSH / #chmod 600 модулей #chmod 644 ssh_config #chmod 644 ssh_host_dsa_key.pub #chmod 644 ssh_host_key.pub #chmod 644 ssh_host_rsa_key.pub #chmod 600 ssh_host_dsa_key #chmod 600 ssh_host_key #chmod 600 ssh_host_rsa_key #chmod 640 sshd_config
Smit Patel

У меня недостаточно репутации, чтобы опубликовать ответ в StackExchange, но я хотел помочь вам.
Смит Патель

Ответы:


23

Вы смотрите на безнадежное дело. Сохраните необходимые данные и переустановите операционную систему.


Ага. Количество времени, которое вы тратите на это, будет сумасшедшим, и вы никогда не узнаете наверняка, что поняли это правильно. Начните чистить, восстановить ваши данные из резервной копии.
ThatGraemeGuy

1
Это один из тех шагов назад и учиться у него вещам. Наиболее важными областями являются содержимое вашей домашней папки, внесенные в нее изменения конфигурации /etc, /var/wwwсодержимое веб-сервера и базы данных. Возьмите другой жесткий диск, включите его в качестве основного и установите. Это сохраняет ваш другой диск в качестве резервной копии, пока вы не сможете перенести его.
Fiasco Labs

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

5

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

Редактировать: я на самом деле быстро взглянул на скрипт, и он выглядит так, как будто ему не хватает немного магии, которая переходит от PERMS к MODE, например, dpkg -c выдает, например, «-rw-r - r--», но вы хотите 0644, я сейчас на работе, поэтому я не уверен, что у меня есть время, чтобы сделать конвертацию в этот момент, но я могу вернуться позже, если никто не вмешался, чтобы добавить этот бит.

Существует скрипт здесь , который выглядит интересно

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms()
{
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=$1
    OWN=`echo $2 | /usr/bin/tr '/' ':'`
    PATHNAME=$3

    echo -e "$CHOWN $OWN $PATHNAME"
    #`$CHOWN $OWN $PATHNAME`
    #`$CHMOD $MODE $PATHNAME`

}

for PACKAGE in $PACKAGES;
do
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
        changePerms $FILE_DETAILS
    done
done

это касается также файлов 04555?
Кольцо Ø

4

Это можно вернуться из такой ситуации грязной , без переустановки системы. Что ж, точнее, запуск новой новой системы либо с USB-ключа, либо из Virutal Box (или около того), если у вас есть система с двойной загрузкой.

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

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

MPOINT = / монтирование / убунту

Сначала я смонтировал свои файловые системы следующим образом (не забудьте создать точки монтирования): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

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

найти / etc / usr / bin -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
(...)

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

найти / 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 были одинаковыми в обеих системах, но для пользователей и групп, связанных с системой, это не должно быть проблемой.

Rk:

Для этого важно синхронизировать установочный диск с версией, которую вы используете, или, по крайней мере, работать с текущей версией Ubuntu. Теперь у меня есть эти команды в 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" {}


4

Я изменил скрипт сверху, и он выглядит так:

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms() {
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g'  -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'`
    PERMS=`echo ${PERMS:1}`
    OWN=`echo $2 | /usr/bin/tr '/' '.'`
    PATHNAME=$3
    PATHNAME=`echo ${PATHNAME:1}`

#    echo -e "CHMOD: $CHMOD $PERMS $PATHNAME"    

#    result=`$CHOWN $OWN $PATHNAME`
#    if [ $? -ne 0 ]; then
#   echo -e $result
#        exit 123;
#    fi

    echo -e "CHOWN: $CHMOD $PERMS $PATHNAME"
    result=`$CHMOD $PERMS $PATHNAME`
    if [ $? -ne 0 ]; then
    echo -e $result
    fi
}

for PACKAGE in $PACKAGES;
do
    if [ -d $PACKAGE ]; then
    continue;
    fi
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        #FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
    echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line;
        do
            changePerms $line
        done
        #changePerms $FILE_DETAILS
    done
done

3

Согласитесь с blueben, просто переустановка может быть быстрее, чем анализ того, какой файл / каталог требует какого разрешения. Но если переустановка не вариант, вот идея:

  1. Установить Ubuntu по умолчанию на другую машину
  2. Запустите эту команду, чтобы получить разрешения для каждого файла / каталога в системе: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Скопируйте файл chmod.shна компьютер с неправильными разрешениями
  4. Выполнить этот файл chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Надеюсь, что большинство вещей работает (не все будет работать, я верю)

2

ERRATUM к моему сообщению, опубликованному от имени пользователя user100740: для поддержки ссылок объединенная команда:

/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

2

Если вы все еще можете запустить /usr/sbin/synaptic, это часто исправимо.

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

Это может не исправить все, хотя.
Другое дело, если вы зайдете /var/cache, вы можете позвонить dpkg -x <package name> /для каждого установленного пакета, а затем позвонить dpkg --reconfigure -a. Кроме того, если вы используете Ubuntu, вы можете выполнить обновление dist, которое часто исправляет множество ошибок (при условии, что вы еще не в последней версии). Обычно, когда я пытаюсь исправить ошибку, подобную этой, я пробую эти простые исправления, и если они не просто заставляют ее работать снова, то пришло время переустановить.


-2

загрузиться с live CD. затем запустите shell, затем sudo -s. Затем chmod 777 / *, затем chmod 600 / etc / passwd. ядро будет паниковать, если инициализация завершится неудачно, что произойдет, если скрипты / lib / init не будут выполняться. загрузитесь в однопользовательском режиме для Lilo Linux 1 и запустите скрипт user102453 выше. Это заставляет систему загружаться в ответ. Все еще нужно запустить X.


3
Вау, это довольно ужасная идея, которую ты имеешь там.
HopelessN00b

-3

Установка разрешения / 755 у меня сработала.

Так что проверьте сначала с

root@ubuntu:/# cd /
root@ubuntu:/# ls -ld

Разрешения должны быть «drwxr-xr-x» (755).


1
Это не относится к рекурсивной части вопроса.
Kasperd

Нет, и с 4755 2755 и 6755 это тоже не помогает. Если это был просто / usr (это часто так), вы можете рекурсивно ls -al подобную систему и исключить 755, это может оставить список из менее чем 1000 файлов, с которыми можно иметь дело вручную. Конечно, src и заголовки не имеют большого значения.
Маккензм
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.