Comment empêcher Ubuntu de démarrer des démons que je n'ai pas explicitement demandé d'exécuter?

8

L'un des principes de base de la sécurité informatique est de ne jamais exécuter ce dont vous n'avez pas besoin.

Je pgrepcherchais un processus aujourd'hui lorsque j'ai remarqué que ma machine Ubuntu 9.04 (bureau) exécutait un démon de serveur git. Après un bref juron, j'ai découvert que le git-daemon-runpaquet avait été (probablement par inadvertance) installé, et le retirer s'est débarrassé de ce processus (et s'est assuré qu'il ne serait pas redémarré plus tard).

Mais dans d'autres cas, je veux que le paquetage serveur soit installé, mais je ne veux pas que le démon serveur fonctionne. Par exemple, j'utilise lighttpdpour les tests internes (il est démarré par des scripts de test spécifiques pour certaines applications, et n'écoute que sur localhost dans ces configurations) mais je ne veux pas qu'il écoute les connexions externes avec un fichier de configuration aléatoire. (Si je voulais exécuter une écoute pour les connexions externes, je la configurerais et l'exécuterais moi-même.)

Je n'aime vraiment pas exécuter toutes sortes de serveurs aléatoires dont je n'ai pas besoin sur les machines exposées à Internet, car qui sait quels trous de sécurité ils ouvrent. Et je préfère ne pas avoir à me soucier des pare-feu, car c'est encore une autre source potentielle d'erreurs et de mauvaises configurations qui peuvent ouvrir des failles de sécurité. Ce n'est pas si difficile d'avoir des machines Unix configurées pour ne démarrer aucun serveur à moins que l'administrateur ne le demande spécifiquement; NetBSD (et OpenBSD aussi, je pense) se présente de cette façon par défaut.

Comment configurer mes systèmes Ubuntu pour ne jamais démarrer aucun type de démon de serveur à moins que je ne lui dise spécifiquement que je veux qu'il démarre?

(Demander d'avoir un paquet installé n'est pas, dans mon livre, demander de démarrer un serveur. S'il est censé l'être, c'est une interface utilisateur terrible, car de nombreuses installations de paquet n'ont même pas de serveur pour démarrer, donc cela fait il est beaucoup trop facile de démarrer un serveur par inadvertance sans réaliser que vous l'avez fait.)

EDIT: Juste pour être clair, le problème n'est pas que je veux pouvoir arrêter les serveurs existants. Le problème est que je ne veux pas que de nouveaux serveurs démarrent sans demande explicite. Cela signifie que je devrais être en mesure d'effectuer n'importe quelle tâche d'administrateur système, telle que l'installation d'un package, et être sûr qu'aucun serveur n'a démarré. La plupart des réponses n'abordent pas ce point.

cjs
la source
3
J'ai fouillé à l'intérieur des paquets .deb pendant environ 10 minutes. Ils incluent un script "postinst" qui est exécuté après l'installation du package. La dernière commande qu'ils exécutent est souvent "invoke-rc.d <nomservice> start", ce qui provoque le démarrage du service lui-même. L'appel à invoke-rc.d est généralement câblé sans vérification d'une variable de configuration globale pour contrôler si oui ou non démarrer réellement le service. Ainsi, ce serait à invoke-rc.d de prendre une décision sur le démarrage du service. C'est là que mon enquête s'est terminée.
Barry Brown
2
comme Barry l'a expliqué, Ubuntu n'est clairement pas pour vous. Désolé, mais vous devez 1) changer de distribution ou 2) garder un bon œil sur ce que fait ubuntu.
elcuco le
La raison pour laquelle Ubuntu / Debian diffèrent de Fedora à cet égard, c'est que Debian installe uniquement ce que vous demandez, tandis que Fedora installe l'évier de la cuisine. Donc, dans Fedora, il est courant d'avoir un paquet installé que vous n'avez pas demandé, donc il ne fonctionne pas par défaut. Dans Debian, vous avez explicitement installé le paquet, donc vous vous attendez à ce que le serveur fonctionne immédiatement.
TRS-80
les mises à jour. Lequel avez-vous essayé? et qu'est-ce qui a fonctionné? a
Nandhini Anand
Malheureusement, il ne semble pas y avoir d'autre solution que de "vérifier soigneusement quels logiciels s'exécutent sur votre système après tout changement de package", un processus clairement sujet aux erreurs.
cjs

Réponses:

12

Installez sysv-rc-conf et désactivez simplement les services que vous ne souhaitez pas exécuter.

sudo apt-get install sysv-rc-conf
DESCRIPTION: sysv-rc-conf fournit une interface facile à utiliser pour gérer les liens symboliques "/etc/rc{runlevel}.d/".

texte alternatif

Jindrich
la source
Comment cela empêche-t-il l’activation de nouveaux serveurs par le système d’emballage?
cjs
Veuillez lire le commentaire de Barry Brown, il explique pourquoi cette réponse est obsolète.
elcuco
8

En tant que personne ayant un problème similaire, je pense très fortement qu'il n'est pas raisonnable pour un démon de présumer que l'utilisateur veut qu'il démarre par défaut: il existe de nombreux cas d'utilisation parfaitement valides où ce n'est pas le cas. (Sans compter qu'il n'est pas toujours clair quelles installations incluent réellement un démon.) Le démon peut être désactivé par défaut, l'utilisateur peut être explicitement interrogé ou il peut y avoir un paramètre central. Tout le reste est un raisonnement Microsoftian totalement indigne de Linux.

De plus, je trouve que plusieurs des commentaires ci-dessus sur l'affiche originale sont impolis, condescendants et manquent de constructivité. Suggérer, par exemple, qu'il devrait accepter le comportement par défaut ou modifier la distribution est vraiment remarquable. Premièrement, aucune distribution ne sera un ajustement parfait, et passer à une nouvelle distribution avec du travail supplémentaire associé est peu susceptible d'être une solution réaliste par rapport à cette seule chose. Deuxièmement, les utilisateurs expérimentés de Linux / Unix sont habitués à ce que chaque comportement soit modifiable: un problème peut prendre deux heures avant de creuser, mais il est ensuite résolu. La chose naturelle à faire pour un tel utilisateur, lorsque les valeurs par défaut ne conviennent pas, est de supposer l'existence d'une solution de contournement et d'essayer de savoir de quoi il s'agit. Troisièmement, dans l'étiquette des logiciels libres et open source, If you don't like it, then patch the source code!'' is an acceptable response; however,..., alors faites une randonnée! '' Ne l'est pas.


la source
5

L'attente du système de conditionnement est que lorsque vous installez un package de serveur, vous souhaitez exécuter ce serveur. C'est une attente raisonnable.

Comment configurer mes systèmes Ubuntu pour ne jamais démarrer aucun type de serveur à moins 
dire spécifiquement à Je veux qu'un serveur démarre? 

Roy a répondu à cette question pour vous. Lorsque vous installez un nouveau package de serveur, vous arrêtez ce serveur, puis utilisez un outil tel que sysv-rc-conf pour empêcher le démarrage de ce serveur au prochain redémarrage ou changement de niveau d'exécution. Oui, vous devez travailler vous-même, et c'est raisonnable car vous configurez votre système différemment de la plupart des gens qui utilisent Ubuntu.

Par exemple, j'utilise lighttpd pour les tests internes (il est démarré par des scripts de test spécifiques 
pour certaines applications, et écoute uniquement sur localhost) mais je ne le veux généralement pas 
écouter les connexions extérieures.

Vous devriez investir un peu de temps pour apprendre à configurer lighttpd afin qu'il soit configuré en permanence pour écouter uniquement sur localhost. Ensuite, lorsque vous démarrez le serveur, vous savez qu'il est déjà configuré à votre convenance.

Condamné
la source
3
Premièrement, je ne pense pas que ce soit une attente raisonnable; que j'ai installé un binaire lighttpd ne signifie pas que je veux exécuter un serveur public. Deuxièmement, je ne sais pas toujours que j'ai installé un package serveur; ils sont parfois attirés par d'autres packages que j'ai installés.
cjs le
1
Oh, et je sais comment configurer lighttpd pour écouter uniquement sur localhost, et j'ai souvent une demi-douzaine de vérifications de projets sur un système particulier qui le font.
cjs le
5

J'ai trouvé ce qui suit utile pour installer Ubuntu dans des environnements chroot, comme le debootstrapping de nouveaux invités xen. Le mérite revient aux scripts xen-tools pour m'avoir enseigné ceci:

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

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

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

Avec ce script en place, apt ne démarrera pas les services après l'installation. Cependant, ce n'est que la moitié de votre problème, car les liens symboliques sont toujours en place, les services démarreront après le prochain démarrage. Je ne sais pas comment arrêter cela automatiquement :(


la source
1
cela peut casser la logrotation nginx parce que l'utilisation /etc/logrotate.d/nginx d'Ubuntu invoke-rc.d nginx rotatedans la section postrotate J'utilise une version qui est légèrement différente gist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
hostmaster
Il empêche également le démon de s'arrêter lorsque ses packages sont supprimés du système. Ce n'est pas bien.
hostmaster
4

Barry Brown, dans un commentaire sur la question, fournit un indice pour une réponse possible.

Le système de packaging utilise le invoke-rc.dprogramme pour démarrer le serveur après l'installation du package. [1] Ce programme s'exécutera /usr/sbin/policy-rc.dpour déterminer la stratégie de démarrage de ce serveur.

Le package policyrcd-script-zg2inclut le policy-rc.dscript, qui s'exécute /etc/policy-rc.davec ses paramètres s'il est présent, et se termine avec le code d'erreur de ce script, ou se termine avec 0 (succès) sinon. L'interface policy-rc.ddevrait offrir est brièvement documentée dans la invoke-rc.dgestion, et beaucoup plus en détail dans /usr/share/doc/sysv-rc/README.policy-rc.d.gz.

La prochaine étape, je suppose, consiste pour moi à tester cela.

Reste à répondre:

[1] Quelles autres parties du système utilisent invoke-rc.d? [2] Est-ce que cela fonctionne réellement?

cjs
la source
3

Que diriez-vous de regarder sur les répertoires où se trouvent les scripts d'initialisation? Vous pouvez probablement rendre ces répertoires non modifiables avec la commande chatr.

ojblass
la source
Hm. Je me demande pourquoi celui-ci a été déclassé? C'est un hack, mais au moins cela résout mon problème, contrairement à la plupart des réponses ici.
cjs
J'ai voté pour cela parce que c'est la solution la plus proche que vous obtiendrez probablement avec Ubuntu, bien que je pense que rendre les répertoires init non modifiables est une idée terrible (imaginez simplement essayer d'installer un service que vous VOULEZ démarrer). Je sais que find peut être utilisé pour surveiller les changements dans les fichiers et les répertoires, bien que je ne sois pas assez familier avec l'outil pour vous donner une commande exacte. Je voudrais demander à l'un des gourous une commande qui fonctionne, la coller dans un script bash et l'exécuter après chaque installation, puis utiliser sysv-rc-conf pour désactiver manuellement les services dont vous ne voulez pas.
Babu
2

Idéalement, c'est une question de post-instscripts. Au début du projet Ubuntu, un effort intentionnel a été fait pour forcer les valeurs par défaut saines aux scripts de configuration de dpkg, afin que vous et moi n'ayons pas à répondre à toutes les fichues questions qui pourraient surgir, ou perdre du temps à rechercher les options. Maintenant qu'Ubuntu a configuré cela, beaucoup de gens ne savent pas qu'il existe. Il devrait être possible de poser une question sur l'installation ou non en tant que démon, mais je ne vois pas de telles questions dans les quelques packages que j'ai vérifiés.

Peut-être devriez-vous vous engager avec l'équipe du serveur Ubuntu et peut-être même la politique Debian pour améliorer les choses.

jldugger
la source
1

Vous pouvez essayer de créer un script qui vérifiera la liste des services installés et les comparera à une liste de services autorisés. Si le service ne figure pas dans la liste, le script le désactivera. Le script doit être exécuté au démarrage avant les services communs. Et peut-être exécuté comme un démon pour fermer les services fraîchement installés. Ou si possible de s'exécuter automatiquement après chaque installation pour rechercher de nouveaux services.

PS Je peux penser à deux causes possibles de démarrage des services après l'installation du package. C'est la fonction de package ou la fonction de gestionnaire de packages. Si c'est une fonctionnalité de package, je ne pense pas qu'il existe un moyen de changer le comportement du service. S'il s'agit d'une fonction de gestionnaire de packages, il existe peut-être une option de configuration pour empêcher le démarrage du service après l'installation. Je ne sais pas pour le moment, alors lancez simplement des idées.

Souple
la source
1

Si vous configurez iptables avec une politique par défaut DROP pour la chaîne INPUT, vous n'avez pas à vous soucier autant des ports d'écoute car ils seront bloqués par iptables. Le serveur Ubuntu est livré avec une interface conviviale pour iptables si vous êtes nouveau sur iptables.

D'après votre message, il me semble que vous pourriez être plus heureux avec une distribution Linux différente telle que CentOS. Le processus d'installation par défaut de CentOS vous permettra d'installer différents méta-packages, et en n'en sélectionnant aucun, vous pourriez être plus satisfait de votre installation de base.

En outre, je pense que votre question aurait pu être un peu plus claire si vous remplacez «service» ou «démon» par le mot «serveur» lorsque vous voulez dire quelque chose qui s'exécute sur un serveur. Les gens ont tendance à utiliser «serveur» pour faire référence à une boîte physique ou à une machine virtuelle. Bien que je suppose que ce n'est pas techniquement incorrect.

Kyle Brandt
la source
0

Jetez un œil au niveau d'exécution dans lequel vous vous trouvez avec la commande 'runlevel' et supprimez tous les liens symboliques dans / etc / rc <runlevel> .d /. Vous voudrez probablement que certains démons soient exécutés, mais la plupart pourraient probablement être supprimés.

Vous pouvez les ajouter à nouveau avec un lien symbolique à partir du script dans /etc/init.d.

Je pense qu'il y a une commande qui fera la même astuce et ajoutera tous les liens symboliques pour tous les niveaux d'exécution, mais je le fais juste manuellement.

résonateur
la source
Le problème est que je ne sais pas quand des liens symboliques pourraient être ajoutés. Je dois empêcher tout ce qui ajoute des liens symboliques et démarre des serveurs (le système de conditionnement, principalement, semble-t-il) de le faire à moins que je ne prenne une action qui lui demande spécifiquement de le faire.
cjs
Probablement plus simple et plus fiable pour configurer simplement un pare-feu. Peut-être script quelque chose pour prendre un port et un protocole comme argument pour ajouter / supprimer des règles de pare-feu pour faciliter les choses.
résonateur
ou exécutez votre machine en mode mono-utilisateur ... Cela pourrait introduire plus de problèmes qu'elle n'en enregistre cependant.
résonateur
Je suis nouveau sur Ubuntu, étant un utilisateur de longue date de Fedora / RedHat. C'est une chose à propos d'Ubuntu qui me semble étrange: les services sont activés par défaut. Sous Fedora, les services sont désactivés par défaut.
Barry Brown
L'exécution d'une machine de bureau ou d'un serveur en mode mono-utilisateur n'est pas très pratique.
cjs
0

Alternativement, vous pouvez utiliser la update-rc.dcommande.

Pour désactiver le apache2service

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

ÉDITER:

Cela signifie que je devrais être en mesure d'effectuer n'importe quelle tâche d'administrateur système, telle que l'installation d'un package, et être sûr qu'aucun serveur n'a démarré.

Ce comportement est contrôlé par des scripts à l'intérieur des packages .deb. Lorsque vous installez un package, ce script est exécuté automatiquement. IIRC, nous ne pouvons pas contourner ce script.

Arie K
la source
0

Fondamentalement, vous ne pouvez pas.

Si vous installez un package et qu'il démarre un service, c'est ce qui se produit. Si vous n'aimez pas, signalez un bug sur https://launchpad.net/ .

Vous ne devriez pas tourner autour des paquets deb. Ce genre de chose pourrait revenir et te mordre dans le cul plus tard.

Si vous voulez que «rien ne fonctionne par défaut» de style OpenBSD, exécutez OpenBSD. Toutes les distributions ne conviennent pas à tout le monde. Il y a forcément des choses dans Ubuntu que vous n'aimez pas. Si vous souhaitez toujours exécuter ubuntu, vous devrez vérifier les services en cours d'exécution et désactiver les choses.

Rory
la source
-2

Vous pouvez activer et désactiver certains services dans le menu Système> Services de GNOME

dmityugov
la source