в панике я по ошибке отправил на форум Ubuntu, я репостировал в правильном месте (я думаю)

При попытке отладки почтового сервера я набрал:

chmod -R 777 /

вместо:

chmod -R 777 .

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

В отличие от вопросов "Восстановление из chmod -R -777 /" и "Что делать после 'chmod -R 777 /'?«Я все еще вошел в систему как пользователь root, и не вся система была изменена, поэтому у меня есть некоторый контроль над системой. Я также ^ C выполнил команду в течение одной секунды, чтобы минимизировать урон. С тех пор я физически отключил сервер от интернета.

Я полагаю, что сценарий мог бы исправить это, если бы он восстановил разрешения файловой системы на основе данных из диспетчера пакетов, но я не знаю, как бы я поступил так. Если это невозможно, как мне сохранить данные с сервера для переустановки ОС?

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

это текущий вывод ls -la /:

drwxrwxrwx  22 root root  4096 Sep  7  2016 .
drwxrwxrwx  22 root root  4096 Sep  7  2016 ..
drwxr-xr-x   2 root root  4096 May 18 07:55 bin
drwxr-xr-x   3 root root  4096 Sep 21 07:53 boot
drwxr-xr-x  19 root root  3180 Sep 11 20:54 dev
drwxrwxrwx  92 root root  4096 Aug 23 07:50 etc
drwxr-xr-x   4 root root  4096 May 23  2016 home
lrwxrwxrwx   1 root root    31 Feb 24  2016 initrd.img -> /boot/initrd.img-3.16.0-4-amd64
drwxrwxrwx  18 root root  4096 Feb 24  2016 lib
drwxr-xr-x   2 root root  4096 Jun 20 07:00 lib64
drwx------   2 root root 16384 May 19  2016 lost+found
drwxrwxrwx   2 root root  4096 May  5  2015 media
drwxr-xr-x   2 root root  4096 May  5  2015 mnt
drwxr-xr-x   3 root root  4096 May 28  2016 opt
dr-xr-xr-x 148 root root     0 Sep  3 21:55 proc
drwxrwxrwx  10 root root  4096 Aug 19 17:58 root
drwxr-xr-x  22 root root   800 Sep 21 17:09 run
drwxrwxrwx   3 root root  4096 Jun 20 07:00 sbin
drwxr-xr-x   4 root root  4096 Sep 20 23:18 sftp
dr-xr-xr-x  13 root root     0 Sep  3 21:55 sys
drwxrwxrwx   8 root root  4096 Sep 21 17:17 tmp
drwxrwxrwx  11 root root  4096 Feb 24  2016 usr
drwxr-xr-x  14 root root  4096 Jun 25 06:21 var
lrwxrwxrwx   1 root root    27 Feb 24  2016 vmlinuz -> boot/vmlinuz-3.16.0-4-amd64

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

3 ответа3

4

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

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

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

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

# find / -name '*' -printf '%m %p\0' > working-permissions.txt

Sidenote: он разделен нулями , потому что, скорее всего, у вас нет имен файлов с нулями в них, поэтому безопаснее разделять их, как это, вместо использования новых строк (у вас по-прежнему вряд ли будут имена файлов с новыми строками в них, но лучше, чем потом сожалеть, и нулевое разделение безопаснее).

Посмотрите на вывод команды xargs --null -n1 --arg-file=working-permissions.txt echo | less чтобы убедиться, что разрешения и имена файлов выглядят нормальными. Если они это сделают, теперь у вас есть выбор способов продолжить:

Вариант 1:

Если вы все еще можете войти в сломанную систему и стать пользователем root, вы можете попробовать скопировать файл working-permissions.txt в сломанную систему, а после входа в систему сломанной системы выполнить:

# perl -0ne '$_ =~ m{^(\d*\d\d\d) (.*)\0$} ; print "chmod $1 $2\n" ; chmod oct($1), $2 ;' working-permissions.txt

Вариант 2:

Вы можете подключить диск из сломанной системы к работающей системе. Теперь вам нужно изменить указанную выше команду perl, чтобы отразить, где вы ее смонтировали. Например, если вы смонтировали его в /mnt/broken , вы должны сделать:

# perl -0ne '$_ =~ m{^(\d*\d\d\d) (.*)\0$} ; print "chmod $1 $2\n" ; chmod oct($1), "/mnt/broken/$2" ;' working-permissions.txt

Скрипт perl теперь меняет права доступа в /mnt/broken .

Примечание . Вариант 2 на самом деле более опасен для работающей системы (в случае ошибки в скрипте). Поэтому, когда вы будете готовы запустить сценарий perl для изменения разрешений, я предлагаю вам использовать LiveDVD или USB-диск для первой загрузки работающей системы, и у вас не будет никаких дисков, кроме диска сломанной системы, подключенного к нему.

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

3

комментарий от LasVegasCoder с другого форума, на который я отправил сообщение по ошибке:

Исправление ошибки разрешения

Как восстановить разрешение корневого каталога по умолчанию?

Правило № 1: Если вас не устраивают командные строки, не запускайте никакие команды от имени root.

Запуск chmod -R 777 / от имени пользователя root нарушит работу вашей системы.

Запуск rm -rf / от имени root приведет к катастрофе!

Если вы запустили chmod -R 777 / как root, выполните следующие шаги, чтобы восстановить его:

Шаг 1:

Скопируйте следующий скрипт, вставьте его в консоль, чтобы сгенерировать скрипт fixpermission

echo '
chmod -R 755 /bin /boot /dev /etc/ /home /lib /lib64 \
/media /mnt /opt /run /sbin /srv /usr /var

chmod -R 777 /initrd.img /vmlinuz
chmod -R 1777 /tmp
chmod -R 555 /sys
chmod -R 555 /proc
chmod -R 700 /root

' > fixpermission

chmod +x fixpermission

./fixpermission

Выше создаст скрипт с именем fixpermission и запустит его с помощью ./fixpermission, если он еще не запущен.

Шаг 2:

Запустите stat -c '% A% a% n' /*, чтобы показать ваш правильный каталог и его разрешение как восстановленное.

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

root@plab:~# stat -c '%A %a %n' /*
drwxr-xr-x 755 /bin
drwxr-xr-x 755 /boot
drwxr-xr-x 755 /dev
drwxr-xr-x 755 /etc
drwxr-xr-x 755 /home
lrwxrwxrwx 777 /initrd.img
lrwxrwxrwx 777 /initrd.img.old
drwxr-xr-x 755 /lib
drwxr-xr-x 755 /lib64
drwx------ 700 /lost+found
drwxr-xr-x 755 /media
drwxr-xr-x 755 /mnt
drwxr-xr-x 755 /opt
dr-xr-xr-x 555 /proc
drwx------ 700 /root
drwxr-xr-x 755 /run
drwxr-xr-x 755 /sbin
drwxr-xr-x 755 /srv
dr-xr-xr-x 555 /sys
drwxrwxrwt 1777 /tmp
drwxr-xr-x 755 /usr
drwxr-xr-x 755 /var
lrwxrwxrwx 777 /vmlinuz
lrwxrwxrwx 777 /vmlinuz.old

Шаг 3:

Перезагрузите вашу систему!

Надеюсь это поможет.

1

Действительно, если вы создали резервную копию файлов настроек и данных, а затем выполнили новую установку и восстановление файлов (с правильными разрешениями, должно быть просто для этих файлов, сопоставление каталога по умолчанию может быть достаточно хорошим), это, вероятно, самое простое. Но вы сказали, что сервер все равно сломан, поэтому даже после исправления разрешений он все равно будет сломан, так зачем беспокоиться? Просто переустановите.

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

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

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