¿Por qué no debería / var / www tener chmod 777

67

Al desarrollar una página en un host local, a veces aparece el error "Permiso denegado" que puedo resolver ejecutando chmod -R 777 /var/www. Sin embargo, la gente me dice que esta es una mala idea por razones de seguridad.

¿Por qué no debería /var/wwwtener un chmod de 777?

Luis Alvarado
fuente
Me gustaría recomendar este hilo sobre @ serverfault.com. Hace un gran trabajo al dar una configuración de ejemplo para apache2 y permisos. serverfault.com/q/6895/57036 PD No puedo comentar, así que tengo que agregarlo como respuesta.
MystaMax

Respuestas:

81

777 es un mal permiso en general y le mostraré por qué.

A pesar de cómo se ve en un casino o en Las Vegas, 777 no significa un premio gordo para ti. Más bien, premio mayor para cualquiera que desee modificar sus archivos. 777 (y su primo feo 666) permiten permisos de lectura y escritura (y en el caso de 777, Ejecutar) a otros . Puede obtener más información sobre cómo funcionan los permisos de archivos , pero en resumen, hay tres grupos de permisos: propietario, grupo y otros . Al establecer el permiso en 6 o 7 ( rw-o rwx) para otro, le da a cualquier usuario la posibilidad de editar y manipular esos archivos y carpetas. Por lo general, como puede imaginar, esto es malo para la seguridad.

Aquí está mi ejemplo:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Hasta ahora he creado una carpeta e hice un archivo con permisos "malos" (777 y 666). Ahora cambiaré a otro usuario e intentaré manipular esos archivos.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Como este usuario "malicioso" pude colocar archivos en el directorio e inyectar texto en archivos ya existentes. Mientras que a continuación, en un directorio con 755 y archivos con 644, puedo ver dentro de los archivos y directorios, pero no puedo editar los archivos ni crear nuevos:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Para los permisos de Apache, querrá apegarse a 0755 y 0644 (AKA umask 022) para carpetas y archivos, respectivamente. Esto le permite, como propietario de los archivos, editarlos y manipularlos mientras le da a Apache los niveles mínimos de acceso necesarios para operar.

Marco Ceppi
fuente
13
Lo siento por el idioma, pero esta es una respuesta increíble. Gracias Marco
Luis Alvarado
¿Qué sucede si solo ha creado usuarios para las personas que pueden administrar la carpeta / var / www libremente? Utilizo máquinas virtuales dedicadas para cada servidor web que ejecuto, y me pregunto si aún es cierto que debe ser tan cuidadoso.
UrkoM
1
@UrkoM Nunca puedes ser demasiado cuidadoso. Si desea que las personas accedan a los mismos archivos, puede aumentar los permisos del grupo a 6/7 (0664/0775) y agregar cada usuario a ese grupo. Si bien esta configuración (y la que describí en mi respuesta) no cumple con todos los criterios, diría que un buen 90% de las veces 0755/0644 son los permisos que querrá usar. Si sólo dispone de sistemas "un usuario" entonces el riesgo de tener otro con permisos de escritura no es como mucho un riesgo.
Marco Ceppi
44
@UrkoM La otra cosa a considerar es que hay muchos "usuarios" que no representan a personas reales pero existen para que ciertos servicios puedan ejecutarse con capacidades reducidas (principalmente por razones de seguridad, pero también para reducir el daño que podría ocurrir) de un error de estabilidad). Ver el contenido de /etc/passwdy verá como usuarios mail, newsy nobody. Incluso si está bien que todos los usuarios humanos reales de su sistema puedan modificar el contenido de /var/www, eso no significa que desee que todos los procesos se ejecuten, ya que estos usuarios "artificiales" pueden hacerlo.
Eliah Kagan
1) Como la respuesta más simple posible. No explica cómo Apache o Nginx pueden manipular carpetas o archivos. Apache o Nginx son servidores, por lo que las aplicaciones, no son su usuario "malicioso", que no puede escribir ls -lah, touch bado cualquier otro comando. ¿Cómo pueden manipular carpetas y archivos? 2) Herencia. No cubriste ninguna herencia entre carpetas y archivos dentro de ellas. Hay por lo menos 2-3 paso antes de un archivo: /var, /var/www, /var/www/project. ¿Qué permisos de usuario / grupo deberían /vartener? ¿Qué permisos de usuario / grupo deberían /var/wwwtener? Y así. ¿Cómo cooperan?
Verde
15

Esencialmente, tener permisos de 777 no te va a hackear por sí solo, pero si alguien tiene un punto de apoyo en cualquier lugar, puede usarse para escalar permisos y obtener un control completo sobre tu computadora. La peor parte es que sus permisos están usando "7", lo que significa leer, escribir y ejecutar permisos.

Digamos que un hacker quiere hacerse cargo de su computadora. Puede conectarse a su computadora usando un navegador web, conectándose a http://yourcomputer.example.com:80/. Si tiene alguna página disponible que le permita cargar imágenes, puede cambiar el nombre de un archivo ejecutable para terminar con ".jpg" y subirlo a su servidor. Ahora busca ese archivo en su navegador web y lo ejecuta, porque a Linux no le importa la extensión, solo ve que es un archivo ejecutable. Puede que eso no lo consiga mucho, pero debido a que se ejecutó en absoluto, sabe que se ejecutó como el usuario de apache. Luego carga una versión modificada que editará los archivos de configuración de apache, otorgándole aún más acceso, digamos que apache mostrará el contenido de / etc / passwd. Luego puede usar esa información para ver qué usuarios existen en el sistema. Luego puede conectarse usando ssh y probar contraseñas comunes para iniciar sesión como esos usuarios; si eso no funciona, podrá usar un ataque de fuerza bruta completo. Si ingresa como usuario con acceso a sudo,

Ahora, puede decir que no es probable, o que no es cómo funcionaría un verdadero hacker. Eso es cierto, pero el punto es que al configurar los archivos para que sean chmod 777, ha abierto un agujero de seguridad que un hacker puede usar como lo considere conveniente.

Si en su lugar sigues el Principio de menor privilegio , entonces ese agujero no ocurre, y tu sistema es mucho más difícil de hackear. Aunque es más difícil hacer las cosas correctamente, aún debe hacer todo lo posible para hacerlo.

Robots imaginarios
fuente
+1 para "toehold" y "escalate". Describe bien el concepto.
Kari Kääriäinen
3
¿Puede explicar cómo se puede ejecutar un archivo disfrazado de jpg en un servidor?
Anurag Peshne