Deshabilitar todos los servicios, excepto ssh

31

¿Cómo puedo deshabilitar todos los servicios excepto ssh en las distribuciones modernas de Linux (basadas en systemd)?

Necesito implementar un modo de mantenimiento .

Todos estos servicios deben estar inactivos:

  • postgres
  • sufijo
  • apache
  • tazas
  • cron
  • palomar

Pero ssh no debe cerrarse, ya que esto se acostumbra a realizar tareas durante el modo de mantenimiento.

Por supuesto, podría escribir un script de shell que recorra una lista de servicios que me gustaría deshabilitar. Pero esto parece que estoy reinventando algo que ya existe, pero que no sé hasta ahora.

guettli
fuente
1
¿Qué tipo de tareas? ¿Por qué necesitas esto?
ewwhite
@ user430214 Actualicé la pregunta. Agregué: Por supuesto, podría escribir un script de shell que recorra una lista de servicios que me gustaría deshabilitar. Pero esto parece que estoy reinventando algo que ya existe, pero que no sé hasta ahora.
guettli

Respuestas:

55

Esto se parece mucho a los niveles de ejecución , reemplazados por objetivos en Systemd. Entonces, en lugar de escribir un script que inicie y detenga una lista de servicios, puede crear uno nuevo que maintenance.targetcontenga solo los servicios necesarios, como SSH. Por supuesto, SSH no es muy útil sin redes, por lo que en este ejemplo emergency-net.targetse modifica un simple para incluir SSH.

[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes

Luego, puede ingresar a su modo de mantenimiento usando

# systemctl isolate maintenance.target

y de regreso

# systemctl isolate multi-user.target
Esa Jokinen
fuente
1
Muchas gracias por esta respuesta. Me muestra que preguntar es útil, incluso si crees que no hay una buena respuesta, excepto escribir un script de shell sucio. Emergency-net.target es una solución simple y elegante - genial :-)
guettli
Ciertamente lo es, ya que también se encarga de todas las dependencias, y no necesita actualizar su script cada vez que instala un nuevo servicio.
Esa Jokinen
3

Primero, enumere sus servicios y busque sus correspondientes nombres de sistema.

Luego construya una lista y detenga a cada miembro de la lista para ingresar al mantenimiento, inicie cada miembro después del mantenimiento.

Nils
fuente
55
¿Por qué no solo usar systemctl isolate?
Chris Down