Desativar todos os serviços, exceto ssh

31

Como posso desabilitar todos os serviços, exceto o ssh, em distribuições Linux modernas (baseadas no sistema)?

Eu preciso implementar um modo de manutenção .

Todos esses serviços precisam estar inoperantes:

  • postgres
  • postfix
  • apache
  • copos
  • cron
  • dovecot

Mas o ssh não deve ser desligado, pois isso é usado para executar tarefas durante o modo de manutenção.

É claro que eu poderia escrever um shell script que percorre uma lista de serviços que eu gostaria de desativar. Mas parece que eu estou reinventando algo que já existe, mas que eu não sei até agora.

guettli
fonte
11
Que tipo de tarefas? Por que você precisa disso?
ewwhite
@ user430214 Atualizei a pergunta. Eu adicionei: é claro que eu poderia escrever um script de shell que percorresse uma lista de serviços que gostaria de desativar. Mas parece que eu estou reinventando algo que já existe, mas que eu não sei até agora.
guettli

Respostas:

55

Isso parece muito com os níveis de execução , substituídos pelos destinos no Systemd. Portanto, em vez de escrever um script que inicie e pare uma lista de serviços, você poderá criar um novo maintenance.targetcontendo apenas os serviços necessários, como SSH. Obviamente, o SSH não é muito útil sem a rede, portanto, neste exemplo, um simples emergency-net.targeté modificado para incluir o 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

Em seguida, você pode entrar no modo de manutenção usando

# systemctl isolate maintenance.target

e volta

# systemctl isolate multi-user.target
Esa Jokinen
fonte
11
Muito obrigado por esta resposta. Isso me mostra que perguntar é útil, mesmo que você ache que não há uma resposta legal, exceto escrever um script de shell sujo. O emergency-net.target é uma solução simples e elegante - grande :-)
guettli
Certamente é, pois ele também cuida de todas as dependências e você não precisa atualizar seu script sempre que instalar um novo serviço.
precisa
3

Primeiro, liste seus serviços e procure os nomes de systemd correspondentes.

Em seguida, crie uma lista e pare cada membro da lista para entrar na manutenção, inicie cada membro após a manutenção.

Nils
fonte
5
Por que não usar apenas systemctl isolate?
Chris Baixo