Смотрите также:
Почему «chmod -R 777 /» деструктивен?
Я рекурсивно изменил права доступа к файлам в корневом каталоге /
путем выполнения sudo chmod -R / 777
, и после этого моя система не загружается (я получаю много ошибок типа "доступ запрещен").
Пожалуйста помоги.
Вы смотрите на безнадежное дело. Сохраните нужные данные и переустановите операционную систему.
Я знаю, что dpkg хранит разрешения в базах данных, и я нашел следующий скрипт гугл что может помочь.
Изменить: я на самом деле быстро взглянул на скрипт, и похоже, что ему не хватает магии, которая переходит от 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
это возможно вернуться из такой грязной ситуации, без переустановки системы. Что ж, точнее говоря, запуск новой новой системы либо с 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 были одинаковыми в обеих системах, но для пользователей и групп, связанных с системой, это не должно быть проблемой.
РК:
Для этого важно поддерживать синхронизацию установочного диска с версией, которую вы используете, или, по крайней мере, работать с текущей версией 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" {}
Я изменил сценарий сверху, и он выглядит так:
#!/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
Согласитесь с blueben, простая переустановка может быть быстрее, чем анализ того, для какого файла / каталога требуется какое разрешение. Но если переустановка невозможна, вот идея:
find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
chmod.sh
к компьютеру с неправильными разрешениямиchmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
ОШИБКА в моем сообщении, опубликованном как пользователь 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
Если вы все еще можете запустить /usr/sbin/synaptic
, это часто поправимо.
Отсортируйте пакеты по статусу (установленные пакеты вверху), выберите все установленные пакеты, щелкните правой кнопкой мыши и выберите переустановить. Затем примените, что подскажет dpkg
для повторного извлечения всех файлов для этих пакетов. (Вы потеряете все локальные изменения (но не изменения файла конфигурации).)
Однако это может не все исправить.
Другое дело, если вы войдете в /var/cache
, вы можете позвонить dpkg -x <package name> /
для каждого установленного пакета, затем вызовите dpkg --reconfigure -a
. Кроме того, если вы используете Ubuntu, вы можете выполнить обновление dist, которое часто исправляет множество ошибок (при условии, что вы еще не используете последнюю версию). Обычно, когда я пытаюсь исправить такую ошибку, я пробую эти простые исправления, и если они не заставят ее снова работать, то пора переустановить.
загрузиться с live CD. затем запустите оболочку, затем sudo -s. Затем chmod 777 / *, затем chmod 600 / etc / passwd. ядро запаникует, если инициализация завершится неудачно, что произойдет, если скрипты / lib / init не будут исполняться. загрузитесь в однопользовательский режим для Lilo Linux 1 и запустите сценарий user102453, указанный выше. Это заставляет загрузку системы запрашивать. Все еще нужно запустить X.
У меня сработала установка разрешения от / до 755.
Так что сначала проверьте
root@ubuntu:/# cd /
root@ubuntu:/# ls -ld
Разрешения должны быть «drwxr-xr-x» (755).