Come impedire a un utente di accedere, ma consentire "su-user" in Linux?


93

Come si consente a un utente di accedere utilizzando " su - user " ma si impedisce all'utente di accedere utilizzando SSH?

Ho provato a impostare la shell su /bin/falsema il momento in cui ci provo sunon funziona.

Esistono diversi modi per consentire l'accesso solo su?

SSH è AllowUserla strada da percorrere? (come farei se fosse la strada da percorrere)

Risposte:


113

Puoi utilizzare AllowUsers / AllowGroups se hai solo pochi utenti / gruppi a cui è consentito accedere tramite ssh o DenyUsers / DenyGroups se hai solo pochi utenti / gruppi a cui non è consentito accedere. Nota che questo limita l'accesso solo tramite ssh, altri modi di accesso (console, ftp, ...) sono ancora possibili. Devi aggiungere queste opzioni al tuo file / etc / ssh / sshd_config per la maggior parte delle installazioni di ssh.

Se la shell di accesso è stata impostata su / bin / false, è possibile utilizzare su -s /bin/bash user(sostituire / bin / bash con la shell di propria scelta)


grazie mille a tutti. Non mi aspettavo di ottenere 2+ voti sulla mia domanda :) Mi piace molto il costrutto "su -s ..." e la console / ftp è un buon punto. Ero davvero alla ricerca di qualcosa come "su -s".
NoozNooz42,

3
Il trucco di su -s è l'oro. Lo uso sempre per gli account di sistema di cui ho bisogno per testare le autorizzazioni, ad es. Apache, nessuno, ecc. Di solito faccio su - user -s / bin / bash. L'argomento facoltativo - può essere utilizzato per fornire un ambiente simile a quello che l'utente si aspetterebbe se l'utente avesse effettuato l'accesso direttamente.
Dmourati,

2
Se hai bisogno di caricare variabili d'ambiente (es. Da / etc / profile), passerà un trattino extra lo farà:su - -s /bin/bash user
Leons

13

Se vuoi ancora che su funzioni, puoi usare sudo -u [username]o passare -s /bin/basha su come shell temporanea. Entrambi fanno lo stesso in assenza di un guscio /etc/passwd.


7

Se un account non ha password ( passwd -d username ), non può accedere in modo interattivo (console, SSH, ecc.). Se hanno una shell valida, su funzionerà comunque. Nota "interattivamente", però; se qualcuno decide di impostare una coppia di chiavi SSH per l'account, funzionerà!


l'utente ha bisogno di avere una shell valida per su? Sono abbastanza sicuro che tu sia ancora nella stessa shell originale dopo aver fatto richiesta a un altro utente ... in realtà non ACCEDI come l'altro utente ... Quindi, solo impostare la shell su / dev / null potrebbe funzionare anche.
Brian Postow,

Sì, ha ancora bisogno di una shell valida: [root @ localhost ~] # su daemon Questo account non è attualmente disponibile. [root @ localhost ~] # su - daemon Questo account non è attualmente disponibile. (Sistema RHEL, la shell del demone è / sbin / nologin)
astrostl

3

In sshd_config aggiungi una riga DenyUser [username]

Si noti che ciò non impedirà a quell'utente di accedere tramite la console.


1
Dovrebbe essere DenyUsers, con una "s".
David G,

2

Oltre a quanto menzionato sopra (disabilitare e / o non impostare la password dell'utente), è possibile utilizzare il modulo pam_access (consultare la pagina man su pam_access e access.conf) per controllare l'accesso.


1

come altri hanno già detto;

DenyUser usernameoppure DenyGroup groupnamein sshd_configimpedirebbe l'accesso alla password / password tramite ssh.

anche se di solito faccio qualcosa del genere AllowGroup ssho qualcosa del genere, e aggiungo esplicitamente persone che hanno bisogno di un accesso ssh a quel gruppo.

quindi, puoi fare come altri hanno detto: passwd -d usernamecancellare la password degli utenti, in modo che non possano accedere alla console o in altro modo. o meglio ancora passwd -l username"bloccare" l'account. è possibile che ssh negherà l'accesso a un account bloccato, anche con le chiavi, ma non sono positivo.


1
In realtà ssh ti permetterà di accedere usando l'autenticazione con chiave anche quando la password dell'account è bloccata.
Richard Holloway,

1

Come ho accennato in un commento, penso che tu possa ancora fare un sopralluogo in un account con una shell non valida. Quindi, se imposti la shell dell'utente su / dev / null o qualunque sia la shell di bin, dovresti essere ancora in grado di fare il login in quell'utente ... ma qualsiasi tentativo di accedere in qualsiasi modo ti farà uscire di nuovo ...


1

modifica / etc / shadow aggiungendo! all'inizio dell'hash della password.

username:!<hash>:#####:#:#####:#:::

Quando si assicura una nuova installazione, questa è la prima cosa che faccio dopo aver installato sudo, quindi nessuno è in grado di utilizzare l'utente root per accedere o ssh nel sistema, gli utenti sudo possono comunque eseguire come utente root.


0

Non specificare una password per l'utente non autorizzato ad accedere o eliminarlo.

# passwd -d myuser

0

Supponendo di voler solo su un utente dall'account di root e disabilitare tutti gli altri accessi:

Usa questo (esegui come root):

usermod -e 1 -L user

Questo disabilita l'accesso con password (come molte altre risposte hanno consigliato), ma scade anche l'account . Non è possibile accedere a un account scaduto, ad esempio con le chiavi SSH. Puoi comunque su user, sebbene mostrerà un avviso che l'account è scaduto.


0

Sapere quale meccanismo è il migliore dipende dai requisiti. Se conosci i requisiti, puoi scegliere il meccanismo appropriato. Tutte le risposte di cui sopra sono valide per alcune serie di requisiti.

Vuoi limitare l'accesso SSH? Hai bisogno di accesso per i metodi mail o ssh? L'accesso è solo da root?

su - userrichiederà una password per l'utente se viene eseguito essere un utente diverso da root. Tuttavia, sudo -u user -inon richiede una password per l'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.