Come posso impedire a Ubuntu di avviare demoni che non ho esplicitamente chiesto di eseguire?


8

Uno dei principi di base della sicurezza informatica non è mai eseguire nulla di cui non hai bisogno.

Stavo pgrepeseguendo il ping per un processo oggi quando ho notato che la mia macchina Ubuntu 9.04 (desktop) eseguiva un demone git server. Dopo una rapida imprecazione, ho scoperto che il git-daemon-runpacchetto era stato (probabilmente inavvertitamente) installato e rimuovendolo è stato eliminato quel processo (e ho assicurato che non sarebbe stato riavviato in seguito).

Ma in altri casi, voglio che il pacchetto del server sia installato, ma non voglio che il demone del server sia in esecuzione. Ad esempio, lo uso lighttpdper i test interni (è avviato da script di test specifici per alcune applicazioni e ascolta solo localhost in quelle configurazioni) ma non voglio che ascolti connessioni esterne con alcuni file di configurazione casuali. (Se avessi voluto eseguirne uno in ascolto di connessioni esterne, lo avrei configurato ed eseguito da solo.)

Non mi piace davvero eseguire tutti i tipi di server casuali di cui non ho bisogno su macchine esposte a Internet, poiché chissà quali falle di sicurezza aprono. E preferisco non dovermi preoccupare dei firewall, poiché questa è ancora un'altra potenziale fonte di errori e configurazioni errate che può aprire falle nella sicurezza. Non è così difficile avere macchine Unix configurate per non avviare alcun server a meno che non sia stato espressamente richiesto dall'amministratore; NetBSD (e anche OpenBSD, penso) arrivano di default.

Come faccio a configurare i miei sistemi Ubuntu per non avviare mai alcun tipo di demone del server a meno che non gli dica specificamente che lo voglio avviato?

(Chiedere di avere un pacchetto installato non è, nel mio libro, chiedere di avviare un server. Se si suppone che lo sia, è un'interfaccia utente terribile, dal momento che molte installazioni di pacchetti non hanno nemmeno un server da avviare, quindi rende è troppo facile avviare inavvertitamente un server senza rendersi conto di averlo fatto.)

EDIT: Solo per chiarire, il problema non è che voglio essere in grado di arrestare i server esistenti. Il problema è che non desidero avviare nuovi server senza una richiesta esplicita. Ciò significa che dovrei essere in grado di eseguire qualsiasi attività sysadmin, come l'installazione di un pacchetto, e di essere sicuro che nessun server sia stato avviato. La maggior parte delle risposte non affronta questo punto.


3
Ho cercato all'interno dei pacchetti .deb per circa 10 minuti. Includono uno script "postinst" che viene eseguito dopo l'installazione del pacchetto. L'ultimo comando che eseguono è spesso "invoke-rc.d <servicename> start" che causa l'avvio automatico del servizio. La chiamata a invoke-rc.d è generalmente cablata senza alcun controllo di una variabile di configurazione globale per controllare se avviare effettivamente il servizio. Pertanto, sarebbe invocare-rc.d prendere una decisione sull'avvio del servizio. Ecco dove è finita la mia indagine.
Barry Brown,

2
come ha spiegato Barry, Ubuntu chiaramente non fa per te. Siamo spiacenti, ma devi 1) cambiare la distribuzione o 2) tenere d'occhio qualunque cosa stia facendo Ubuntu.
elcuco,

Ubuntu / Debian differiscono da Fedora in questo senso, Debian installa solo ciò che chiedi, mentre Fedora installa il lavello della cucina. Quindi in Fedora è comune avere un pacchetto installato che non è stato richiesto, quindi per impostazione predefinita non è in esecuzione. In Debian, hai installato esplicitamente il pacchetto, quindi si prevede che desideri che il server venga eseguito immediatamente.
TRS-80,

nessun aggiornamento. Quale hai provato? e cosa ha funzionato? a
Nandhini Anand

Triste a dirsi, non sembra esserci altra soluzione se non quella di "controllare attentamente quale software è in esecuzione sul sistema dopo ogni cambio di pacchetto", chiaramente un processo soggetto a errori.
cjs,

Risposte:


12

Installa sysv-rc-conf e disattiva semplicemente i servizi che non vuoi avere in esecuzione.

sudo apt-get install sysv-rc-conf
DESCRIZIONE: sysv-rc-conf offre un'interfaccia facile da usare per gestire i link simbolici "/etc/rc{runlevel}.d/".

testo alternativo


In che modo questo impedisce ai nuovi server di essere accesi dal sistema di imballaggio?
cjs il

Si prega di leggere il commento di Barry Brown, spiega perché questa risposta è oscura.
elcuco,

8

Come qualcuno con un problema simile, mi sento molto forte che è non è ragionevole per un demone per presumere che l'utente vuole è iniziato per default: Ci sono molti casi di utilizzo perfettamente valide in cui questo non è il caso. (Per non parlare del fatto che non è sempre chiaro quali installazioni includano effettivamente un demone.) Il demone potrebbe essere spento per impostazione predefinita, l'utente potrebbe essere interrogato esplicitamente o potrebbe esserci un'impostazione centrale. Qualcos'altro è un ragionamento di Microsoft completamente indegno di Linux.

Inoltre, trovo che molti dei commenti di cui sopra al poster originale siano scortesi, condiscendenti e privi di costruttività. Suggerire, ad esempio, che dovrebbe accettare il comportamento predefinito o modificare la distribuzione è davvero notevole. In primo luogo, nessuna distribuzione sarà perfetta, e è improbabile che saltare a una nuova distribuzione con il lavoro extra associato sia una soluzione realistica su questa cosa. In secondo luogo, gli utenti esperti di Linux / Unix sono abituati a modificare qualsiasi comportamento: un problema può richiedere due ore di scavo, ma poi viene risolto. La cosa naturale che un tale utente deve fare, quando le impostazioni predefinite non sono adatte, è assumere l'esistenza di una soluzione e cercare di scoprire di cosa si tratta. In terzo luogo, nell'etichetta open source e del software libero, If you don't like it, then patch the source code!'' is an acceptable response; however,..., allora fai un'escursione! '' Non lo è.


5

L'aspettativa del sistema di packaging è che quando si installa un pacchetto server, si desidera eseguire quel server. È un'aspettativa ragionevole.

Come faccio a configurare i miei sistemi Ubuntu per non avviare mai alcun tipo di server a meno che io 
in particolare dirlo a voglio un server avviato? 

Roy ha risposto a questa domanda per te. Quando si installa un nuovo pacchetto server, si arresta quel server e quindi si utilizza uno strumento come sysv-rc-conf per impedire l'avvio del server al successivo riavvio o modifica del runlevel. Sì, devi fare un po 'di lavoro da solo, ed è ragionevole perché stai configurando il tuo sistema in modo diverso rispetto alla maggior parte delle persone che usano Ubuntu.

Ad esempio, utilizzo lighttpd per i test interni (è avviato da specifici script di test 
per alcune applicazioni e ascolta solo su localhost) ma in genere non lo voglio 
ascoltando connessioni esterne.

Dovresti dedicare un po 'di tempo per imparare a configurare lighttpd in modo che sia configurato in modo permanente per l'ascolto solo su localhost. Quindi, quando avvii il server, sai che è già configurato a tuo piacimento.


3
Innanzitutto, non credo sia un'aspettativa ragionevole; che ho installato un binario lighttpd non significa che voglio eseguire un server pubblico. Secondo, non sempre so di aver installato un pacchetto server; a volte vengono richiamati da altri pacchetti che ho installato.
cjs il

1
Oh, e so come configurare lighttpd per l'ascolto solo su localhost, e spesso ho una mezza dozzina o più di checkout di progetti su qualsiasi sistema particolare che lo faccia.
cjs il

5

Ho trovato utile quanto segue per installare Ubuntu in ambienti chroot, come debootstrapping di nuovi guest xen. Il merito va in realtà agli script di xen-tools per avermi insegnato questo:

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

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

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

Con questo script attivo, apt non avvierà i servizi dopo l'installazione. Tuttavia, questo è solo metà del tuo problema, poiché i collegamenti simbolici sono ancora presenti, i servizi inizieranno dopo l'avvio successivo. Non so come fermarlo automaticamente :(


1
si può rompere nginx logrotation perché l'uso di Ubuntu /etc/logrotate.d/nginx invoke-rc.d nginx rotatenella sezione postrotate Sto utilizzando la versione che è leggermente diverso gist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
hostmaster

Inoltre impedisce al demone di arrestarsi quando i suoi pacchetti vengono eliminati dal sistema. Questo non è un bene.
hostmaster il

4

Barry Brown, in un commento sulla domanda, fornisce un indizio su una possibile risposta.

Il sistema di packaging utilizza il invoke-rc.dprogramma per avviare il server dopo l'installazione del pacchetto. [1] Questo programma verrà eseguito /usr/sbin/policy-rc.dper determinare la politica all'avvio di quel server.

Il pacchetto policyrcd-script-zg2include lo policy-rc.dscript, che viene eseguito /etc/policy-rc.dcon i suoi parametri, se presenti, ed esce con il codice di errore di quello script, oppure esce con 0 (esito positivo) in caso contrario. L'interfaccia che policy-rc.ddovrebbe offrire è documentata brevemente nella invoke-rc.dgestione e molto più ampiamente in /usr/share/doc/sysv-rc/README.policy-rc.d.gz.

Il prossimo passo, suppongo, è per me testarlo.

Cose rimanenti a cui rispondere:

[1] Quali altre parti del sistema usano invoke-rc.d? [2] Funziona davvero?


3

Che ne dici di guardare nelle directory in cui si trovano gli script di init? Probabilmente puoi rendere immodificabili quelle directory con il comando chatr.


Hm. Mi chiedo perché questo è stato downvoted? È un trucco, ma almeno affronta il mio problema, a differenza della maggior parte delle risposte qui.
cjs,

L'ho votato perché è la soluzione più vicina che potresti avere con Ubuntu, anche se penso che rendere immodificabili le directory di init sia una pessima idea (Immagina di provare a installare un servizio che VUOI iniziare). So che find può essere usato per monitorare i cambiamenti nei file e nelle directory, anche se non ho abbastanza familiarità con lo strumento per darti un comando esatto. Vorrei chiedere a uno dei guru un comando funzionante, inserirlo in uno script bash ed eseguirlo dopo ogni installazione, quindi utilizzare sysv-rc-conf per disabilitare manualmente i servizi che non si desidera.
Babu,

2

Idealmente, questa è una questione di post-instscript. All'inizio del progetto Ubuntu, è stato compiuto uno sforzo intenzionale per forzare impostazioni predefinite corrette agli script di configurazione di dpkg, in modo che tu e io non dovessimo rispondere a tutte le dannate domande che potrebbero sorgere, o perdere tempo a cercare le opzioni. Ora che Ubuntu lo ha impostato, molte persone non sanno che esiste. Dovrebbe essere possibile porre una domanda sull'installazione come demone o meno, ma non vedo tali domande nei pochi pacchetti che ho controllato.

Forse dovresti interagire con il team di Ubuntu Server e forse anche con la politica Debian per migliorare le cose.


1

Puoi provare a creare uno script che controllerà l'elenco dei servizi installati e li verificherà rispetto a un elenco di servizi consentiti. Se il servizio non è presente nell'elenco, lo script lo disattiverà. Lo script deve essere eseguito all'avvio prima dei servizi comuni. E forse eseguire come demone per chiudere i servizi appena installati. O se possibile, eseguire automaticamente dopo ogni installazione per verificare la presenza di nuovi servizi.

PS Posso pensare a due possibili cause dei servizi che iniziano dopo l'installazione del pacchetto. Questa è la funzione del pacchetto, o quella è la funzione di gestione dei pacchetti. Se questa è la funzionalità del pacchetto, non credo che ci sia un modo per cambiare il comportamento del servizio. Se questa è la funzione di gestione dei pacchetti, forse esiste qualche opzione di configurazione per impedire l'avvio del servizio dopo l'installazione. Non lo so adesso, quindi solo lanciando idee.


1

Se configuri iptables con una politica predefinita di DROP per la catena INPUT, non devi preoccuparti troppo delle porte di ascolto perché saranno bloccate da iptables. Il server Ubuntu viene fornito con un'interfaccia intuitiva per iptables se non si conosce iptables.

Dal tuo post, mi sembra che potresti essere più felice con una diversa distribuzione Linux come CentOS. Il processo di installazione predefinito per CentOS ti consentirà di installare diversi meta-pacchetti e selezionando nessuno potresti essere più felice con la tua installazione di base.

Inoltre, penso che la tua domanda potrebbe essere stata un po 'più chiara se sostituisci "servizio" o "demone" con la parola "server" quando intendi qualcosa che gira su un server. Le persone tendono a usare "server" per fare riferimento a una scatola fisica o una macchina virtuale. Anche se credo che non sia tecnicamente scorretto.


0

Dai un'occhiata a quale livello di esecuzione ti trovi con il comando 'runlevel' e rimuovi tutti i collegamenti simbolici in / etc / rc <runlevel> .d /. Probabilmente vorrai alcuni dei demoni in esecuzione, ma molti potrebbero probabilmente essere rimossi.

Puoi aggiungerli nuovamente con un link simbolico dallo script in /etc/init.d.

Penso che ci sia un comando che farà lo stesso trucco e aggiungerà tutti i collegamenti simbolici per tutti i runlevel, ma lo faccio solo manualmente.


Il problema è che non so quando potrebbero essere aggiunti collegamenti simbolici. Devo impedire a tutto ciò che sta aggiungendo symlink e server di avvio (il sistema di packaging, principalmente, a quanto pare) di farlo a meno che non intraprenda alcune azioni che gli chiedono espressamente di farlo.
cjs,

Probabilmente più facile e più affidabile per impostare un firewall. Forse scrivere qualcosa per prendere una porta e un protocollo come argomento per aggiungere / eliminare le regole del firewall per semplificare le cose.
risonatore

o esegui il tuo computer in modalità utente singolo ... Ciò potrebbe introdurre più problemi di quanti ne risparmi.
risonatore

Sono nuovo di Ubuntu, essendo un utente Fedora / RedHat di lunga data. Questa è una cosa di Ubuntu che mi sembra strano: i servizi sono attivi per impostazione predefinita. Sotto Fedora, i servizi sono disattivati ​​per impostazione predefinita.
Barry Brown,

L'esecuzione di una macchina desktop o server in modalità utente singolo non è molto pratica.
cjs il

0

In alternativa, è possibile utilizzare il update-rc.dcomando.

Per disabilitare il apache2servizio

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

MODIFICARE:

Ciò significa che dovrei essere in grado di eseguire qualsiasi attività sysadmin, come l'installazione di un pacchetto, e di essere sicuro che nessun server sia stato avviato.

Questo comportamento è controllato da script all'interno dei pacchetti .deb. Quando si installa un pacchetto, questo script viene eseguito automaticamente. IIRC, non possiamo ignorare questo script.


0

Fondamentalmente, non puoi.

Se installi un pacchetto e avvia un servizio, ecco cosa succede. Se non ti piace, invia un bug su https://launchpad.net/ .

Non dovresti andare in giro con i pacchetti deb. Questo genere di cose potrebbe tornare e morderti nel culo più tardi.

Se vuoi "niente in esecuzione per impostazione predefinita" in stile OpenBSD, esegui OpenBSD. Non tutte le distribuzioni sono adatte a tutti. Ci sono sicuramente cose che non ti piacciono in Ubuntu. Se vuoi ancora eseguire Ubuntu, dovrai controllare i servizi in esecuzione e spegnere le cose.


-2

Puoi abilitare e disabilitare alcuni servizi nel menu Sistema> Servizi in GNOME

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.