Establecer incorrectamente chmod / 777. ¿Problemas?

33

Estaba tratando de correr chmod -R 777 ./pero terminé escribiendo chmod -R 777 /y configurando 777toda mi máquina. ¿Qué puede ir mal? ¿Cómo puedo arreglarlo?

Vinnycx
fuente
¿Qué puede salir mal en el sistema? ¿dejará de funcionar?
Vinnycx
66
Por supuesto que hay problemas. SSH fallará por ejemplo.
abandonando
2
SSH se cierra si el directorio de inicio es legible en todo el mundo. Establecer todo en 777 es como hacer todo como root.
abandonando
3
Consulte también serverfault.com/questions/364677/why-is-chmod-r-777-destructive, que proporciona más detalles sobre lo que saldrá mal.
Gilles 'SO- deja de ser malvado'

Respuestas:

46

¿Problemas? Si mucho. ¿Se puede arreglar? Seguro. ¿Más rápido que reinstalar? Probablemente no.

Mi recomendación es reinstalar. Mantenga una copia de seguridad del sistema existente y restaure la lista de paquetes y el contenido de los archivos en /etcy /var. Para /usr/local, probablemente pueda restaurar los permisos manualmente. Para /homey /srv, deberá restaurar los permisos de las copias de seguridad.

Si este es un sistema con múltiples usuarios locales, tenga en cuenta que hacer que algunos archivos sean legibles en todo el mundo ha revelado algunas cosas que deberían haber permanecido confidenciales.

  • Su lista de contraseñas ahora está comprometida: los usuarios locales han tenido acceso a la lista de contraseñas hash y podrían tratar de forzarlos. Notifique a sus usuarios de esto.
  • Todos los datos privados del usuario (claves ssh, contraseñas almacenadas, correo electrónico, cualquier otra cosa que los usuarios puedan considerar confidencial) se han expuesto a todos los usuarios locales. Notifique a sus usuarios de esto.

Si realmente desea intentar reparar (más un ejercicio de aprendizaje que una ruta de recuperación práctica), primero restaure los permisos de algunos archivos. Tenga en cuenta que si bien la mayoría de los archivos ahora están demasiado abiertos, a algunos les faltan los bits setuid necesarios . Estos son los pasos que debe seguir antes que nada. Tenga en cuenta que esta no es una lista exhaustiva, solo un intento de hacer que el sistema apenas funcione.

chmod -R go-w /
chmod 440 /etc/sudoers
chmod 640 /etc/shadow /etc/gshadow
chmod 600 /etc/ssh/*_key /etc/ssh*key   # whichever matches
chmod 710 /etc/ssl/private /etc/cups/ssl
chmod 1777 /tmp /var/tmp /var/lock
chmod 4755 /bin/su /usr/bin/passwd /usr/bin/sudo /usr/bin/sudoedit
chmod 2755 /var/mail /var/spool/mail

Luego, deberá restaurar todos los permisos en todas partes. Para los archivos bajo /usr, puede reinstalar los paquetes con uno de los siguientes comandos, según su distribución:

  • Si está utilizando Debian, Ubuntu u otra distribución basada en APT, puede ejecutar apt-get --reinstall install
  • Si está utilizando Arch Linux, puede ejecutar pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman, suponiendo que esté en un Live CD y que su instalación de Arch esté montada en /newarch.

Para los archivos bajo /etcy /var, que no funcionarán, se dejarán muchos de ellos como están: tendrá que replicar los permisos en una instalación que funcione. Para los archivos bajo /srvy /home, de todos modos tendrá que restaurar desde copias de seguridad. Como puede ver, también podría reinstalar.

Gilles 'SO- deja de ser malvado'
fuente
66
De acuerdo, a menos que sea un experto, no tiene casi ninguna posibilidad de reparar esta situación sin realizar una reinstalación completa o restaurar las copias de seguridad. Es demasiado peligroso dejar el sistema funcionando como está.
Arrowmaster
3
Si hay usuarios en el sistema, me da pena.
Jürgen A. Erhard
19

Es posible que no lo note al principio, pero muchas cosas pueden y saldrán mal. El principal problema es que todo el modelo de seguridad para todo el sistema está roto. Es como tener un cuerpo sin piel, órganos en el aire. Seguramente se infectará porque no debe funcionar así. Incluso si parece funcionar durante unos minutos, debe limpiar esto.

La mejor manera sería comenzar desde cero. De esta manera, reducirá en gran medida su riesgo y le dará un resultado más limpio en menos tiempo. Si tiene copias de seguridad adecuadas, esto no debería ser demasiado probar una experiencia.

Si intenta limpiarlo, la forma principal sería decirle al administrador de paquetes de su distribución que reinstale TODO en el sistema, incluida la sobrescritura de los archivos de configuración. Luego use el sistema de verificación que tenga para revisarlos y asegúrese de que ninguno de ellos esté marcado como que tiene archivos con permisos fuera de lo común. Luego, trabaje en cosas como los directorios de inicio de los usuarios y restablezca todo a permisos sanos en masa, luego trabaje en las pocas cosas que deberían tener permisos especiales (como archivos de claves ssh). Por último, haga una búsqueda completa del sistema para todo lo marcado como 777 y revise la lista (debería ser pequeño si ha realizado los otros pasos a fondo) y revise uno por uno asegurándose de que estén como están.

Caleb
fuente
Pero, aparte de la seguridad, ¿qué puede salir mal en términos de aplicaciones? ¿Dejarán de funcionar? ¿O la seguridad es la mayor preocupación aquí?
Vinnycx
La seguridad es la mayor preocupación, pero muchos programas, particularmente detrás de escena, como registrar demonios, cron, etc. fallarán por varias razones en lugar de ponerse en la situación peligrosa que ven.
Caleb
cron dejará de funcionar solo por 777?
Vinnycx
1
Hay varios sistemas cron diferentes, ¡pero ningún cron que se respete a sí mismo debería ejecutar trabajos en el cron de root cuando el archivo crontab se puede escribir en todo el mundo! Además, el demonio de correo que maneja las notificaciones cron debería quejarse por otras razones.
Caleb
10

SOLUCIÓN: PROBÉ ESTO EN CENTOS

Este chico salvó mi trabajo! (Necesitas acceder de alguna manera)

http://www.adminlinux.org/2009/07/how-to-restore-default-system.html

1) Para restablecer uids y gids en archivos y directorios:

for u in $(rpm -qa); do rpm --setugids $u; done

2) A los permisos en archivos y directorios

for p in $(rpm -qa); do rpm --setperms $p; done

luego cambie manualmente los permisos a estos archivos:

# ll /etc/ssh/
# chmod 600 /etc/ssh/ssh_host_rsa_key
# chmod 600 /etc/ssh/ssh_host_dsa_key
# service sshd restart
saul scv
fuente
5

Algunos programas conscientes de la seguridad no se iniciarán si ciertos archivos tienen permisos demasiado "flojos". Como dijo @ceving, sshdes lo más típico de esto.

Lo principal que puede salir mal es que ahora cualquier usuario puede abrir, leer y escribir cualquier archivo en su sistema. Las dos razones por las que esto es malo son: A) si un usuario malintencionado obtiene el control de su sistema, ya sea mediante una explotación o una configuración incorrecta, puede modificar cualquier cosa en su sistema ahora, y B) puede eliminar todo lo que desee, incluso si usted no es root, por lo que acaba de negar la mayoría de las protecciones de no ejecutarse como root.

Si no hizo una copia de seguridad de los permisos de antemano, se encuentra en una situación difícil. Es posible que pueda crear un script que "obtenga" una lista de permisos de un sistema recién instalado y luego "aplique" esos a todo en su sistema. Sin embargo, no tengo un guión tan útil.

LawrenceC
fuente
Pero, aparte de la seguridad, ¿qué puede salir mal en términos de aplicaciones? ¿Dejarán de funcionar? ¿O la seguridad es la mayor preocupación aquí?
Vinnycx
Solo el par de aplicaciones que se niegan a iniciarse si los permisos son demasiado flexibles. La seguridad es la mayor preocupación. Pero también es la estabilidad del sistema. Si lo haces rm -rf /como tu usuario normal ahora, harás que tu sistema se detenga.
LawrenceC
¿Qué aplicaciones pueden dejar de funcionar?
Vinnycx
¿Aparte de SSH? ¿Qué más puede fallar? Necesito ahora si puedo dejar el sistema así por un tiempo.
Vinnycx
55
@ Vinnycx: No, no puedes. Esta roto. Debe priorizar su reparación. De lo contrario, espere que sus servicios le fallen uno por uno y que los hackers se coman sus datos. Dejar / * @ 777 no es una opción.
Caleb