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

12

Ver también:
¿Por qué es "chmod -R 777 /" destructivo?

Cambié los permisos de archivo de forma recursiva en el directorio raíz /ejecutando sudo chmod -R / 777, y después de eso mi sistema no se iniciará (recibo muchos errores de "permiso denegado").

Por favor ayuda.

Marcin
fuente
Tal vez podría usar un sistema Ubuntu en vivo. ¿Instala los paquetes que has instalado en tu sistema normal y luego escribe un script para 'clonarlos'? Esto es solo una idea. Tal vez alguien más pueda decir si esto es bueno.
Darokthar
Siga esto cuidadosamente: Abra en modo de recuperación> Montar unidad> Abrir shell interactivo> cd en disco duro montado (para mí estaba en / mnt / [directorio])> chmod -R 755 ./**> #cd ./etc/ ssh / #chmod 600 módulos #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
No tengo suficiente reputación para publicar la respuesta en StackExchange, pero quería ayudarte.
Smit Patel

Respuestas:

23

Estás viendo una causa perdida. Guarde los datos que necesita y reinstale el sistema operativo.

blueben
fuente
Sip. La cantidad de tiempo que pases haciendo esto será una locura y nunca sabrás con certeza si lo hiciste exactamente bien. Comience limpio, restaure sus datos de la copia de seguridad.
ThatGraemeGuy
1
Este es uno de esos pasos atrás y aprender de ello. Sus áreas más importantes son los contenidos de su carpeta de inicio, los cambios de configuración que ha realizado /etc, /var/wwwlos contenidos del servidor web y las bases de datos. Tome otro disco duro, actívelo como su primario e instálelo. Eso conserva su otra unidad como respaldo hasta que pueda transferirla.
Fiasco Labs
Hice lo mismo (y sí, lo sé mejor) e intenté varias de las ideas aquí, pero me llevó semanas volver a poner la máquina en un estado decente. En su lugar, intente hacer una copia de seguridad de sus datos y reinstalar Ubuntu.
MikeHoss
4

Sé que dpkg almacena los permisos en las bases de datos y encontré el siguiente script de google que puede ayudar.

Editar: De hecho, eché un vistazo rápido al script y parece que le falta un poco de magia que va de PERMS a MODE, por ejemplo, dpkg -c da, por ejemplo, "-rw-r - r--" pero quieres 0644, estoy en el trabajo en este momento, así que no estoy seguro de tener el tiempo para hacer la conversión en este momento, pero puedo volver más tarde si nadie más ha intervenido para agregar ese bit.

Hay un script aquí que es parece 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
James
fuente
¿se ocupa también de los archivos 04555?
Anillo Ø
4

Es posible regresar de una situación tan desordenada , sin reinstalar el sistema. Bueno, más exactamente ejecutando un nuevo sistema nuevo, ya sea desde una memoria USB o en una caja Virutal (más o menos) si tiene un sistema de arranque dual.

Volví a ejecutar el mismo tipo de problema (algún error en un script que estaba escribiendo) y lo resolví, pero debes pedir la ayuda de algún experto. ¡Sé muy cauteloso!

Primero, mi situación fue más fácil de resolver porque tenía un sistema de arranque dual (ubuntu y mi antigua instalación de fedora), pero ejecutar el sistema para una llave USB (o tal vez un CD / DVD) debería hacer lo mismo.

MPOINT = / mount / ubuntu

Primero monté mis sistemas de archivos de esta manera (no olvides crear los puntos de montaje): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Luego ejecuté el siguiente comando (mi problema era solo en unos pocos directorios críticos) para copiar los permisos del sistema en ejecución al desordenado (de hecho, en mi caso, instalé un sistema ubuntu en Virtual Box bajo fedora y obtuve los permisos allí):

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

Y luego ejecuté el script restoreperms.sh.

Pude volver a arrancar en ubuntu.

El contenido de restoreperms.sh será algo así como:

(...)
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
(...)

No lo probé, pero también debe funcionar para propietarios y grupos de propietarios. Algo como:

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
(...)

Por supuesto, debe tener cuidado aquí, que el UID y el GID son iguales en ambos sistemas, pero para los usuarios y grupos relacionados con el sistema, esto no debería ser un problema.

Rk:

Una cosa importante para esto es mantener un disco de instalación sincronizado con la versión que está utilizando, o al menos trabajar con la versión actual de ubuntu. Ahora, tengo estos comandos en un cronjob, ejecutándome todos los días (podrían ser semanas) para mantener esa información. Hará la solución más fácil la próxima vez pero, por supuesto, como tengo esto ahora, nunca volverá a suceder. ;-) Algo como esto:

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

EDITAR: para admitir enlaces, el comando combinado es:

/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}

Skyhawk
fuente
4

Modifiqué el script de arriba y se ve así:

#!/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
usuario102453
fuente
3

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

  1. Instalar una instalación predeterminada de Ubuntu en otra máquina
  2. Ejecute este comando para obtener los permisos de cada archivo / directorio en el sistema: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Copie el archivo chmod.sha la computadora con los permisos incorrectos
  4. Ejecuta ese archivo chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Espero que la mayoría de las cosas funcionen (no todo funcionará, creo)
weeheavy
fuente
2

ERRATUM a mi publicación publicada como usuario user100740: para admitir enlaces, el comando combinado es:

/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
jlovi
fuente
2

Si aún puedes lanzar /usr/sbin/synaptic , a menudo es reparable.

Ordene los paquetes por estado (paquetes instalados en la parte superior), seleccione todos los paquetes instalados, haga clic derecho y seleccione reinstalar. Luego aplique, eso le pedirádpkg que vuelva a extraer todos los archivos para esos paquetes. (Perderá las modificaciones locales (pero no los cambios en el archivo de configuración)).

Sin embargo, es posible que no lo arregle todo.
La otra cosa es que si entra /var/cache, puede llamar dpkg -x <package name> /por cada paquete instalado y luego llamar dpkg --reconfigure -a. Además, si está utilizando Ubuntu, puede hacer una actualización dist que a menudo corrige muchos errores (suponiendo que aún no esté en la última versión). En general, cuando trato de corregir un error como este, intento estas soluciones simples y si no solo hacen que funcione de nuevo, entonces es hora de reinstalarlo.

Perkins
fuente
-2

arranque desde el CD en vivo. luego inicie shell, luego sudo -s. Luego chmod 777 / *, luego chmod 600 / etc / passwd. kernel entrará en pánico si init falla, lo que sucederá si los scripts / lib / init no son ejecutables. arranque en modo de usuario único, para Lilo Linux 1, y ejecute el script user102453 anterior. Esto hace que el arranque del sistema se solicite. Todavía necesito que X funcione.

Wiley
fuente
3
Wow, esa es una idea bastante horrible que tienes allí.
HopelessN00b
-3

Establecer el permiso de / a 755 funcionó para mí.

Entonces verifique primero con

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

Los permisos deben ser "drwxr-xr-x" (755).

Stefan
fuente
1
Esto no aborda la parte recursiva de la pregunta.
kasperd
No, y tampoco ayuda con el 4755 2755 y el 6755. Si era solo / usr (a menudo lo es), puede usar recursivamente un sistema similar y excluir el 755, esto puede dejar una lista de menos de 1000 archivos que se pueden tratar manualmente. Por supuesto, src y los encabezados realmente no importan.
mckenzm