Nonaktifkan semua layanan, kecuali ssh

31

Bagaimana saya bisa menonaktifkan semua layanan kecuali ssh pada distribusi linux modern (berbasis systemd)?

Saya perlu menerapkan mode pemeliharaan .

Semua layanan ini harus dihentikan:

  • postgres
  • postfix
  • apache
  • cangkir
  • cron
  • tempat perlindungan merpati

Tetapi ssh tidak boleh dimatikan, karena ini digunakan untuk melakukan tugas selama mode pemeliharaan.

Tentu saja saya bisa menulis skrip shell yang melompati daftar layanan yang ingin saya nonaktifkan. Tetapi ini terasa seperti saya menemukan kembali sesuatu yang sudah ada, tetapi saya tidak tahu sampai sekarang.

guettli
sumber
1
Jenis tugas apa? Mengapa Anda membutuhkan ini?
ewwhite
@ user430214 Saya memperbarui pertanyaan. Saya menambahkan: Tentu saja saya bisa menulis skrip shell yang melompati daftar layanan yang ingin saya nonaktifkan. Tetapi ini terasa seperti saya menemukan kembali sesuatu yang sudah ada, tetapi saya tidak tahu sampai sekarang.
guettli

Jawaban:

55

Ini terdengar sangat mirip runlevel , diganti dengan target di Systemd. Jadi, alih-alih menulis skrip yang memulai dan menghentikan daftar layanan, Anda bisa membuat maintenance.targetyang hanya berisi layanan yang diperlukan saja, seperti SSH. Tentu saja, SSH tidak cukup berguna tanpa jaringan, jadi dalam contoh ini sederhana emergency-net.targetdimodifikasi untuk memasukkan 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

Kemudian, Anda bisa masuk ke mode pemeliharaan menggunakan

# systemctl isolate maintenance.target

dan kembali

# systemctl isolate multi-user.target
Esa Jokinen
sumber
1
Terima kasih banyak atas jawaban ini. Ini menunjukkan kepada saya bahwa bertanya itu berguna, bahkan jika Anda berpikir tidak ada jawaban yang bagus selain menulis skrip shell kotor. Emergency-net.target adalah solusi sederhana dan elegan - hebat :-)
guettli
Tentu saja, karena ini juga menangani semua dependensi, dan Anda tidak perlu memperbarui skrip Anda setiap kali memasang layanan baru.
Esa Jokinen
3

Pertama-tama daftarkan layanan Anda dan cari nama-sistemnya yang sesuai.

Kemudian buat daftar dan hentikan setiap anggota daftar untuk memasuki pemeliharaan, mulai setiap anggota setelah pemeliharaan.

Nils
sumber
5
Kenapa tidak pakai saja systemctl isolate?
Chris Down