edición general
98 meneos
1088 clics
Seguridad de memoria para sudo y su. Reescritura en Rust (ENG)

Seguridad de memoria para sudo y su. Reescritura en Rust (ENG)

Nos complace anunciar que estamos reimplementando las omnipresentes utilidades sudo y su en Rust. Sudo se desarrolló por primera vez en la década de 1980. A lo largo de las décadas, se ha convertido en una herramienta esencial para realizar cambios minimizando el riesgo para un sistema operativo. Pero debido a que está escrito en C, sudo ha experimentado muchas vulnerabilidades relacionadas con problemas de seguridad de memoria.

| etiquetas: rust , sudo
  1. Cuando aparezca la primera versión estable descorcharé una botella para celebrarlo.
  2. La manera en que se usa sudo en Ubuntu y derivados me parece una atrocidad.

    Una sola clave para usuario y administrador. El usuario ejecutando a cada rato comandos se administrador. Es la receta perfecta para que te la cuelen.

    Lo ideal es un usuario root con clave diferente y hacer su (no sudo) cuando sea necesario.
  3. #2 sudo en sí mismo es una atrocidad desde el primer día en que lo vi. Significa exactamente lo mismo que usar el sistema como root. Exactamente lo mismo igual.
  4. Esto nos pasa porque sentimos que se la sudo a todo el mundo
  5. #3 wiki.archlinux.org/title/Sudo

    Si te lo curras, puedes limitar o configurar sudo con bastante profundidad.
    Eso sí, no es mi caso. :-D
  6. #5 El mío tampoco :troll:
  7. frg #7 frg *
    #3 No, no significa eso. Puedes hacer que un usurio ejecute comandos como otro usuario, no necesariamente root. Con policykit puedes hacer cosas similares, pero solo funciona en Linux, y lo poco que he usado me parece farragoso.

    #2 ¿Atrocidad? Dime como haces que alguien ejecute algo con otro usuario sin herramientas así. Que en el escritorio de un ordenador personal se den privilegios de administrador por medio de sudo no me parece tampoco una atrocidad.
  8. - Tengo una cuchara de palo.
    - Vamos a hacer una cuchara de palo con una técnica novedosa y supermoderna.
    - ¿ Va a quedar distinta ?
    - No, va a quedar igual.
  9. #7 Tienes el bit suid, tienes las capabilities.

    No critico con esto sudo, a mi no me parece tan mala herramienta, aunque yo no dejaría tocar a cualquiera el sudoers porque incluso queriendo ser restrictivo puede dejar puertas abiertas, y eso va a seguir pasando, esté escrito en rust, en go, o en el lenguaje que quieran.
  10. #8
    - tengo un coche verde con 4 ruedas.
    - tengo un coche verde con 4 ruedas + airbag, ABS, ESP...

    A simple vista son iguales, pero uno de los dos es más seguro y menos propenso a sufrir accidentes.
  11. #8 el símil sería más bien:

    -Tengo una cuchara de palo de hace décadas que ha tenido problemas de termitas.

    -Vamos a hacer una cuchara de acero inoxidable para evitar las termitas.

    -¿Va a quedar distinta?

    -No, va a servir para lo mismo pero eliminamos los posibles futuros problemas de termitas.
  12. Me quedo con doas/opendoas.
  13. #3 #2 Sudo creo que puede funcionar con capabilities del kernel y con PAM. Ergo, el radio de acción se puede limitar bastante.
    En OpenBSD doas por diseño capa muchas cosas como variables de entorno o la persistencia.
  14. #3 Hay sistemas sin contraseña root y se entra como administrador con el usuario que tiene privilegios de sudo. La ventaja es que el usuario root lo conoce todo el mundo, pero sin contraseña no vas a acceder y el usuario puede ser cualquier nombre, es más difícil de averiguar. Es la ventaja que le veo, quitar la cuenta root como usuario con contraseña.
  15. #2 A mi también me desconcertó cuando aprendí a usar un poco linux (redhat, centos) y tenía que usar sudo o su. De hecho, cuando usaba sudo metía la contraseña root, no la de admin. Y siempre me daba error, y pensaba que la escribía mal y me chinaba hasta el desconcierto. Durante una temporada usé la misma :palm: hasta que me aclaré.
  16. #3 Todo depende del entorno en el que estés. Si estoy en mi máquina personal (fuera del ámbito corporativo) el riesgo de malware es poco probable y de bajo impacto. Si estoy en una máquina de producción obviamente se configurará para ser mucho más restrictivo.

    No todos los casos de uso son iguales, las políticas de seguridad tampoco tienen que serlo.
  17. #8 No, tienes una cuchara de palo, pero aplicando una técnica novedosa y supermoderna ahora tienes una cuchara de acero inoxidable, es la misma en cuanto a forma y función, pero es una cuchara mucho mas robusta que te durará mucho mas antes de romperse o estropearse y que te va a ser mas fácil limpiarla y para los fabricantes de cucharas mucho mas fácil de producir, modificar y reparar.
  18. #7 Dime como haces que alguien ejecute algo con otro usuario sin herramientas así.

    Se supone que la seguridad en Linux/Unix consiste precisamente en evitar eso: que usuarios puedan ejecutar algo con otro usuario porque sí. Las "herramientas" que uses para eso son irrelevantes: si lo permites, estás puenteando la seguridad del sistema. Adórnalo con las palabras que prefieras, que estás haciendo exatcamente eso: puentear, y con ello invalidar, la seguridad del sistema.

    Nadie debería poder ejecutar cosas con permisos diferentes a los de su propio usuario. Sólo root debería ser capaz de eso. Punto y final. Sudo es una guarrería. Que vale, que sí, que yo también lo uso en mi Ubuntu, que mola pasar de la seguridad de forma activa y consciente de queledenporculojajaja en nuestro laptop y nuestro desktop de casa, pero que no nos engañemos a nosotros mismos.
  19. Donde esté pfexec... :foreveralone:
  20. #10 #11 y #17 ¿ Que aporta Rust respecto a C para corregir esas vulnerabilidades?

    ¿ Es imposible corregir esas vulnerabilidades en C?

    ¿ Solo Rust permite corregir esas vulnerabilidades?
  21. #7 farragoso farragoso... el tema es que podría tener alguna herramienta para configurarlo mejor, pero se pueden hacer cosas muy específicas con policykit.
  22. #11 No. El símil que están haciendo es: "debido a que está escrito en C, ha experimentado muchas vulnerabilidades relacionadas con problemas de seguridad de memoria". La realidad es que Sudo, problemas de ese tipo ha tenido uno solo: el CVE-2021-3156.

    - Tengo una cuchara de palo de madera de cerezo que ha tenido 1 problema de termitas en 30 años.
    - Vamos a hacer una cuchara de palo de madera de almendro para evitar la raza de termitas que se alimentan de madera de cerezo.
    - ¿Va a quedar distinta, va a hacer mejor a la herramienta y más segura de utilizar?
    - No, va a quedar igual y va a ser igual de segura, pero eliminaremos los posibles futuros problemas de termitas que se alimentan de madera de cerezo.
    - ¿Pero eso no lo habíamos arreglado ya en 2021 puliendo y pintando la cuchara de palo?
    - Errr... sí, pero es que nos gusta mucho más la madera de almendro.
    - ¿Pero no hay cosas más interesantes que hacer con esa madera que rehacer la cuchara de palo que ya tenemos, que funciona y que está estandarizada, revisada, mejorada y protegida?
    - Es que nos gusta más la madera de almendra, la madera de cerezo es una mierda.
    - Pero, ¿por qué es una mierda?
    - Porque hay termitas que se comen la madera de cerezo en condiciones especiales de 25 grados Celsius, 12% de humedad ambiental y 0'95 atmósferas de presión.
    - Pero, ¿es eso un riesgo tal que merezca la pena poner a un equipo de trabajo durante años a sustituir las cucharas de madera de cerezo por madera de almendro, o quizá sería mejor desarrollar otro tipo de cucharas de palo más modernas o funcionales y mantener mientras tanto las que ya tenemos, funcionan y son lo suficientemente seguras? ¿Qué garantías tenemos de que las nuevas cucharas de palo que nadie ha desarrollado todavía con madera de almendro van a ser 100% seguras de todo tipo de fallos frente a las de cerezo ya existentes?
    - Las cucharas de madera de cerezo son una mierda. Las de madera de almendro funcionan más mejor y son mucho más seguras.
    - :shit:
  23. #20 Rust es más seguro en cuanto a evitar desbordamientos de memoria, redundancia y cosas así, por lo que es más sencillo corregir o evitar las vulnerabilidades; pero eso no significa que no se puedan solucionar en C, lo único que es más costoso.
  24. Make me a sandwitch!
  25. #16 De acuerdo. Por eso yo en mis máquinas personales de casa uso sudo y ni se me ha pasado por la cabeza jamás usarlo en servidores (ahora ya me da bastante igual porque desde hace unos años va todo en la nube/Kubernetes/Fargate/Cloud-Run/etc... no despliego nada en un servidor desde ni me acuerdo.
  26. #20 realmente es una cuestión de seguridad más que de necesidad/imposibilidad, es decir, ¿podrías cruzar un rio con un puente sin barandillas? si llevamos mucho tiempo haciendolo (ej: buenas prácticas del lenguaje, etc.) no tendrás problemas, pero al que llegue por detrás que no esta acostumbrado a ello se podria caer (ocasionar fallos de seguridad nuevos).
  27. #9 El sudoers mal configurado es un mal endémico, y sí, no se va a soluvionar con versiones menos inseguras del sudo.
  28. #18 Sigo diciendo, ¿cómo lo haces? Por ejemplo, tienes un proceso de monitorización que se tiene que ejecutar con los permisos de la aplicación, por lo que puedes o darle un sudo a la aplicación de monitorización para que la ejecute, o ...

    ¿Cuales son tus alternativas?
  29. O sea, sudo, que ha sido ultrasuper hiper auditado durante décadas por hackers de todo el planeta, no es seguro. Pero una nueva versión en rust, con un compilador en desarrollo, con las librerias del sistema recien escritas, pues va a ser más seguro, solo porque es nuevo.

    Personalmente, yo no toco una versión de rust de sudo, ni con un palo. Todavía no sabemos muy bien el virus que tenemos en los equipos con el systemd, como para reemplazar ahora sudo.
  30. #20

    ¿Que aporta Rust?
    Su manejo de memoria es seguro por diseño, no hay "nulos" como tal si no que se devuelven tipos opcionales y tienes que mirar explícitamente si hay valor para poder acceder a el y la gestion de errores por como está diseñado es también explicita... y así varias cosas.

    ¿Es imposible corregir vulnerabilidades de manejo de memoria en C?
    No, solo necesitas que el programador se asegure de hacer las liberaciones cuando toca, de borrar memoria cuando toca, de no hacer accidentalmente doble frees, comprobar siempre si un valor no es nulo, no usar valores que ya has liberado... y así con un montón de cosas más. Vamos que todo lo que te aporta Rust de serie es "manual".

    ¿Solo Rust permite corregir esas vulnerabilidades?
    No, hay varios lenguajes que se pueden considerar con memoria segura, ellos mismos lo dicen aquí www.memorysafety.org/docs/memory-safety/ (Go, Java, Python, C#, ...), pero en este caso que hablamos de sistemas lo más adecuado por su forma de ser es Rust y que puede interactuar facilmente con otras cosas hechas en C (por ejemplo el kernel o las librerías de sistema). Un su o sudo en Python huiría de ello, me quedaría con el de C, y en Go me parecería absurdo no es el campo para el que está diseñado Go a parte de tener un binario de varios MB para una función a priori simple (he puesto Go y Python como ejemplo ya que son mis lenguajes principales).

    No soy yo fan de la reescritura de absolutamente todo lo que estaba en C en Rust, por ejemplo una reescritura del kernel de linux es inviable pero han empezado a admitir módulos de kernel en Rust como segundo lenguaje y eso está bien.
  31. #7 "Tienes el bit suid"

    precisamente eso es mucho más peligroso potencialmente que usar sudo adecuadamente.

    #18 sudo no invalida la seguridad de un sistema, únicamente su mal uso, de hecho es mucho peor las opciones de no usar sudo. Es mucho mejor darle permisos de sudo a, por ejemplo, hpacucli al usuario nagios que poner el bit suid al binario de hpacucli o que, desde luego, ejecutar nrpe con el usuario root.
  32. En el FOSDEM de este año hubo una charla MUY interesante sobre el portado de las core-utils a Rust. Supongo que no todos, pero si muchos argumentos de los que da el autor durante la charla aplican al portado de sudo tambien.

    www.youtube.com/watch?v=90Q5N1qT7BQ
  33. #22 Los overflows también son de gestion de memoria CVE-2002-0184 y CVE-2019-18634 mirando rápido y sin pararme a ver detalles del resto de CVEs. sudo y su son componentes relativamente pequeños y con muchos ojos, por eso quizá no han tenido tantos problemas de este tipo.

    Mira por ejemplo curl que hace estadísticas al respecto de las vulnerabilidades si están relaccionadas con temas de errores en C o de lógica/diseño: curl.se/dashboard1.html#c-vulns
  34. #28 ¿Hay algo que necesites que los grupos de Linux no tengan y te veas obligado a usar sudo?
  35. #3 si se usa de manera estúpida, si.

    Puedes usar suso correctamente e incluso en un entorno grande, con freeipa, donde estableces un contexto de seguridad en HBAC.

    Un grupo de cuentas tiene derecho a ejecutar un grupo de comandos para un grupo de servicios en un grupo de computadoras.

    Pablito, que es desarrollador web, puede ejecutar sobre ssh un reinicio de servicio httpd en los hosts en el grupo de desarrollo web. Y hacer un tail del log.

    Obviamente hay otras maneras tal vez más cómodas de hacer eso, es solo un ejemplo.
  36. #8 van a hacer la misma cuchara con un tipo de madera que no se parte cuando la metes en el lavavajillas.
  37. #2 "sudo su" es más mejor

    :troll: :troll: :troll:
  38. #31 No tiene por qué, sudo tiene multitud de formas de ser abusado, y el bit suid más de lo mismo. Yo no haría distinciones en ese sentido y estaría muy atento a cualquier implementacion o configuracion que se haga con ellos porque incluso aunque pensemos que estamos haciendo un uso adecuado, hay posibilidad de que estemos pasando cosas por alto que un atacante más experimentado sí sepa que existen.
  39. Gracias por una explicación tan extensa y buena.
  40. #7 nono, si sudo tiene su razón de existir y es muy útil cuando se configura correctamente. Por ejemplo supongamos que necesitas apagar y encender una interfaz de red. O hacer una copia de seguridad de datos sensibles que sólo el root puede leer. Pero necesitas que lo haga un usuario que no es administrador (porque el administrador está para cosas más importantes que un backup rutinario). Entonces en sudoers das acceso a un determinado usuario o grupo para ejecutar un comando determinado (generalmente un script que creó el administrador) pero que se ejecute con los privilegios del root en vez de los del usuario. Pero para un comando muy específico, no para todo.
  41. #3 bueno, lo atroz es como lo sus Ubuntu y los que lo copiaron. Usado correctamente es útil y necesario.
  42. #22 Magnífica explicación del meneo para los que no entendemos de estas mierdas.
  43. #34 Sí, un montón de cosas.
  44. #38 no es que los haya contado, pero históricamente estoy seguro que hay muchos más bugs críticos en binarios con bit suid que bugs críticos explotables en sudo.

    La idea es auto contener en todo lo posible el código "crítico", por eso es preferible, no sólo a nivel de sostenibilidad de un sistema sino también de seguridad, tener unos pocos cientos de líneas de código para escalar privilegios con seteuid que no tener cientos de miles de líneas de código de múltiples servicios ejecutándose como root.

    Pues con sudo es lo mismo, es mucho mejor tener este sistema, que está muy bien delimitado si se sabe lo que se hace, que tener que andar tocando permisos a cientos de archivos, en cientos de servidores, para cientos de usuarios y grupos, etc ... Esto, además de insostenible administrativamente, tarde o temprano dará lugar a problemas de seguridad críticos con toda seguridad.
  45. #22 jajajajaj buenisimo ejemplo, asi con todo el software
  46. #44 Veo una cosa bastante débil en tu argumento y es que cuando hablas del bit suid hablas sobre bugs críticos en binarios pero en realidad que se use suid o se use sudo, si x binario tiene un fallo de seguridad ese fallo se va a poder explotar en ambos contextos.
    Y además de todo eso un sudo no necesariamente vulnerable pero mal configurado por error puede llevar a problemas de seguridad, de hecho hay páginas bastante conocidas en el mundo de la seguridad cuyo único cometido es listar diferentes binarios el ecosistema opensource y explicar como y porqué son vulnerables a una mala configuración de sudo. De hecho en alguna de estas páginas además te explican también los riesgos de dar suid a ciertos binarios.
  47. #36 se partirá muchas veces, como cualquier software nuevo.
    La pregunta es si los errores que habrá hasta estabilizarlos, compensarán los errores que se espera ahorrar en el futuro. Depende de la habilidad del programador. Posiblemente en el casdo genral no, porque programar en C sin meter errores de mal manejo de la memoria es algo bastante fácil. cc/ #10
  48. #17 habría que ver si esa supuesta mejora compensa la inestabilidad de una herramienta nueva, sin probar y si la licencia sigue siendo libre.
  49. #11 No, las propiedades del producto final quedan iguales.
    Es un software que ha tenido diez bugs en los últimos ocho años. Pocos más seguros habrá. No tiene termitas.
  50. #47

    Entiendo que en el caso de sudo o su, no se trata de un software nuevo, si no una reescritura en un lenguaje que es más seguro. O sea una solución madura, con un diseño maduro, escrito en un lenguaje más seguro desde el punto de vista de la memoria.

    No és un simple software nuevo.
  51. #46 "Veo una cosa bastante débil en tu argumento y es que cuando hablas del bit suid hablas sobre bugs críticos en binarios pero en realidad que se use suid o se use sudo, si x binario tiene un fallo de seguridad ese fallo se va a poder explotar en ambos contextos."

    con sudo vas a limitar qué usuarios pueden ejecutar ese binario, con el suid bit cualquier usuario lo va a poder ejecutar con escalada de privilegios, por no hablar de que nadie te obliga a usar sudo para ejecutar ese binario, pero muchos binarios del sistema en distribuciones antiguas ya llevaban el bit suid configurado inicialmente, lo necesitaras o no.

    "además de todo eso un sudo no necesariamente vulnerable pero mal configurado por error puede llevar a problemas de seguridad"

    esta es la cuestión, el problema no es sudo, sino un mal uso o una mala configuración de la misma, y de esto no está exento ninguna otra pieza de software que necesite acceder a partes críticas de un sistema.
  52. #51 Por eso es de primero de hacking que cuando consigues shell una de las primeras cosas que haces es dar un sudo -l a ver si puedes elevarte con algo que tenga ese usuario.

    El suid tampoco es una cosa que se ponga a diestro y siniestro, pero no deja de ser una parte fundamental de sistema que se usa por ejemplo tanto en su como en sudo (no se si ya comenté esto antes), pero al usuario que preguntó le dije las posibilidades que había, sin hacer distinciones entre lo que es más o menos seguro.

    De hecho además de sudo y el suid hay otro mecanismo que son las capabilities, que para ciertas cosas son mucho más adecuadas. Por ejemplo el comando ping debería requerir que el usuario fuera root, pero gracias a ellas se le pueden otorgar permisos únicamente para que toque lo que necesita a nivel de red, sin entregarle suid ni hacerle pasar por un sistema como sudo, y con la ventaja de que ante un fallo de seguridad del binario lo máximo que van a poder elevar son ciertas capacidades a nivel de red.
  53. #52 no sé para qué me cuentas todo eso, yo sólo digo que sudo tiene su utilidad y digo que es preferible usar sudo en ciertos escenarios cuya alternativa es ponerte a cambiar permisos en dispositivos, binarios y archivos del sistema que seguramente conduzcan a un sistema inestable, inmantenible y menos seguro que añadir una línea de sudoers.

    Como caso práctico he puesto nrpe. Si crees que mi razonamiento falla en algo te invito a que expliques cómo harías tú para configurar nrpe para monitorizar servicios, estados, usuarios, colas de correo, raids por HW, estados de CEPH, DRBD, reiniciar servicios, etc ...

    Y si te queda tiempo para explicar cómo implementarías tú ansible para gestionar unos cuantos cientos de servidores.
  54. #53 ¿Ansible?
    Con la key de root :troll:
  55. #41 Lo que hace ubuntu está bien para su caso de uso, básicamente es una señal de advertencia para el usuario, en muchas ocasiones primerizo, de que si hace eso puede descarajar algo.

    Como dicen más arriba, cada entorno es diferente, con diferentes necesidades en cuanto a la seguridad, lo que es buena idea en una Ubuntu en el portatil de tu madre no tiene por que serlo en un servicio crítico {0x1f609}
  56. #22 {0x1f602}

    No caigamos en falsos dilemas, si alguien quiere dedicar su tiempo y esfuerzo a reimplementar su y sudo en rust bienvenido sea.

    Si al final de esto sale algo interesante se irá extendiendo y si no, quedará como un brindis al sol.
  57. #35 Doas hace eso con mucha mas simpleza:

    permit usuario as root cmd comando args ristra de argumentos.
  58. #2 Trabajar con su, es decir, en el shell de root, es pedir problemas. Antes o después borrarás lo que no debes, se creerán ficheros con permisos de root...
  59. #29 Ya, super auditado durante década como lo era openssl por ejemplo :-) Todo el mundo dando por supuesto que estaba "super auditado", hasta que resultó que no, y cuando alguien se sentó a ver lo que había ahí resulta que pasaban camiones por los agujeros.

    El compilador está en desarrollo como lo está todavía GCC, que también tiene sus bugs y sus regresiones.
  60. Como lenguaje de propósito general Rust es un truño.

    Y como alternativa a C, innecesario
  61. #7 Sudo es útil. Lo que no es de recibo es como se usa en Ubuntu
  62. #58 exactamente igual que sudo. Muchas nuevas herramientas actuales son innecesarias.
  63. #62 Si miramos como funcionan los privilegios de administrador en un windows, y consideramos a Ubuntu el equivalente libre, el funcionamiento muy similar, ligeramente mejor.
  64. #53 No si yo eso no te lo discuto, claro que hay escenarios en los que sudo es muy útil, pero vamos, alguien preguntó que qué otras posibilidades había en vez de usar sudo y yo solo comenté las otras posibilidades que hay. Obviamente para cada caso particular habrá una mejor elección pero para eso habrá que estudiar cada caso concreto. De hecho releyendome veo que he dado por bueno lo de que el suid lo puede usar cualquier usuario al contrario de sudo, y eso no es del todo cierto, es decir, puedes dejar el binario suideado en un path al que solo tenga acceso el usuario que quieras y listo, ya solo lo usa ese usuario.

    Lo que dices del nagios, pues precisamente haciéndolo al revés, en vez de elevar por defecto lo que hay que hacer es reducir los permisos según lo que se esté monitorizando. Por ejemplo, si tienes un plugin que extrae datos de los logs de una aplicación lo que necesitas es permisos de la aplicación, los mínimos necesarios para acceder al archivo de log pero nunca root si no es necesario. De hecho en temas como nagios es especialmente peligroso cuando el admin se está haciendo sus plugins con lenguajes que no domina, e introduce vulnerabilidades. Recuerdo un caso que tuve con un cliente en el que su admin tenía un plugin en bash para parsear unos logs y encima lo corria como root, con lo que al injectarle ciertas cosas en los logs me podía abrir una shell inversa con permisos de root en la máquina.
    Y así con todo, por ejemplo para el tema del raid hw, si estás usando el megacli o similar puedes meterlo en una ruta donde solo llegue tu agente y darle capabilities de cap_sys_admin, con las cuales tendrá los permisos necesarios para hacer sus consultas, pero nunca podría elevarse a root. Por simple comodidad se podría también usar sudo para esto, pero siendo muy restrictivo en los argumentos que se le permite utilizar al binario.
    Hay cosas como por ejemplo de parar y arrancar servicios, me parece un buen ejemplo donde sudo encajaría bien. Esto lo mismo dentro de un tiempo cambia, como les de a los de systemd por tener su propio sistema de autorización pero por el momento sudo es bueno para esa tarea concreta.

    Y lo que dices de ansible escapa el topic que estamos tratando, aún así soy RHCE, si tienes alguna duda en concreto del tema te la puedo resolver por privado.
  65. #61 Al menos C tiene varios entornos de desarrollo con los que puedes construir el GUI visualmente, Rust ni uno.
  66. #59 A ver. Tú trabajas siempre como usuario. El root solo lo usas muy de vez en cuando para cosas peligrosas. Por eso tiene que requerir una clave diferente y que poca gente sepa.

    El sudo se creó para que algunos usuarios pudieran ejecutar algunos comandos específicos con los privilegios de otro usuario (que puede o no ser el root) sin saber su clave.
  67. #67 Normalmente ya no se usan contraseñas, se usan claves SSH y por eso es necesario usar sudo su si realmente necesitas root. Y obviamente los usuarios que tienen sudo su son los que tienen que ser.

    Tener una clave independiente de root, compartida según tú, es una locura que te obliga a rotar esa clave cada dos por tres, por ejemplo porque se va (o despides) a un empleado que la tiene.

    En mis servidores, no hay clave de root. Ni de ningún usuario, vamos. Claro que tampoco hay acceso directo en consola (no hay ningún usuario con el que puedas hacer login).
  68. #52 A mi lo que me parece más escandaloso es la escalada de privilegios gracias al suid de pkexec. Aún presente en muchos servidores/clientes sin estar parcheado o simplemente no le cambian el bit setuid directamente.
  69. #69 Bueno, es el pan de cada día. Al fin y al cabo esa vulnerabilidad es anecdótica, una más.
  70. #70 Exacto, cómo lo sabes... :-D
  71. #68 Normalmente ya no se usan contraseñas, se usan claves SSH y por eso es necesario usar sudo su si realmente necesitas root. Y obviamente los usuarios que tienen sudo su son los que tienen que ser.

    Es que eso es lo que yo veo mal: que con una sola clave hagas de usuario y también de root. Es más seguro que necesites dos claves diferentes.

    En mis servidores, no hay clave de root

    Yo sí tengo clave de root pero solo para consola. No permito login como root por SSH (en el /etc/sshd_config pones permit-root-login without-password). De esa forma por SSH nunca se puede entrar como root a no ser que sea con clave RSA, pero desde la consola sí, por las dudas.

    A los usuarios sí les permito entrar por SSH con clave porque de todas formas al no tener sudo, necesitan saber una segunda clave (la de root) para poder hacer algo peligroso (con su). En algunos servidores he agregado un tercer paso: claves de un solo uso con Google authenticator (o cualquier otro compatible)
  72. #72 ¿y cómo quitas el acceso a root a un solo usuario?
  73. #65

    "Y lo que dices de ansible escapa el topic que estamos tratando"

    ¿que se escapa del topic, por qué exactamente, cómo lo resuelves sin sudo o sin become?

    "aún así soy RHCE, si tienes alguna duda en concreto del tema te la puedo resolver por privado."

    jajajajajajajajaj. No hace falta, gracias.
  74. #74 ¿Por qué exactamente? Porque me has preguntado como implementaría ansible para gestionar cientos de servers, lo cual es otro topic, como te dije, y más extenso que lo que preguntas ahora.

    Como comentas tienes el parámetro become, el cual puedes configurar a tu gusto con become_method para elegir el método de escalada de privilegios. Pero ya me dirás tú que sentido tiene esto que estás preguntando cuando tu intento de flameo ha empezado porque he comentado a un usuario una de las diversas maneras de ejecutar con privilegios en linux. ¿A que quieres llegar, a que sudo es el método por defecto de ansible y por eso es mejor?
  75. #75 "¿A que quieres llegar, a que sudo es el método por defecto de ansible y por eso es mejor? "

    no, a lo que quiero llegar es a lo que comenté dos comentarios atrás, y yo no flameo, respondí a un usuario que decía que sudo es una "aberración" para la seguridad y que no debe usarse nunca, yo le respondí que en ciertos casos es mejor sudo que la alternativa, y entonces llegaste tú a dar lecciones que nadie te ha pedido y a tirarte el rollo con tus aires de superioridad.
  76. #76 No, no. Revisate la conversación porque tú en #31 has contestado a #7 quoteando algo que yo he puesto en #9 y que era contestación a #7, y por eso he entrado a la conv.
    Si no yo no hubiera entrado.
  77. #77 pues ciñámonos a mi respuesta en #31 Digo que es preferible sudo a tener docenas de binarios con suid bit activo repartidos por el sistema de archivos ¿tienes alguna objeción o a ese comentario?
  78. #78 Obviamente. Si eliminamos el contexto anterior y la pregunta es concretamente esa ni yo ni nadie va a recomendar tirar de bit suid y menos con ficheros repartidos por todo el sistema de archivos (entiendo que en rutas accesibles a todo el mundo).

    Pero eso no invalida que el mecanismo de bit suid existe, que es necesario a día de hoy ya que por ejemplo sudo y su lo necesitan, y que en ciertos casos se puede usar, no necesariamente dejando binarios con el bit activado al alcance de cualquiera, sino en un path solo accesible a x usuario.
  79. #79 "Pero eso no invalida que el mecanismo de bit suid existe, que es necesario a día de hoy ya que por ejemplo sudo y su lo necesitan, y que en ciertos casos se puede usar, no necesariamente dejando binarios con el bit activado al alcance de cualquiera, sino en un path solo accesible a x usuario. "

    Es que eso no lo ha dicho nadie, o yo no al menos.
  80. #80 Ya ya, pero si respondiste lo de que suid era mucho más peligroso que sudo (en #31, quoteando lo que yo había puesto), que fue donde te comenté ya que no estaba, y no estoy de acuerdo con esa afirmación, por los motivos que ya dije.
  81. #73 ¿y cómo quitas el acceso a root a un solo usuario?

    No diciéndole la clave de root...

    Esa es la necesidad que yo veo de que haya claves diferentes para usuarios y para root. Que se requieren siempre dos claves para tener privilegios.
  82. #83 ¿cómo quitas el acceso a root a un usuario que ya tiene la clave?

    ¿O cómo das acceso durante unas horas para hacer algo concreto?

    ¿Y cómo sabes qué usuario concreto ha hecho algo?
  83. #84 Ojo con esa idea de dar permiso de root a alguien y después quitárselo. Una vez que alguien tuvo permisos resulta casi imposible garantizar que no dejó una puerta trasera para volver a entrar después incluso si has cambiado la clave de root (o quitado el sudo).

    Para hacer algo concreto justamente existe sudo. Se le da permiso para una aplicación en particular, no para todo. De esa forma te aseguras de que no tocará nada que tu no quieras que toque y reduces casi a cero la posibilidad de que meta una puerta trasera.

    Nunca se debería permitir sudo a "*". Siempre tiene que ser a programas concretos. Si tiene que ejecutar varios comandos, le haces un script y le das sudo para ese script solamente.
  84. #85 tú eres el que habla de tener una contraseña compartida de root...
  85. #86 Claro. Para los administradores. El que tiene que hacer un trabajo puntual tiene que poder hacer solamente eso y no ser administrador para todo. Y para eso se creó sudo. No para convertirse en root a cada rato y sin restricciones.
  86. #87 cuándo se va un administrador, ¿cómo le quitas el acceso? Por cierto, ¿es la misma clave para todos los servidores? ¿Todos los administradores administran todos los servidores?

    ¿Cómo haces la auditoría?
  87. #88 cuándo se va un administrador, ¿cómo le quitas el acceso?

    Deshabilitando su cuenta personal. Recuerda que como yo lo uso, siempre se requieren dos claves. No se puede entrar directamente como root a no ser que sea por la consola local. Por SSH cada usuario tiene su propia clave y después, si necesita, hace su.
  88. #89 digo por aquí como es tu sistema y me echan en el momento {0x1f601}
  89. #90 Bueno, será la opinión de tus jefes que dejar acceso a root con una simple clave de usuario es buena idea. Yo opino todo lo contrario.
comentarios cerrados

menéame