Як відновити / відновити 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, але я хотів допомогти вам.
Smit Patel

Відповіді:


23

Ти дивишся на втрачену справу. Збережіть потрібні вам дані та перевстановіть операційну систему.


Так. Кількість часу, який ви витратите на це, буде шаленим, і ви ніколи не дізнаєтесь напевно, що все зрозуміли правильно. Почніть чистити, відновіть ваші дані з резервного копіювання.
ThatGraemeGuy

1
Це один із тих кроків назад і вчитися на цьому речах. Ваші найважливіші області - це вміст домашньої папки, зміни в конфігурації /etc, /var/wwwвміст веб-сервера та бази даних. Візьміть інший жорсткий диск, увімкніть його як основний та встановіть. Це зберігає ваш інший диск як резервне копіювання, поки ви не зможете його передати.
Лабораторії Фіаско

Я зробив те ж саме (і, так, я знаю краще) і спробував кілька ідей тут, але мені знадобиться тижнів, щоб повернути машину в пристойний стан. Замість цього спробуйте створити резервну копію даних та перевстановити 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 / ubuntu

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

Потім я запустив таку команду (моя проблема була лише в декількох - критичних - каталогів), щоб скопіювати дозволи на працюючу систему в безладний (адже в моєму випадку я встановив систему ubuntu у Virtual Box під Fedora і отримали дозволи там):

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

А потім я запустив скрипт Restoperms.sh.

Я знову зміг завантажитися на ubuntu.

Вміст Restoperms.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 були однаковими для обох систем, але для користувачів та груп, пов’язаних із системою, це не повинно бути проблемою.

Rk:

Важливим для цього є збереження встановленого диска синхронізованим із використовуваною версією або принаймні робота з поточною версією ubuntu. Тепер я маю ці команди на кроні, що працює щодня (може бути тижнями), щоб зберегти цю інформацію. Це полегшить рішення наступного разу, але, звичайно, як це я маю зараз, воно більше ніколи не повториться. ;-) Щось на зразок цього:

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

EDIT: для підтримки посилань комбінована команда:

/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 на мій пост, розміщений як user 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

завантаження з живого CD. потім запустити оболонку, потім sudo -s. Тоді chmod 777 / *, то chmod 600 / тощо / passwd. ядро впаде в паніку, якщо не вдасться init, що станеться, якщо / 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 -подібна схожа система і виключити 755, це може залишити список менше 1000 файлів, з якими можна вручну впоратися. Звичайно, src та заголовки насправді не мають значення.
mckenzm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.