Wie kann ich verhindern, dass Ubuntu Daemons startet, zu deren Ausführung ich nicht ausdrücklich aufgefordert habe?

8

Eines der Grundprinzipien der Computersicherheit besteht darin, niemals etwas auszuführen, was Sie nicht benötigen.

Ich pgrephabe heute nach einem Prozess gepingt, als ich bemerkte, dass auf meinem Ubuntu 9.04-Computer (Desktop) ein Git-Server-Daemon ausgeführt wurde. Nach einem kurzen Schwur stellte ich fest, dass das git-daemon-runPaket (wahrscheinlich versehentlich) installiert worden war, und durch Entfernen wurde dieser Prozess beseitigt (und sichergestellt, dass es später nicht neu gestartet wurde).

In anderen Fällen möchte ich jedoch, dass das Serverpaket installiert wird, aber nicht, dass der Server-Daemon ausgeführt wird. Zum Beispiel verwende ich es lighttpdfür interne Tests (es wird von bestimmten Testskripten für einige Anwendungen gestartet und hört in diesen Konfigurationen nur auf localhost), aber ich möchte nicht, dass es mit einer zufälligen Konfigurationsdatei auf externe Verbindungen wartet. (Wenn ich einen ausführen möchte, der auf externe Verbindungen wartet, würde ich ihn selbst konfigurieren und ausführen.)

Ich mag es wirklich nicht, alle Arten von zufälligen Servern zu betreiben, die ich auf Computern mit Internet-Exposition nicht benötige, da wer weiß, welche Sicherheitslücken sie öffnen. Und ich ziehe es vor, mich nicht mit Firewalls herumschlagen zu müssen, da dies eine weitere potenzielle Quelle für Fehler und Fehlkonfigurationen ist, die Sicherheitslücken öffnen können. Es ist nicht so schwer, Unix-Computer so zu konfigurieren, dass keine Server gestartet werden, es sei denn, der Administrator fordert ihn ausdrücklich dazu auf. NetBSD (und OpenBSD, glaube ich auch) kommen standardmäßig auf diese Weise.

Wie konfiguriere ich meine Ubuntu-Systeme so, dass sie niemals einen Server-Daemon starten, es sei denn, ich sage ausdrücklich, dass ich möchte, dass er gestartet wird?

(Die Frage, ob ein Paket installiert werden soll, ist in meinem Buch nicht die Aufforderung, einen Server zu starten. Wenn dies der Fall sein soll, handelt es sich um eine schreckliche Benutzeroberfläche, da viele Paketinstallationen nicht einmal einen Server zum Starten haben Es ist viel zu einfach, versehentlich einen Server zu starten, ohne zu bemerken, dass Sie dies getan haben.)

EDIT: Nur um es klar zu machen, ist das Problem nicht, dass ich in der Lage sein möchte, vorhandene Server zu stoppen. Das Problem ist, dass ich nicht möchte, dass neue Server ohne eine explizite Anfrage gestartet werden. Dies bedeutet, dass ich in der Lage sein sollte, alle Systemadministrationsaufgaben auszuführen, z. B. ein Paket zu installieren, und sicher sein sollte, dass keine Server gestartet wurden. Die meisten Antworten sprechen diesen Punkt nicht an.

cjs
quelle
3
Ich habe ungefähr 10 Minuten lang in .deb-Paketen gestöbert. Sie enthalten ein "postinst" -Skript, das nach der Installation des Pakets ausgeführt wird. Der letzte Befehl, den sie ausführen, ist häufig "invoke-rc.d <Servicename> start", wodurch der Dienst selbst gestartet wird. Der Aufruf von invoke-rc.d ist normalerweise fest verdrahtet, ohne dass eine globale Konfigurationsvariable überprüft werden muss, um zu steuern, ob der Dienst tatsächlich gestartet werden soll oder nicht. Daher wäre es an invoke-rc.d, eine Entscheidung darüber zu treffen, ob der Dienst gestartet werden soll. Dort endete meine Untersuchung.
Barry Brown
2
Wie Barry erklärte, ist Ubuntu eindeutig nichts für Sie. Entschuldigung, aber Sie müssen 1) die Distribution wechseln oder 2) ein gutes Auge darauf haben, was Ubuntu tut.
Elcuco
Der Grund, warum sich Ubuntu / Debian in dieser Hinsicht von Fedora unterscheiden, ist, dass Debian nur das installiert, was Sie verlangen, während Fedora das Spülbecken installiert. In Fedora ist es daher üblich, ein Paket zu installieren, nach dem Sie nicht gefragt haben. Daher wird es standardmäßig nicht ausgeführt. In Debian haben Sie das Paket explizit installiert, sodass erwartet wird, dass der Server sofort ausgeführt wird.
TRS-80
Aktualisierungen. Welches hast du versucht? und was hat funktioniert? a
Nandhini Anand
Leider scheint es keine andere Lösung zu geben als "Überprüfen Sie sorgfältig, welche Software nach einem Paketwechsel auf Ihrem System ausgeführt wird", was eindeutig ein ziemlich fehleranfälliger Prozess ist.
cjs

Antworten:

12

Installieren Sie sysv-rc-conf und deaktivieren Sie einfach die Dienste, die nicht ausgeführt werden sollen.

sudo apt-get install sysv-rc-conf BESCHREIBUNG
: sysv-rc-conf bietet eine benutzerfreundliche Oberfläche für die Verwaltung von Symlinks "/etc/rc{runlevel}.d/".

Alt-Text

Jindrich
quelle
Wie verhindert dies, dass neue Server vom Verpackungssystem eingeschaltet werden?
cjs
Bitte lesen Sie den Kommentar von Barry Brown, er erklärt, warum diese Antwort veraltet ist.
Elcuco
8

Als jemand mit einem ähnlichen Problem bin ich der festen Überzeugung, dass es für einen Dämon nicht sinnvoll ist anzunehmen, dass der Benutzer standardmäßig starten möchte: Es gibt viele vollkommen gültige Anwendungsfälle, in denen dies nicht der Fall ist. (Ganz zu schweigen davon, dass nicht immer klar ist, welche Installationen tatsächlich einen Daemon enthalten.) Der Daemon kann standardmäßig deaktiviert sein, der Benutzer kann explizit abgefragt werden oder es kann eine zentrale Einstellung geben. Alles andere ist eine Microsoft-Argumentation, die Linux völlig unwürdig ist.

Darüber hinaus finde ich einige der obigen Kommentare zum Originalplakat unhöflich, bevormundend und wenig konstruktiv. Es ist wirklich bemerkenswert, beispielsweise vorzuschlagen, dass er entweder das Standardverhalten akzeptieren oder die Verteilung ändern sollte. Erstens passt keine Distribution perfekt zusammen, und es ist unwahrscheinlich, dass ein Sprung zu einer neuen Distribution mit der damit verbundenen zusätzlichen Arbeit eine realistische Lösung für diese eine Sache darstellt. Zweitens sind erfahrene Linux / Unix-Benutzer daran gewöhnt, dass jedes Verhalten geändert werden kann: Ein Problem kann zwei Stunden dauern, aber dann ist es behoben. Für einen solchen Benutzer ist es selbstverständlich, wenn die Standardeinstellungen ungeeignet sind, die Existenz einer Problemumgehung anzunehmen und herauszufinden, um welche es sich handelt. Drittens, in Open Source und Freie-Software-Etikette, If you don't like it, then patch the source code!'' is an acceptable response; however,..., dann machen Sie eine Wanderung! '' Ist nicht.


quelle
5

Das Paketsystem erwartet, dass Sie diesen Server ausführen, wenn Sie ein Serverpaket installieren. Es ist eine vernünftige Erwartung.

Wie konfiguriere ich meine Ubuntu-Systeme so, dass niemals Server gestartet werden, es sei denn, ich 
Sagen Sie es speziell, um einen Server zu starten? 

Roy hat diese Frage für Sie beantwortet. Wenn Sie ein neues Serverpaket installieren, stoppen Sie diesen Server und verwenden dann ein Tool wie sysv-rc-conf, um zu verhindern, dass dieser Server beim nächsten Neustart oder beim nächsten Runlevel-Wechsel gestartet wird. Ja, Sie müssen einige Arbeiten selbst ausführen, und das ist sinnvoll, da Sie Ihr System anders konfigurieren als die meisten Benutzer von Ubuntu.

Zum Beispiel verwende ich lighttpd für interne Tests (es wird von bestimmten Testskripten gestartet 
für einige Anwendungen und hört nur auf localhost), aber ich will es im Allgemeinen nicht 
auf externe Verbindungen achten.

Sie sollten einige Zeit investieren, um zu lernen, wie lighttpd so konfiguriert wird, dass es permanent so konfiguriert ist, dass nur localhost abgehört wird. Wenn Sie dann den Server starten, wissen Sie, dass er bereits nach Ihren Wünschen konfiguriert ist.

Verurteilen
quelle
3
Erstens denke ich nicht, dass es eine vernünftige Erwartung ist; Dass ich eine lighttpd-Binärdatei installiert habe, bedeutet nicht, dass ich einen öffentlichen Server ausführen möchte. Zweitens weiß ich nicht immer, dass ich ein Serverpaket installiert habe. Sie werden manchmal von anderen Paketen angezogen, die ich installiert habe.
cjs
1
Oh, und ich weiß, wie man lighttpd so konfiguriert, dass es nur auf localhost hört, und ich habe oft ein halbes Dutzend oder mehr Check-outs von Projekten auf einem bestimmten System, das dies tut.
cjs
5

Ich fand Folgendes hilfreich für die Installation von Ubuntu in Chroot-Umgebungen, wie das Debootstrapping neuer Xen-Gäste. Der Kredit geht tatsächlich an die Xen-Tools-Skripte, um mir Folgendes beizubringen:

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

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

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

Mit diesem Skript startet apt nach der Installation keine Dienste. Dies ist jedoch nur die Hälfte Ihres Problems, da noch Symlinks vorhanden sind und die Dienste nach dem nächsten Start gestartet werden. Ich weiß nicht, wie ich das automatisch stoppen soll :(


quelle
1
Es kann die Nginx-Logrotation unterbrechen, da Ubuntus /etc/logrotate.d/nginx invoke-rc.d nginx rotateim Postrotate-Bereich verwendet wird. Ich verwende eine etwas andere Version. gist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
Hostmaster
Es verhindert auch, dass der Dämon angehalten wird, wenn seine Pakete vom System gelöscht werden. Das ist nicht gut.
Hostmaster
4

Barry Brown gibt in einem Kommentar zu der Frage einen Hinweis auf eine mögliche Antwort.

Das Verpackungssystem verwendet das invoke-rc.dProgramm, um den Server nach der Installation des Pakets zu starten. [1] Dieses Programm wird ausgeführt /usr/sbin/policy-rc.d, um die Richtlinie zum Starten dieses Servers zu bestimmen.

Das Paket policyrcd-script-zg2enthält das policy-rc.dSkript, das entweder /etc/policy-rc.dmit seinen Parametern ausgeführt wird, falls vorhanden, und mit dem Fehlercode des Skripts beendet wird, oder ansonsten mit 0 (Erfolg) beendet wird. Die Schnittstelle, policy-rc.ddie voraussichtlich angeboten wird, wird kurz in der invoke-rc.dVerwaltung dokumentiert und viel ausführlicher in /usr/share/doc/sysv-rc/README.policy-rc.d.gz.

Ich nehme an, der nächste Schritt besteht darin, dies zu testen.

Noch zu beantwortende Fragen:

[1] Welche anderen Teile des Systems verwenden invoke-rc.d? [2] Funktioniert das tatsächlich?

cjs
quelle
3

Wie wäre es mit einem Blick in die Verzeichnisse, in denen sich die Init-Skripte befinden? Sie können diese Verzeichnisse wahrscheinlich mit dem Befehl chatr unveränderbar machen.

ojblass
quelle
Hm. Ich frage mich, warum dieser abgelehnt wurde? Es ist ein Hack, aber zumindest geht es um mein Problem, im Gegensatz zu den meisten Antworten hier.
cjs
Ich habe dies positiv bewertet, weil es die beste Lösung ist, die Sie wahrscheinlich mit Ubuntu erhalten, obwohl ich denke, dass es eine schreckliche Idee ist, die Init-Verzeichnisse nicht zu ändern (stellen Sie sich vor, Sie versuchen, einen Dienst zu installieren, den Sie starten möchten). Ich weiß, dass find verwendet werden kann, um Änderungen in Dateien und Verzeichnissen zu überwachen, obwohl ich mit dem Tool nicht vertraut genug bin, um Ihnen einen genauen Befehl zu geben. Ich würde einen der Gurus nach einem funktionierenden Befehl fragen, ihn in ein Bash-Skript einfügen und nach jeder Installation ausführen und dann mit sysv-rc-conf die nicht gewünschten Dienste manuell deaktivieren.
Babu
2

Im Idealfall handelt es sich um post-instSkripte. Zu Beginn des Ubuntu-Projekts wurde absichtlich versucht, vernünftige Standardeinstellungen für dpkg-Konfigurationsskripte zu erzwingen, damit Sie und ich nicht jede verdammte Frage beantworten oder Zeit damit verschwenden müssen, die Optionen zu untersuchen. Nachdem Ubuntu dies eingerichtet hat, wissen viele Menschen nicht, dass es das gibt. Es sollte möglich sein, eine Frage zu stellen, ob als Daemon installiert werden soll oder nicht, aber in den wenigen von mir überprüften Paketen werden solche Fragen nicht angezeigt.

Vielleicht sollten Sie sich mit dem Ubuntu Server Team und vielleicht sogar mit Debian Policy in Verbindung setzen, um die Dinge zu verbessern.

jldugger
quelle
1

Sie können versuchen, ein Skript zu erstellen, mit dem die Liste der installierten Dienste überprüft und anhand einer Liste der zulässigen Dienste überprüft wird. Wenn der Dienst nicht in der Liste enthalten ist, wird er vom Skript deaktiviert. Das Skript muss beim Start vor allgemeinen Diensten ausgeführt werden. Und vielleicht wie ein Dämon laufen, um frisch installierte Dienste zu schließen. Oder wenn möglich automatisch nach jeder Installation ausgeführt, um nach neuen Diensten zu suchen.

PS Ich kann mir zwei mögliche Ursachen für den Start von Diensten nach der Paketinstallation vorstellen. Das ist die Paketfunktion oder die Paketmanagerfunktion. Wenn dies eine Paketfunktion ist, glaube ich nicht, dass es eine Möglichkeit gibt, das Serviceverhalten zu ändern. Wenn dies eine Paketmanagerfunktion ist, gibt es möglicherweise eine Konfigurationsoption, um den Dienststart nach der Installation zu verhindern. Ich weiß es momentan nicht, also werfe ich nur Ideen.

Geschmeidig
quelle
1

Wenn Sie iptables mit der Standardrichtlinie DROP für die INPUT-Kette einrichten, müssen Sie sich nicht so viele Gedanken über Überwachungsports machen, da diese von iptables blockiert werden. Der Ubuntu-Server verfügt über eine benutzerfreundliche Oberfläche für iptables, wenn Sie mit iptables noch nicht vertraut sind.

Aus Ihrem Beitrag geht hervor, dass Sie mit einer anderen Linux-Distribution wie CentOS möglicherweise zufriedener sind. Mit dem Standardinstallationsprozess für CentOS können Sie verschiedene Metapakete installieren. Wenn Sie keine auswählen, sind Sie möglicherweise mit Ihrer Basisinstallation zufriedener.

Ich denke auch, dass Ihre Frage etwas klarer gewesen sein könnte, wenn Sie das Wort "Server" durch "Service" oder "Daemon" ersetzen, wenn Sie etwas meinen, das auf einem Server ausgeführt wird. Menschen neigen dazu, "Server" zu verwenden, um auf eine physische Box oder VM zu verweisen. Obwohl ich denke, es ist technisch nicht falsch.

Kyle Brandt
quelle
0

Sehen Sie sich mit dem Befehl 'runlevel' an, in welcher Run-Ebene Sie sich befinden, und entfernen Sie alle Symlinks unter / etc / rc <runlevel> .d /. Sie werden wahrscheinlich wollen, dass einige der Dämonen laufen, aber die meisten könnten wahrscheinlich entfernt werden.

Sie können sie mit einem Symlink aus dem Skript in /etc/init.d wieder hinzufügen.

Ich denke, es gibt einen Befehl, der denselben Trick ausführt und alle Symlinks für alle Runlevel hinzufügt, aber ich mache es einfach manuell.

Resonator
quelle
Das Problem ist, ich weiß nicht, wann Symlinks hinzugefügt werden könnten. Ich muss verhindern, dass Symlinks hinzugefügt und Server gestartet werden (hauptsächlich das Verpackungssystem, wie es scheint), es sei denn, ich ergreife Maßnahmen, die dies ausdrücklich dazu auffordern.
cjs
Wahrscheinlich einfacher und zuverlässiger, nur eine Firewall einzurichten. Vielleicht ein Skript erstellen, um einen Port und ein Protokoll als Argument zum Hinzufügen / Löschen von Firewall-Regeln zu verwenden, um die Dinge zu vereinfachen.
Resonator
oder führen Sie Ihren Computer im Einzelbenutzermodus aus ... Dies kann jedoch zu mehr Problemen führen, als es spart.
Resonator
Ich bin neu in Ubuntu und langjähriger Fedora / RedHat-Benutzer. Das ist eine Sache an Ubuntu, die mir seltsam vorkommt: Dienste sind standardmäßig aktiviert. Unter Fedora sind die Dienste standardmäßig deaktiviert.
Barry Brown
Das Ausführen eines Desktop-Computers oder Servers im Einzelbenutzermodus ist nicht sehr praktisch.
cjs
0

Alternativ können Sie den update-rc.dBefehl verwenden.

apache2Dienst deaktivieren

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

BEARBEITEN:

Dies bedeutet, dass ich in der Lage sein sollte, alle Systemadministrationsaufgaben auszuführen, z. B. ein Paket zu installieren, und sicher sein sollte, dass keine Server gestartet wurden.

Dieses Verhalten wird durch Skripte in .deb-Paketen gesteuert. Wenn Sie ein Paket installieren, wird dieses Skript automatisch ausgeführt. IIRC, wir können dieses Skript nicht umgehen.

Arie K.
quelle
0

Grundsätzlich kann man nicht.

Wenn Sie ein Paket installieren und einen Dienst starten, geschieht dies. Wenn Sie nicht mögen, melden Sie einen Fehler unter https://launchpad.net/ .

Sie sollten nicht mit Deb-Paketen herumspielen. So etwas könnte später zurückkommen und dich in den Arsch beißen.

Wenn Sie möchten, dass im OpenBSD-Stil "standardmäßig nichts ausgeführt wird", führen Sie OpenBSD aus. Nicht jede Distribution passt zu jedem. Es gibt bestimmt Dinge in Ubuntu, die Sie nicht mögen. Wenn Sie Ubuntu weiterhin ausführen möchten, müssen Sie die ausgeführten Dienste überprüfen und deaktivieren.

Rory
quelle
-2

Sie können einige Dienste im Menü System> Dienste in GNOME aktivieren und deaktivieren

dmityugov
quelle