GNU/Linux >> Linux Esercitazione >  >> Linux

Consentire l'esecuzione automatica dei comandi come root su Linux utilizzando SSH

Credo che una soluzione appropriata per la maggior parte dei casi semplici [ad esempio se un framework come Puppet/Chef/CfEngine/Ansible è eccessivo], ma è richiesto un alto livello di controllo del sistema remoto è

(a) Richiedere l'autenticazione basata su chiave (b) Bloccare le posizioni che possono essere utilizzate da SSH, in particolare per bloccare gli indirizzi IP che gli utenti root possono utilizzare (c) Assicurarsi che le macchine con questa relazione di fiducia siano adeguatamente protette.

Non credo che "accedere come root sia disapprovato", tanto quanto "accedere come root per fare cose che non richiedono permessi di root" sia disapprovato. Avere una password indovinabile rende possibile che l'account sia forzato, quindi questo è un problema da affrontare, e consentendo alle persone di accedere come root possono commettere errori stupidi con una portata più ampia e fare cose discutibili che nascondono attività dannose, ma a seconda dell'architettura ciò potrebbe non essere effettivamente significativo.

Questo fumetto XKCD sottolinea che, a seconda dell'ambiente, potrebbe non avere importanza se un account root è compromesso.

Probabilmente la soluzione più semplice ed efficace per il caso generale è limitare esattamente chi può accedere come root controllando le chiavi insieme alla specifica di una riga AllowUsers appropriata in /etc/ssh/sshd.conf. Una riga appropriata per consentire agli utenti normali ma bloccare l'accesso root potrebbe essere simile a:

  AllowUsers normaluser1 normaluser2 [email protected]

Naturalmente, è importante che l'accesso basato su password non sia consentito o che l'account root non abbia una password (ovvero abbia un "!" o "*" nel campo della password del file delle password.)

Come hai postulato, se è necessario eseguire solo un singolo (o un numero limitato di) programmi, potrebbe essere meglio configurare un utente specifico con l'autenticazione basata su chiave e consentire l'accesso sudo appropriato ai comandi richiesti.

Ci sono, ovviamente, molte cose che possono essere fatte per "bloccare" ulteriormente l'accesso, a seconda del valore dei dati:selinux, registrazione remota, shell limitata, vincoli di ora del giorno, notifiche immediatamente agli accessi , il monitoraggio attivo dei log come fail2ban [oltre alle restrizioni di rete che considero non facoltative] possono tutti far parte di una soluzione. Detto questo, se stai semplicemente controllando un sistema che può essere spazzato via e ricreato facilmente, molto di questo è probabilmente eccessivo.

Ricorda che la sicurezza è costruita su livelli, per essere in grado di ottenere l'accesso root, un account dovrebbe aver bisogno di superare un numero di livelli. Il blocco dell'accesso, le chiavi private SSH, i firewall, le restrizioni dell'ora del giorno [e il principio dell'accesso minimo, ovvero fornire l'accesso solo a ciò che è necessario, non di più, la registrazione, i backup] dovrebbero funzionare tutti insieme come parte di una buona sicurezza.

Ulteriori - Accesso SUDO

Sudo è un meccanismo per consentire a un utente normale di eseguire determinati comandi con accesso elevato ed è abbastanza flessibile e di portata variabile. Mentre una carrellata di sudo non è appropriata qui (ma è ben documentata se digiti man sudo nella maggior parte delle distribuzioni, i passaggi appropriati potrebbero essere -

  1. Modifica /etc/sudoers - La maggior parte delle varianti di Linux ha un programma speciale per fare questo chiamato "visudo" che deve essere eseguito come root, e più o meno equivale all'uso dell'editor di sistema per modificare /etc/sudoers (che è un altro modo per fare questo - anche se probabilmente basato su)

  2. Aggiungi/modifica righe appropriate per consentire a un determinato utente di eseguire operazioni particolari. Se, ad esempio, desideri che siano in grado di montare le directory, ad esempio e senza dover inserire una password, devi inserire una riga come :

    username    ALL=/sbin/mount NOPASSWD: ALL
    

Per poi eseguire questo comando, l'utente appropriato eseguirà qualcosa come

  sudo mount /dev/xxx /path/to/mount

Puoi elencare più righe per più comandi, utilizzare gruppi piuttosto che usi:sudoers è un sottosistema abbastanza flessibile. In molte distribuzioni è anche possibile aggiungere file con comandi a una sottodirectory come /etc/sudoers.d


Quella che segue è una risposta dal post di Unix Stackexchange
Come eseguire in remoto il comando ssh un comando sudo senza password.

Questo metodo consente all'amministratore del server di consentire al tuo account di eseguire un comando come sudo senza specificare la password. Il comando è probabilmente la chiamata al tuo script ed è consentito solo se eseguito con il tuo account. Poiché il comando consentito è interamente specificato inclusi gli argomenti, credo che questo metodo sia abbastanza sicuro.

puoi dire a sudo di saltare la password per alcuni comandi.

per esempio. in /etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

questo mi permette di usare

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

come archemar senza password.

Nota che

sudo -u www-data rm -rf /var/www/log/upload.*

non funzionerà (chiederà una password) come rm differiscono da /bin/rm .

Assicurati di modificare /etc/sudoers usando visudo comando.

Una volta raggiunto il livello avanzato, potresti desiderare di avere il tuo sudo file in /etc/sudoers.d .


Linux
  1. Utilizzo del comando ripgrep (rg) in Linux

  2. Come reimpostare la password dell'amministratore di Plesk utilizzando SSH in Linux Server?

  3. passwd Esempi di comandi in Linux

  4. Per sapere quale IP ha eseguito un determinato comando in Linux usando ssh

  5. Invia/ricevi ZFS su ssh su Linux senza consentire l'accesso root

Come tracciare l'esecuzione del programma utilizzando il comando Strace di Linux

Come scoprire se un utente utilizza l'autenticazione SSH basata su password o basata su chiave in Linux

Comando Chpasswd in Linux

Come passare la password al comando SSH in Linux

Utilizzo del comando Watch in Linux

Utilizzo di cut su terminale Linux