¿Cómo evito que Ubuntu inicie demonios que no he pedido explícitamente que ejecute?

8

Uno de los principios básicos de la seguridad informática es nunca ejecutar nada que no necesite.

Estaba pgrephaciendo ping para un proceso hoy cuando noté que mi máquina Ubuntu 9.04 (computadora de escritorio) estaba ejecutando un demonio de servidor git. Después de un juramento rápido, descubrí que el git-daemon-runpaquete se había instalado (probablemente inadvertidamente) y al eliminarlo se eliminó ese proceso (y me aseguré de que no se reiniciara más tarde).

Pero en otros casos, quiero que se instale el paquete del servidor, pero no quiero que se ejecute el demonio del servidor. Por ejemplo, lo uso lighttpdpara pruebas internas (se inicia mediante scripts de prueba específicos para algunas aplicaciones, y solo escucha en localhost en esas configuraciones) pero no quiero que escuche conexiones externas con algún archivo de configuración aleatorio. (Si quisiera ejecutar uno escuchando conexiones externas, lo configuraría y lo ejecutaría yo mismo).

Realmente no me gusta ejecutar todo tipo de servidores aleatorios que no necesito en máquinas expuestas a Internet, ya que quién sabe qué agujeros de seguridad abren. Y prefiero no tener que molestar con los firewalls, ya que esa es otra fuente potencial de errores y configuraciones erróneas que pueden abrir agujeros de seguridad. No es tan difícil tener máquinas Unix configuradas para no iniciar ningún servidor a menos que el administrador se lo solicite específicamente; NetBSD (y OpenBSD también, creo) vienen de esta manera por defecto.

¿Cómo configuro mis sistemas Ubuntu para que nunca inicien ningún tipo de demonio de servidor a menos que le diga específicamente que quiero que se inicie?

(En mi libro, pedir que se instale un paquete no es pedir iniciar un servidor. Si se supone que es, es una interfaz de usuario terrible, ya que muchas instalaciones de paquetes ni siquiera tienen un servidor para iniciar, por lo que es demasiado fácil iniciar un servidor sin darse cuenta sin darse cuenta de que lo ha hecho).

EDITAR: Solo para dejarlo claro, el problema no es que quiera poder detener los servidores existentes. El problema es que no quiero que se inicien nuevos servidores sin una solicitud explícita. Esto significa que debería poder hacer cualquier tarea de administrador de sistemas, como instalar un paquete, y estar seguro de que no se han iniciado servidores. La mayoría de las respuestas no abordan este punto.

cjs
fuente
3
Estuve hurgando dentro de los paquetes .deb durante unos 10 minutos. Incluyen un script "postinst" que se ejecuta después de instalar el paquete. El último comando que ejecutan suele ser "invoke-rc.d <servicename> start", lo que hace que el servicio se inicie. La llamada a invoke-rc.d generalmente está programada sin ninguna verificación de una variable de configuración global para controlar si realmente se inicia o no el servicio. Por lo tanto, dependería de invoke-rc.d tomar una decisión sobre si iniciar el servicio. Ahí es donde terminó mi investigación.
Barry Brown
2
Como explicó Barry, Ubuntu claramente no es para ti. Lo sentimos, pero tienes que 1) cambiar la distribución, o 2) vigilar lo que sea que ubuntu esté haciendo.
elcuco
La razón por la que Ubuntu / Debian difiere de Fedora a este respecto, es que Debian solo instala lo que usted pide, mientras que Fedora instala el fregadero de la cocina. Entonces, en Fedora es común tener un paquete instalado que no solicitó, por lo que el valor predeterminado es no ejecutarse. En Debian, instaló explícitamente el paquete, por lo que se espera que desee que el servidor se ejecute de inmediato.
TRS-80
alguna actualización. ¿Cuál probaste? y que funciono a
Nandhini Anand
Es triste decirlo, parece que no hay otra solución que no sea "verificar cuidadosamente qué software se está ejecutando en su sistema después de cualquier cambio de paquetes", claramente un proceso bastante propenso a errores.
cjs

Respuestas:

12

Instale sysv-rc-conf y simplemente desactive los servicios que no desea ejecutar.

sudo apt-get install sysv-rc-conf
DESCRIPCIÓN: sysv-rc-conf ofrece una interfaz fácil de usar para administrar enlaces simbólicos "/etc/rc{runlevel}.d/".

texto alternativo

Jindrich
fuente
¿Cómo evita esto que el sistema de empaque active los nuevos servidores?
cjs
Lea el comentario de Barry Brown, explica por qué esta respuesta es obscura.
elcuco
8

Como alguien con un problema similar, me siento muy fuertemente que es no razonable para un demonio para presumir que el usuario quiere que comenzó por defecto: Hay muchos casos de uso perfectamente válidas cuando esto no sea el caso. (Sin mencionar que no siempre está claro qué instalaciones realmente incluyen un demonio). El demonio podría estar desactivado por defecto, el usuario podría ser consultado explícitamente o podría haber una configuración central. Cualquier otra cosa es el razonamiento Microsoftian completamente indigno de Linux.

Además, encuentro que varios de los comentarios anteriores al póster original son groseros, condescendientes y carecen de constructividad. Sugerir, por ejemplo, que debería aceptar el comportamiento predeterminado o cambiar la distribución, es realmente notable. En primer lugar, ninguna distribución encajará perfectamente, y es poco probable que saltar a una nueva distribución con trabajo adicional asociado sea una solución realista sobre esta única cosa. En segundo lugar, los usuarios competentes de Linux / Unix están acostumbrados a que cada comportamiento sea cambiante: un problema puede demorar dos horas en excavar, pero luego se soluciona. Lo natural que debe hacer un usuario así, cuando los valores predeterminados no son adecuados, es asumir la existencia de una solución alternativa y tratar de averiguar qué es. En tercer lugar, en el código abierto y la etiqueta del software libre, If you don't like it, then patch the source code!'' is an acceptable response; however,..., ¡entonces haz una caminata! '' No lo es.


fuente
5

La expectativa del sistema de empaquetado es que cuando instala un paquete de servidor, desea ejecutar ese servidor. Es una expectativa razonable.

¿Cómo configuro mis sistemas Ubuntu para que nunca inicie ningún tipo de servidor a menos que yo 
específicamente decirle que quiero que se inicie un servidor? 

Roy ha respondido esta pregunta por ti. Cuando instala un nuevo paquete de servidor, detiene ese servidor y luego usa una herramienta como sysv-rc-conf para evitar que ese servidor se inicie en el próximo reinicio o cambio de nivel de ejecución. Sí, tiene que hacer un trabajo usted mismo, y eso es razonable porque está configurando su sistema de manera diferente a la mayoría de las personas que usan Ubuntu.

Por ejemplo, uso lighttpd para pruebas internas (se inicia mediante scripts de prueba específicos 
para algunas aplicaciones, y solo escucha en localhost) pero generalmente no lo quiero 
escuchando conexiones externas.

Debería invertir algo de tiempo para aprender cómo configurar lighttpd para que esté configurado permanentemente para escuchar solo en localhost. Luego, cuando inicias el servidor, sabes que ya está configurado a tu gusto.

Condenar
fuente
3
Primero, no creo que sea una expectativa razonable; que haya instalado un binario lighttpd no significa que quiera ejecutar un servidor público. Segundo, no siempre sé que he instalado un paquete de servidor; a veces son arrastrados por otros paquetes que he instalado.
cjs
1
Ah, y sé cómo configurar lighttpd para escuchar solo en localhost, y a menudo tengo media docena o más de proyectos en cualquier sistema en particular que lo haga.
cjs
5

Encontré lo siguiente útil para instalar Ubuntu en entornos chroot, como debootstrapping de nuevos invitados xen. El crédito en realidad va a los scripts de xen-tools por enseñarme esto:

echo '#! / bin / sh'> /usr/sbin/policy-rc.d

echo 'salida 101' >> /usr/sbin/policy-rc.d

chmod 755 /usr/sbin/policy-rc.d

Con este script en su lugar, apt no iniciará los servicios después de la instalación. Sin embargo, esto es solo la mitad de su problema, ya que los enlaces simbólicos todavía están en su lugar, los servicios comenzarán después del próximo arranque. No sé cómo detener eso automáticamente :(


fuente
1
puede romper la rotación de nginx porque el uso de /etc/logrotate.d/nginx de Ubuntu invoke-rc.d nginx rotateen la sección de postrotación estoy usando una versión que es ligeramente diferente gist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
hostmaster
También evita que el demonio se detenga cuando sus paquetes se eliminan del sistema. Esto no está bien.
hostmaster
4

Barry Brown, en un comentario sobre la pregunta, proporciona una pista sobre una posible respuesta.

El sistema de empaque utiliza el invoke-rc.dprograma para iniciar el servidor después de instalar el paquete. [1] Este programa se ejecutará /usr/sbin/policy-rc.dpara determinar la política al iniciar ese servidor.

El paquete policyrcd-script-zg2incluye el policy-rc.dscript, que se ejecuta /etc/policy-rc.dcon sus parámetros si está presente y sale con el código de error de ese script, o sale con 0 (éxito) de lo contrario. Se policy-rc.despera que la interfaz que se ofrece se documente brevemente en la invoke-rc.dgestión, y mucho más ampliamente en /usr/share/doc/sysv-rc/README.policy-rc.d.gz.

El siguiente paso, supongo, es que pruebe esto.

Lo que queda por responder:

[1] ¿Qué otras partes del sistema usan invoke-rc.d? [2] ¿Esto realmente funciona?

cjs
fuente
3

¿Qué tal mirar en los directorios donde se encuentran los scripts de inicio? Es probable que pueda hacer que esos directorios no se puedan modificar con el comando chatr.

ojblass
fuente
Hm. Me pregunto por qué este fue rechazado? Es un truco, pero al menos aborda mi problema, a diferencia de la mayoría de las respuestas aquí.
cjs
Voté esto porque es la solución más cercana que probablemente obtendrás con Ubuntu, aunque creo que hacer que los directorios de inicio no se puedan modificar es una idea terrible (solo imagina intentar instalar un servicio que QUIERES iniciar). Sé que find se puede usar para monitorear cambios en archivos y directorios, aunque no estoy lo suficientemente familiarizado con la herramienta para darle un comando exacto. Le pediría a uno de los gurús un comando de trabajo, pegarlo en un script bash y ejecutarlo después de cada instalación, luego usar sysv-rc-conf para deshabilitar manualmente los servicios que no desea.
Babu
2

Idealmente, esto es una cuestión de post-instguiones. Al comienzo del proyecto Ubuntu, se hizo un esfuerzo intencional para forzar los valores predeterminados razonables a los scripts de configuración dpkg, para que usted y yo no tengamos que responder a todas las malditas preguntas que puedan surgir, o perder el tiempo investigando las opciones. Ahora que Ubuntu ha configurado esto, muchas personas no saben que existe. Debería ser posible hacer una pregunta sobre si instalar como demonio o no, pero no veo ninguna de esas preguntas en los pocos paquetes que verifiqué.

Quizás debería comprometerse con el equipo del servidor de Ubuntu e incluso con la política de Debian para mejorar las cosas.

jldugger
fuente
1

Puede intentar crear un script que verifique la lista de servicios instalados y los verifique con alguna lista de servicios permitidos. Si el servicio no está en la lista, el script lo desactivará. El script debe ejecutarse al inicio antes de los servicios comunes. Y tal vez ejecutar como demonio para cerrar los servicios recién instalados. O, si es posible, ejecutar automáticamente después de cada instalación para buscar nuevos servicios.

PD: Puedo pensar en dos posibles causas de que los servicios comiencen después de la instalación del paquete. Esa es la función del paquete, o esa es la función del administrador de paquetes. Si esa es la función del paquete, no creo que haya alguna forma de cambiar el comportamiento del servicio. Si esa es la función del administrador de paquetes, tal vez haya alguna opción de configuración para evitar el inicio del servicio después de la instalación. No lo sé en este momento, así que solo lanzo ideas.

Ágil
fuente
1

Si configura iptables con una política predeterminada de DROP para la cadena INPUT, entonces no tiene que preocuparse tanto por los puertos de escucha porque iptables los bloqueará. El servidor Ubuntu viene con una interfaz fácil de usar para iptables si eres nuevo en iptables.

Desde su publicación, me parece que podría estar más feliz con una distribución de Linux diferente, como CentOS. El proceso de instalación predeterminado para CentOS le permitirá instalar diferentes metapaquetes, y al no seleccionar ninguno, podría estar más feliz con su instalación base.

Además, creo que su pregunta podría haber sido un poco más clara si sustituye 'servicio' o 'demonio' ​​por la palabra 'servidor' cuando se refiere a algo que se ejecuta en un servidor. Las personas tienden a usar 'servidor' para referirse a una caja física o VM. Aunque supongo que no es técnicamente incorrecto.

Kyle Brandt
fuente
0

Observe en qué nivel de ejecución se encuentra con el comando 'runlevel' y elimine todos los enlaces simbólicos en / etc / rc <runlevel> .d /. Probablemente querrás que se ejecuten algunos de los demonios, pero la mayoría probablemente podría eliminarse.

Puede agregarlos nuevamente con un enlace simbólico del script en /etc/init.d.

Creo que hay un comando que hará el mismo truco y agregará todos los enlaces simbólicos para todos los niveles de ejecución, pero solo lo hago manualmente.

resonador
fuente
El problema es que no sé cuándo se pueden agregar enlaces simbólicos. Necesito evitar que lo que sea que esté agregando enlaces simbólicos y servidores de inicio (el sistema de empaque, principalmente, al parecer) lo haga a menos que tome alguna acción que específicamente lo solicite.
cjs
Probablemente más fácil y más confiable para configurar un firewall. Tal vez escriba algo para tomar un puerto y un protocolo como argumento para agregar / eliminar las reglas del firewall para facilitar las cosas.
resonador
o ejecute su máquina en modo de usuario único ... Sin embargo, eso podría presentar más problemas de los que ahorra.
resonador
Soy nuevo en Ubuntu, siendo un usuario de Fedora / RedHat desde hace mucho tiempo. Eso es algo sobre Ubuntu que me parece extraño: los servicios están activados por defecto. Bajo Fedora, los servicios están desactivados por defecto.
Barry Brown
Ejecutar una máquina de escritorio o un servidor en modo de usuario único no es muy práctico.
cjs
0

Alternativamente, puede usar el update-rc.dcomando.

Para deshabilitar el apache2servicio

# update-rc.d [-f] apache2 remove

EDITAR:

Esto significa que debería poder hacer cualquier tarea de administrador de sistemas, como instalar un paquete, y estar seguro de que no se han iniciado servidores.

Este comportamiento está controlado por scripts dentro de paquetes .deb. Cuando instala un paquete, este script se ejecuta automáticamente. IIRC, no podemos pasar por alto este script.

Arie K
fuente
0

Básicamente, no puedes.

Si instala un paquete e inicia un servicio, eso es lo que sucede. Si no le gusta, presente un error en https://launchpad.net/ .

No deberías jugar con los paquetes deb. Este tipo de cosas podría volver y morderte el trasero más tarde.

Si desea el estilo de OpenBSD "nada se ejecuta por defecto", ejecute OpenBSD. No todas las distribuciones se adaptan a todos. Es probable que haya cosas en Ubuntu que no te gusten. Si todavía desea ejecutar ubuntu, deberá verificar los servicios en ejecución y apagar las cosas.

Rory
fuente
-2

Puede habilitar y deshabilitar algunos servicios en Sistema> Menú Servicios en GNOME

dmityugov
fuente