Sudatori per un giorno alla settimana?


10

Sono stato offerto volontariamente dal mio capo come amministratore di sistema per il nostro server redhat di produzione. Mi ha chiesto di rafforzare la sicurezza per evitare disavventure come rm -f *quelle avvenute non molto tempo fa.

In questo momento, abbiamo 53 utenti che si lamentano della macchina ed è un incubo di audit. Mi chiedo se sia possibile consentire l'accesso degli utenti solo in determinati giorni della settimana.

Ad esempio, posso avere l'utente "Joe" autorizzato ad accedere SOLO il martedì e il giovedì e "Jane" solo la domenica? Può etc/sudoersessere personalizzato per consentire questo?

C'è un modo migliore invece di usare i sudoer?


10
Consiglierei di NON leggere la pagina del manuale. Vedi xkcd # 1343
user60684

3
No, gli sto dicendo di non leggere il manuale perché è impossibile leggere l'IMHO. L'OP probabilmente troverebbe una risposta nella pagina man se fosse più facile da leggere.
user60684

10
Puoi farlo, ma tieni presente che gli utenti possono semplicemente restituirsi l'accesso sudo per tutto il giorno in qualunque giorno abbiano root.
Nick Matteo,

2
@ Mark0978 se conoscessi il nome dell'azienda, probabilmente moriresti ridendo a crepapelle. È una vergogna che sia permesso ... su un server di produzione.
Chris

3
Sembra un po 'sciocco. Significa solo che Bill dovrà aspettare che scada il suo orario di mercoledì mattina rm -rf /.
Michael Hampton,

Risposte:


21

sudo esegue la sua autenticazione tramite PAM, come praticamente tutto il resto su un box Linux.

Quindi dovresti essere in grado di usarlo pam_time.soper farlo.

Per impostazione predefinita almeno su Debian, quel modulo non è abilitato. Devi aggiungere una linea simile alla seguente:

account    requisite  pam_time.so

a uno /etc/pam.d/sudoper abilitare solo sudo o /etc/pam.d/common-account(dopo il blocco pam-auth-update) per consentire a tutti i programmi del sistema.

Quindi modifica /etc/security/time.confper impostare le tue restrizioni. Il nome del servizio dovrebbe essere sudo. Ad esempio, per consentire a Fred di utilizzare sudosolo tra le 15:00 e le 17:00 di venerdì:

sudo;*;fred;Fr1500-1700

(NOTA: non l'ho provato.)

modifica: Per essere chiari, sono d'accordo con l'altra risposta e con i vari commentatori, sembra che ci siano troppe persone che eseguono troppi comandi come root e che è necessario correggerlo. E ovviamente se possono diventare root, possono modificare la configurazione pam ...


PAM sembra complesso da implementare ma consente anche un controllo più stretto su chi fa cosa e quando. Accettato e votato. Grazie.
Chris

2
Non credo che incoraggiarlo sia la risposta giusta, IMAO la risposta corretta a questa domanda è "CORRI PER LE COLLINE !!!! 1! 1 !! 1! 1"
o0 '.

Funziona davvero? Sono in grado di controllare vari meccanismi di accesso come "login", "ssh", "gdm", "su" usando pam_time.so, ma non funziona con sudo. Voglio impedire a chiunque di diventare root con qualsiasi meccanismo normale al di fuori dell'orario di ufficio. (Mi rendo conto che non è a prova di proiettile, qualcuno potrebbe preparare in anticipo un setuid shell o backdoor, ma non mi aspetto che accadrà in questa situazione.)
Sam Watkins

20

Metterei in dubbio il motivo per cui 53 utenti hanno bisogno di sudo per fare il loro lavoro quotidiano - per la maggior parte degli utenti (anche sviluppatori), sudo dovrebbe essere un'eccezione rara, non una cosa di routine che qualcuno dovrebbe eseguire casualmente un sudo rm -rf *comando.

Puoi usare i permessi di gruppo (o anche ACL più avanzati) per dare alle persone l'accesso ai file di cui hanno bisogno per fare il loro lavoro, magari con alcuni script o binari su setuid o sudo per far loro fare cose come riavviare i servizi? (nota che è difficile scrivere uno script setuid / sudo sicuro, quindi è più per mantenere oneste le persone oneste).

Anche se puoi limitare le persone a un giorno alla settimana di accesso sudo, ci sono comunque 53 persone con accesso sudo entro una settimana, quindi non aiuta davvero con il tuo problema principale.

In ogni caso, mi chiedo se molti utenti hanno bisogno di accedere a un server di produzione - puoi spedire i registri o qualsiasi dato / file di cui abbiano bisogno a una macchina non di produzione?


Oppure puoi pubblicare un qualche tipo di accesso ai file di registro di cui potrebbero aver bisogno, un tipo di installazione sftp imprigionata in chroot.
Boatcoder

@Johnny la maggior parte del lavoro svolto su questo host è la creazione / modifica e l'esecuzione di script shell. Gli utenti non dovrebbero essere autorizzati a vi/cp/mv/rm. Solo cde more. Nient'altro.
Chris,

@Johnny Se imposto un ACL su una directory, i file all'interno di quella directory ereditano gli attributi dell'ACL per impostazione predefinita?
Chris,

@Chris Sì, se si imposta l'ACL predefinito per la directory.
Michael Hampton,

Questo dovrebbe essere un commento, non una risposta. Indipendentemente dal fatto che lo scenario del PO sia ragionevole, altre persone hanno un bisogno simile di bloccare "sudo" per alcuni utenti in determinati momenti.
Sam Watkins,

7

Il modo più semplice sarebbe quello di usare suders.d (via inludedir) per la tua configurazione. Potresti quindi avere cron job che potrebbero posizionare le regole per ciascun utente in quella directory per le volte che desideri.

La direttiva #includedir può essere usata in / etc / sudoers per creare una directory sudo.d in cui puoi inserire le regole sudoers come parte delle tue regole. Ad esempio, dato:

#includedir /etc/sudoers.d

sudo leggerà ogni file in /etc/sudoers.d, saltando i nomi dei file che terminano con '~' o contengono un '.' carattere per evitare di causare problemi con i file temporanei / di backup del gestore pacchetti o dell'editor. I file vengono analizzati in ordine lessicale ordinato. Cioè, /etc/sudoers.d/01_first verrà analizzato prima di /etc/sudoers.d/10_second. Tenere presente che, poiché l'ordinamento è lessicale, non numerico, /etc/sudoers.d/1_whoops verrebbe caricato dopo /etc/sudoers.d/10_second. L'uso di un numero consistente di zeri iniziali nei nomi dei file può essere utilizzato per evitare tali problemi.

Notare che a differenza dei file inclusi tramite #include, visudo non modificherà i file in una directory #includedir a meno che uno di essi non contenga un errore di sintassi. È ancora possibile eseguire visudo con il flag -f per modificare direttamente i file.

/etc/sudoers.d/joe sarebbe presente quando si desidera che joe abbia accesso e si potrebbe semplicemente rimuovere il file per togliere l'accesso.


1
Ho avuto un problema con i miei file sudoers specifici dell'utente: 'sudoers.user1' ecc. Osservazioni su '~' e '.' i personaggi hanno risolto il mio problema. Sono così felice che tu abbia letto il manuale! Grazie.
Han

0

È possibile aggiungere un crontab per mettere gli utenti in un gruppo sudo e quindi un secondo crontab per eliminare quell'utente.

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.