Esta es una pregunta canónica sobre el permiso de archivos y por qué 777 es "destructivo".
No estoy preguntando cómo solucionar este problema, ya que hay un montón de referencias de eso en Server Fault (reinstalar el SO). ¿Por qué hace algo destructivo en absoluto?
Si alguna vez ha ejecutado este comando, destruirá de inmediato su sistema operativo. No estoy claro por qué eliminar las restricciones tiene algún impacto en los procesos existentes. Por ejemplo, si no tengo acceso de lectura a algo y después de un error de escritura rápido en la terminal, de repente tengo acceso bien ... ¿por qué eso hace que Linux se rompa?
linux
permissions
chmod
samwise
fuente
fuente
Respuestas:
En primer lugar, una pequeña terminología insignificante:
chmod
no elimina los permisos. Los CAMBIA .Ahora el meollo del problema - El modo
777
significa "Cualquiera puede leer, escribir o ejecutar este archivo" - Usted ha dado permiso para que cualquiera haga (efectivamente) lo que quiera.Ahora, ¿por qué es esto malo?
login
programa que los deje entrar cada vez).rm -r /
y todo ha terminado. ¡Se le dijo al sistema operativo que les dejara hacer lo que quisieran!sudo
,,sendmail
y una gran cantidad de otros simplemente no comenzarán más. Examinarán los permisos de archivos clave, verán que no son lo que se supone que deben ser y devolverán un mensaje de error.Del mismo modo,
ssh
se romperá horriblemente (los archivos clave deben tener permisos específicos, de lo contrario son "inseguros" y, por defecto, SSH se negará a usarlos).El modo
777
es en realidad . Entre las cosas en ese dígito principal están los bits y . La mayoría de los programas que son setuid / setgid tienen ese bit establecido porque deben ejecutarse con ciertos privilegios. Están rotos ahora.0
777
setuid
setgid
/tmp
y/var/tmp
la otra cosa en ese dígito octal principal que se puso a cero es elsticky bit
- Eso que protege los archivos en/tmp
(y/var/tmp
) de ser eliminados por personas que no los poseen.Hay (desafortunadamente) un montón de scripts de mal comportamiento por ahí que "limpian" haciendo un
rm -r /tmp/*
, y sin el bit adhesivo establecido/tmp
puede despedirse de todos los archivos en ese directorio.Tener archivos rascables desaparecer realmente puede alterar algunos programas mal escritos ...
/dev
/proc
sistemas de archivos similares yesto es más un problema en los sistemas Unix más antiguos donde
/dev
hay un sistema de archivos real, y el contenido que contiene son archivos especiales creadosmknod
, ya que el cambio de permisos se conservará en los reinicios, pero en cualquier sistema cambiar los permisos de su dispositivo puede causar problemas sustanciales, desde los riesgos de seguridad obvios (todos pueden leer cada TTY) hasta las causas potenciales menos obvias de un pánico en el núcleo.Credit to @Tonny for pointing out this possibility
Credit to @Tonny for pointing out this possibility
Mucha gente tiene
.
en suPATH
variable de entorno (¡no deberías!). Esto podría causar una sorpresa desagradable ya que ahora cualquiera puede soltar un archivo convenientemente llamado como un comando (digamosmake
ols
, y intente que ejecute su código malicioso.Credit to @RichHomolka for pointing out this possibility
chmod
se restablecerán las listas de control de acceso (ACL).Esto significa que puede terminar teniendo que volver a crear todas sus ACL además de corregir los permisos en todas partes (y es un ejemplo real de que el comando es destructivo).
Credit to @JamesYoungman for pointing out this possibility
¿Seguirán ejecutándose las partes del sistema que ya se están ejecutando? Probablemente, por un tiempo al menos.
Pero la próxima vez que necesite iniciar un programa, o reiniciar un servicio, o Dios no lo quiera, REINICIE la caja en la que se encuentra en un mundo de dolor, ya que los n. ° 2 y n. ° 3 anteriores alzarán sus feas cabezas.
fuente
/tmp
se solucionaría después de un reinicio. Aunque todo lo demás parece estar roto. Al menos en VM que acabo de probar, parece que un reinicio solucionó los/tmp
permisos. Debe haber algo en un script de inicio en alguna parte.tmpfs
generalmente se arreglan solos, los que tienen / tmp en el disco pueden (depende de sus scripts de inicio)find / -perms -4000 -type f
yfind / -perms -2000 -type f
ver varios binarios que se basan en estos indicadores.everyone
se define como la unión de un conjunto que incluye el usuario propietario del archivo, los usuarios del grupo que posee el archivo, y los usuarios que no cumplan con cualquiera de esos criterios (literalmente los tres dígitos de permisos octales:User
,Group
, yOther
). En otras palabras, cualquier usuario con acceso al sistema . ("Acceso" en este contexto podría ser una cuenta shell, que es la forma en que normalmente lo trataría, pero también incluye acceso a través de un formulario web / CGI que escribe datos en el disco: elwww
usuario ahora puede escribir en cualquier archivo del sistema , lo que significa que los visitantes aleatorios también pueden.)Una cosa importante es que hay muchas herramientas como ssh / sudo que verifican los permisos del sistema de archivos para los archivos de configuración clave. Si los permisos son incorrectos, estas herramientas están diseñadas para fallar, ya que esto indicaría un serio problema de seguridad. En mi sistema de prueba de Debian y quizás en otros, la capacidad de iniciar sesión falla, probablemente porque el binario de inicio de sesión o algo en PAM tiene verificaciones de permisos.
Por lo tanto, no es realmente que el sistema esté destruido, es que muchas herramientas están diseñadas para fallar inmediatamente cuando los permisos son incorrectos.
Si reinicia un sistema después de hacerlo,
chmod 777 -R /
se iniciará y podrá iniciar procesos que no tengan comprobaciones explícitas de permisos. Por lo tanto, el sistema no está realmente muerto, solo que, por diseño , es algo inutilizable .fuente