12 votos

Cómo reparar/restaurar ubuntu 10.04 después de 'sudo chmod / 777'

Vea También:
¿Por qué es "chmod-R 777 /" destructivo?

He cambiado los permisos de archivo de forma recursiva en el directorio root / por ejecutar sudo chmod -R / 777, y después de que mi sistema no arranque (me estoy poniendo un montón de "permiso denegado" errores).

Por favor, ayudar.

49voto

user102453 Puntos 41

He modificado el script de arriba y se parece a esto:

#!/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

23voto

blueben Puntos 2377

Usted está buscando en una causa perdida. Guardar los datos que usted necesita, y reinstalar el sistema operativo.

4voto

James Puntos 1938

Sé dpkg tiendas de los permisos en las bases de datos y me encontré con la siguiente secuencia de comandos de google que pueden ayudar.

Edit: en realidad tenía una mirada rápida a la secuencia de comandos y parece como si lo que falta es un poco de la magia que va desde PERMANENTES a MODO de ej dpkg-c da por ejemplo "-rw-r--r--" pero desea 0644, estoy en el trabajo ahora mismo, así que no estoy seguro de tener el tiempo para hacer la conversión en este instante, pero me puede volver más tarde si nadie ha saltado en añadir que poco.

Hay una secuencia de comandos aquí que se ve interesante

#!/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

3voto

weeheavy Puntos 2920

De acuerdo con blueben, acabo de reinstalar puede ser más rápido que analizar de qué archivo/directorio necesidades que permiso. Pero si la reinstalación no es una opción, he aquí una idea:

  1. Instalar un defecto de Ubuntu instalar en otra máquina
  2. Ejecute este comando para obtener los permisos de cada archivo o directorio en el sistema: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Copie el archivo chmod.sh el equipo con el mal permisos
  4. Ejecutar el archivo chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. La esperanza de la mayoría de las cosas de trabajo (no todo va a trabajar, creo)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: