Disabilitare la shell utente per motivi di sicurezza


58

Disponiamo di numerosi account utente che creiamo per attività automatizzate che richiedono autorizzazioni dettagliate, come il trasferimento di file tra sistemi, il monitoraggio, ecc.

Come possiamo bloccare questi account utente in modo che questi "utenti" non abbiano shell e non possano accedere? Vogliamo prevenire la possibilità che qualcuno possa accedere a SSH come uno di questi account utente.

Risposte:


63

È possibile utilizzare il usermodcomando per modificare la shell di accesso di un utente.

usermod -s /sbin/nologin myuser

o

usermod -s /usr/sbin/nologin myuser

Se il tuo sistema operativo non fornisce / sbin / nologin, puoi impostare la shell su un comando NOOP come / bin / false:

usermod -s /bin/false myuser

1
/bin/falsesembra più comune di /bin/true.
jw013,

@ jw013 aggiorno la mia risposta, ma entrambi dovrebbero funzionare bene.
Giordania,

1
Si noti che su Debians, in nologinrealtà si trova a/usr/sbin/nologin
xebeche

questa è stata la mia prima idea, purtroppo l'uso 'valido' di alcuni account utente è disabilitato durante l'impostazionenologin
Javier

2
@ jw013 In realtà ho quello /usr/local/bin/maybeche /dev/urandomseleziona tra quei due. Forse dovrei usarlo: D
hegez il

21

La modifica della shell di accesso non impedisce necessariamente agli utenti di autenticarsi (tranne in alcuni servizi che controllano se la shell dell'utente è menzionata in /etc/shells).

Le persone potrebbero comunque essere in grado di autenticarsi ai vari servizi forniti dal sistema agli utenti unix e potrebbero essere autorizzate a eseguire alcune azioni anche se probabilmente non eseguiranno direttamente comandi arbitrari.

Cambiare la shell in /bin/falseo /usr/sbin/nologinimpedirà loro di eseguire comandi su quei servizi che possono essere usati per eseguire comandi (login console, ssh, telnet, rlogin, rexec ...), quindi influenzare l' autorizzazione solo per alcuni servizi.

Ad sshesempio, ciò consente loro di eseguire il port forwarding.

passwd -ldisabiliterà l'autenticazione con password, ma all'utente potrebbe essere comunque consentito utilizzare altri metodi di autenticazione (come authorized_keyscon ssh).

Con pamalmeno su Linux, è possibile utilizzare il pam_shellsmodulo per limitare l'autenticazione o l'autorizzazione agli utenti con una shell consentita (quelle menzionate in /etc/shells). Per ssh, ti consigliamo di farlo a accountlivello di autorizzazione ( ) come per gli sshdusi di autenticazione pam oltre ad altri metodi di autenticazione (come authorized_keys), oppure puoi farlo con sshd_configdirettive in /etc/ssh/sshd_config(come AllowUserse amici).

Attenzione però che l'aggiunta di alcune restrizioni nell'autorizzazione globale di pam impedirà potenzialmente l'esecuzione di cronlavori come quegli utenti.


Grazie. Quindi cosa consiglieresti dato il seguente schema: Devo creare un utente che deve accedere alla sua cartella home tramite sftp o sshfs, ma non deve essere in grado di accedere con una shell. È anche possibile? Sono caduto come i moduli PAM potrebbe essere la soluzione goto ma non capisco tutto:|
Stphane

@Stphane si può dare un'occhiata a rssh - manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
Hart Simha

4

Si modifica il /etc/passwdfile e si cambia la shell degli utenti da /bin/basho /bin/shverso/sbin/nologin


8
La risposta è corretta, ma la modifica manuale / etc / passwd non dovrebbe mai essere raccomandata.
Giordania,

3
Perché? Questo è qualcosa che facciamo da quando sono stato un amministratore di sistema professionale. (ormai circa 20 anni) In realtà, non tutte le distribuzioni linux / unix hanno strumenti per modificare / etc / passwd o / etc / group .. A meno che tu non usi qualcosa come Yast o Smit, che sono strumenti che memorizzano nella cache le impostazioni e sovrascrivono li non c'è nulla di male nel montaggio a mano.
Mark Cohen,

6
È molto più facile commettere un errore "interrompe l'accesso di tutti" modificando manualmente, anziché un singolo utente.
Giordania,

2
@jordanm: c'è ciò vipwche impedisce questo tipo di errore.
eudoxos,

4

Innanzitutto, disabilitare la password, utilizzando passwd -l username.

Nota anche nella manpagina passwdper l'opzione -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

1
Questo potrebbe non essere desiderabile. Potrebbero aver bisogno di una password sul proprio account di sistema per accedere alla posta elettronica, ad esempio.
Giordania,

1
Alcuni sistemi di posta elettronica consentono l'uso dei propri meccanismi di password. Uso Dovecot ed Exim con una password solo e-mail. Questo consente l'uso della webmail su server che non userei la mia password di sistema. I domini di posta elettronica virtuali richiedono la propria password in quanto non accoppiati al sistema di password del server.
BillThor

2

Puoi usare il comando chsh:

~# chsh myuser

Immettere i dettagli della nuova shell quando richiesto:

Login Shell [/bin/sh]: /bin/nologin

O versione più corta:

~# chsh myuser -s /bin/nologin

0

Per impedire all'utente la registrazione e persino l'autenticazione su ssh che abilita il port forwarding (come descritto qui Stephane), modifico l'utente in modo che sia simile nobodyall'utente del sistema :

  • autenticazione password bloccata in /etc/shadow(con *o !!nel campo appropriato)
  • shell disabilitata in /etc/passwd(ad es. /sbin/nologinnel campo corretto)
  • home home di sola lettura /etc/passwd(ad es. /nel campo appropriato)
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.