Come nascondere gli utenti dalla schermata di accesso GDM?


64

Di recente ho aggiunto diversi nuovi utenti, di cui ho bisogno per qmail. Ora appaiono nella casella nella schermata di accesso e la ingombra, e devo scorrere per trovare il mio utente. Come posso nascondere quegli utenti dalla casella di accesso?


Non so se aggiungere Exclude=foobarin /etc/gdm/gdm.confopere, l'hai provato?
Umang,

buona domanda, le risposte sono forse obsolete (come da discussione su meta).
Giovedì

Risposte:


30

Modifica il file /etc/gdm/gdm.schema trova la sezione che al momento si presenta così:

  <schema>
    <key>greeter/Exclude</key>
    <signature>s</signature>
    <default>bin,root,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,nobody4,noaccess,postgres,pvm,rpm,nfsnobody,pcap</default>
  </schema>

E per escludere un utente chiamato qmail, ad esempio, aggiungere qmail all'elenco predefinito in modo che la sezione sia simile a questa.

  <schema>
    <key>greeter/Exclude</key>
    <signature>s</signature>
    <default>qmail, bin,root,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,nobody4,noaccess,postgres,pvm,rpm,nfsnobody,pcap</default>
  </schema>

Ciò impedirà all'utente qmail di apparire nella schermata di benvenuto di gdm. C'era un bel strumento GUI per fare questo, ma non è stato in Ubuntu nelle ultime versioni.

L'altra alternativa è impostare l'UID dell'utente su un valore inferiore a 1000. Questi sono considerati account di sistema che sono esclusi anche nel programma di benvenuto GDM.


inoltre, lo strumento GUI non funziona più, a causa del fatto che GDM è passato dai file di testo piani per la sua configurazione agli schemi Gconf.
LassePoulsen,

Grazie per l'informazione Source Lab. Ho notato negli ultimi rilasci diversi strumenti della GUI che sono stati persi per ragioni simili.
Richard Holloway,

29
In realtà, non penso che dovresti modificare /etc/gdm/gdm.schema. Invece, aggiungi le due righe [greeter] Exclude=nobody,qmail-foo,qmail-bara /etc/gdm/custom.conf. (A parte nobody, i nomi nell'elenco predefinito non verranno comunque visualizzati perché il loro uid è <1000.)
Gilles "SO - smetti di essere malvagio"

3
Di solito dovresti usare uid sotto i 1000 per questo.
txwikinger,

@RichardHolloway Non riesci a trovare un file simile Ubuntu 12.04.04, potresti consigliarmi?
gotqn

56

Per GDM 3.X più recente, le vecchie risposte non funzionano, tranne che per questa impostazione
L' greeterimpostazione custom.confè obsoleta , ovvero non funzionerà più. Una soluzione semplice se si desidera evitare di modificare l'UID dell'utente:

  1. Apri il terminale e inserisci (sostituisci usercon il nome utente che vuoi nascondere dalla schermata di accesso):

    sudo nano /var/lib/AccountsService/users/user
    
  2. Aggiungi quanto segue al file:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Cambia utente o esci per verificare se usernon è più elencato.


1
In effetti, questo è quello che ho fatto dopo aver letto i documenti di Arch . Questa risposta dovrebbe essere votata in modo che la gente la veda prima e risparmi un po 'di tempo.
Stefan van den Akker,

sembra il modo appropriato piuttosto che manipolare gli UID
xuma202

1
Fantastico! Questo aiuta a risolvere il problema degli utenti con uid meno di 1000 sono nascosti nella schermata di accesso.
biocyberman

1
Quali sono le conseguenze di rendere un utente un account di sistema?
Jistanidiot

2
Questo ha funzionato per me, ma ho dovuto riavviare per rendere effettive le modifiche.
benjer3,

13

Hacky ma puoi modificare l'ID dell'utente in modo che non vengano visualizzati nell'elenco:

sudo usermod -u 999 <username>

Questo funziona perché gli utenti con ID inferiore a 1000 sono considerati utenti "di sistema" (ovvero non umani).

L'unico altro modo che conosco è nascondere completamente l'elenco:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'

3
Non esiste un "livello dell'utente", sono gli ID dell'utente.
João Pinto,

6
Questa usermod -uopzione è interessante: cambia automaticamente l'UID nella home directory e lo spool di posta (se presente) in modo che corrispondano. Tuttavia, potrebbe interrompere l'accesso a tutti i file che possiedono al di fuori della loro home directory.
poolie,

Per nascondere completamente l'elenco, puoi anche eseguire gdmsetup e usare la casella di controllo.
belacqua,

11

Elaborando il commento di Gilles alla risposta accettata, ecco quello che credo sia il modo attuale di "best practice" (sicuro per Gnome) per farlo. Questa modifica si rifletterà anche nella "Sessione dell'applet Indicatore" di Gnome.

Questo metodo è quello suggerito nei documenti sul sito web GDM , e sebbene sia il sito che Gilles mostrino l'aggiunta di "nessuno" all'esclusione, volevo assicurarmi che fosse chiaro che ciò fosse effettivamente necessario (nonostante ciò che le manpage o i documenti online offrono esplicitamente). Ho provato questo su un paio di sistemi 10.10 per verificare la ripetibilità.

Tutto quello che dobbiamo fare è effettuare una modifica su una riga /etc/gdm/custom.conf. La maggior parte degli altri metodi (apportando modifiche a default.conf, gdm.conf, ecc.) Sono obsoleti.

Se ne hai già uno /etc/gdm/custom.conf, modifica quel file. Altrimenti, copia sul file di esempio:

sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf

Nella sezione [Greeter] di /etc/gdm/custom.conf, aggiungi:

Exclude=user1,user2,nobody

Dove "user1" e "user2" sono i nomi utente o le voci del file passwd (ad es. Qmail, calamari, ecc.) Che non si desidera mostrare sul "face browser" GDM.

Nota : Sotto la mia versione di Gnome / GDM (2.30), se non hai "nessuno" elencato nella voce Escludi, allora verrà visualizzato un utente di accesso falso nobodyinvece di utente1 o utente2.

NB # 2 : la mancata visualizzazione degli account con UID inferiore a 1000 è un parametro configurabile. Per impostazione predefinita, il MinimalUIDvalore è impostato su 1000. Se e solo se l'impostazione predefinita IncludeAll=trueviene lasciata in atto e la Includedirettiva non viene modificata in un valore non vuoto, il programma di saluto GDM esegue la scansione del file passwd per le voci con UID maggiore di MinimalUID. Vengono quindi visualizzati gli utenti con UID sopra MinimalUID che non sono nell'elenco Escludi.

Non ho verificato se l'impostazione inversa, ovvero l'impostazione di una Include=user1,user2voce in custom.conf funzionerà come presentato. Dovrebbe sovrascrivere qualsiasi IncludeAllimpostazione e visualizzare solo gli utenti elencati esplicitamente.


+1 per riferimento al sito GDM e perché ha funzionato per me.
Aaron,

Non funziona più con le versioni più recenti di GDM.
Stefan van den Akker,

2

Ho scritto una sceneggiatura (gdm-greeter) questo fine settimana. Funziona bene su CentOS 6.2, mi chiedo se sarà utile per Ubuntu?

#!/bin/bash
#
# $LastChangedDate: 2012-02-17 09:13:10 +0100 (Fri, 17 Feb 2012) $
# $Revision: 1627 $
#

# Get the default exlude list
DefaultExclude=`sed 's,</schema>,#,' /etc/gdm/gdm.schemas | \
                tr '\n#' '#\n' | \
                grep '>greeter/Exclude<' | tr '\n#' '#\n' | \
                grep '<default>' | \
                sed -e 's,.*<default>,,' -e 's,</default>.*,,'`

# Get the Exclude list from the config
eval `grep '^Exclude=' /etc/gdm/custom.conf 2> /dev/null`

# If empty copy the default
if [ "$Exclude" = "" ]
then
   Exclude=$DefaultExclude
fi

# Collect all user accounts with a shell
Users="`grep 'sh$' /etc/passwd | awk -F: '{print $1}' | \
        sort | tr '\n' ',' | sed 's/,$//'`"


#------------------------------------------------------------------------------

# The functions area

PlaceExclude() # $1 new exclude string
{
   # Create a .bak file
   if [ ! -f /etc/gdm/custom.conf.bak ]
   then
      cp /etc/gdm/custom.conf /etc/gdm/custom.conf.bak
   fi

   # Create a tmp file without the Exclude string
   cat /etc/gdm/custom.conf | tr '[\n' '\n[' | \
   sed -e 's/^\(greeter[]].*\)[[]Exclude=[^[]*\([[].*\)/\1\2/' | \
   tr '[\n' '\n[' > /tmp/custom.conf.$$

   # If the tmp file is there and we have non default Exclude
   if [ -f /tmp/custom.conf.$$ ]
   then
      if [ "$1" = "$DefaultExclude" ]
      then
         cat /tmp/custom.conf.$$ > /etc/gdm/custom.conf
      else
         # Place the new Exclude string
         cat /tmp/custom.conf.$$ | tr '[\n' '\n[' | \
         sed -e "s/^greeter[]][[][[]/greeter][Exclude=$1[[/" | \
         tr '[\n' '\n[' > /etc/gdm/custom.conf
      fi
   fi
   rm -f cat /tmp/custom.conf.$$
}

#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

# Command area

add() # Cmd (Add a user to the greeter {<user>
{
   UserFilter=`echo $Users | sed 's/,/|/g'`
   if ! echo $1 | egrep -w $UserFilter &> /dev/null
   then
      echo "Error: user $1 unknown"
      echo
      return 1
   fi

   # Only work with the users not in the default exclude list
   Filter=`echo $DefaultExclude | sed 's/,/|/g'`
   Hidden=`echo $Exclude | tr ',' '\n' | egrep -vw "$Filter" | tr '\n' ','`

   # Check if we need to do something
   if ! echo $Hidden | tr ',' '\n' | grep -w $1 &> /dev/null
   then
      echo
      echo "User $1 is not hidden"
      echo
   else
      # Remove the user from the exclude
      PlaceExclude "`echo $Exclude | tr ',' '\n' | grep -vw $1 | \
                     tr '\n' ',' | sed 's/,$//'`"

      # Tell the action
      echo "User $1 added to the greeter"
      echo
   fi
}

del() # Cmd (Delete/hide a user from the greeter {<user>
{
   UserFilter=`echo $Users | sed 's/,/|/g'`
   if ! echo $1 | egrep -w $UserFilter &> /dev/null
   then
      echo "Error: user $1 unknown"
      echo
      return 1
   fi

   # Check if we need to do something
   if echo $Exclude | tr ',' '\n' | grep -w $1 &> /dev/null
   then
      echo
      echo "User $1 is already excluded from the greeter"
      echo
   else
      # Exclude the user
      PlaceExclude "$1,$Exclude"

      # Tell the action
      echo "User $1 hidden from the greeter"
      echo
   fi
}

hide() # CMD (Delete/hide a user from the greeter {<user>
{
   del $1
}

hidden() # Cmd (List the hidden users {
{
   Filter=`echo $DefaultExclude | sed 's/,/|/g'`
   Hidden=`echo $Exclude | tr ',' '\n' | egrep -vw "$Filter" | tr '\n' ','`

   if [ ${#Hidden} -eq 0 ]
   then
      echo "No hidden users"
      echo
   else
      echo
      echo "Users hidden from the greeter:"
      echo
      echo $Hidden | tr ',' '\n' | sed 's/^/   /'
   fi
}

users() # Cmd (List the users in the greeter {
{
   Filter=`echo $Exclude | sed 's/,/|/g'`
   Greeters=`echo $Users | tr ',' '\n' | egrep -vw "$Filter" | tr '\n' ','`

   if [ ${#Greeters} -eq 0 ]
   then
      echo "No users in the greeter"
      echo
   else
      echo
      echo "Users in the greeter:"
      echo
      echo $Greeters | tr ',' '\n' | sed 's/^/   /'
   fi
}

list() # CMD (List the users in the greeter {
{
   users
}
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

# Framework area

help() # Cmd (Command help {[command]
{
   if [ "$1" = "" ]
   then
      CMD=help
   else
      CMD=$1
   fi

   if ! grep \^${CMD}*\(\).*#.*Cmd $0 > /dev/null 2>&1
   then
   (
      echo
      echo "Error: unknown cmd"
      echo
   ) >&2
   else
   (
      echo
      echo "Usage: `basename $0` $CMD `grep \^${CMD}*\(\).*#.*Cmd $0 | \
                    sed 's/.* {//g'`"
      echo
   ) >&2
   fi
}

#
# Main
#

if [ "$1" != "" ] && grep -i $1\(\).*#.*Cmd $0 > /dev/null 2>&1
then
   $*
else
   echo
   echo "Usage: `basename $0` command [parm1] [parm2] [..]"
   echo
   echo "  Available Commands:"
   echo
   grep \^[0-9a-z_A-Z]*\(\).*#.*Cmd $0  | \
   awk -F\( '{printf "%-16s %s\n",$1,$3}' | sed 's/ {.*//g' | sort
   echo
fi

2

Dovrei essere d'accordo sul fatto che la risposta più accettata qui è vicina, ma non morta.

Ho appena leccato questo problema da solo, e la risposta per me è stata quella di modificare la seguente voce gdm.schema:

(original)
<schema>
      <key>greeter/IncludeAll</key>
      <signature>b</signature>
      <default>true</default>
    </schema>

(after my edit)
<schema>
      <key>greeter/IncludeAll</key>
      <signature>b</signature>
      <default>false</default>
    </schema>

L'effetto di ciò è che tutta la lista degli utenti è disabilitata, che se sto interpretando correttamente la domanda originale, è in realtà ciò che l'OP (gruszczy) intendeva fare. Ciò elimina la necessità di creare una lunga fila di esclusioni, poiché tutti gli ID utente indipendentemente dal numero UID vengono esclusi indipendentemente dalla modifica di questa impostazione. Ho applicato personalmente questa impostazione a 3 server CentOS 6.2 separati sul lavoro a cui è possibile accedere occasionalmente tramite XDMCP (utilizzando xrdp> server vnc> xinetd> gdm> gnome) su RDP, che consente ad alcuni dei nostri amministratori Linux meno esperti di lavorare su questi sistemi con una formazione minima.

Detto questo, mentre sono d'accordo che un amministratore di sistema inesperto dovrebbe imparare dall'inizio a lavorare da un account personale (forse con accesso sudo) piuttosto che come root, se hai l'esperienza di lavorare correttamente con quell'account, non c'è nulla di male nel farlo. Assicurati solo di sapere cosa stai facendo prima. Nel caso degli altri miei amministratori di sistema, ho aggiunto CentrifyDC per il supporto di Active Directory a tutti questi sistemi e configurato i sistemi in modo che gli AD-UserIDs possano essere utilizzati per le sessioni desktop mantenendo i diritti del gruppo di sicurezza AD dell'utente. Ma personalmente, da quando ho progettato tutti questi server e ho usato Linux per oltre 15 anni, non penso a nulla di usare root per velocizzare le cose. In effetti, tendo ad abilitare il root sui sistemi in cui ' è stato disabilitato solo per poter usare quell'account e andare al sodo per fare le cose. La cosa principale lì, in realtà, è solo l'abitudine di creare una copia di backup di qualsiasi file prima di modificarlo. Ciò proteggerà dalla maggior parte degli inconvenienti e ti consentirà di ripristinare il sistema se dovessi eseguire una modifica che altrimenti renderebbe il sistema inaccessibile (basta avviare un CD live e sistemare ciò che deve essere riparato).

IMHO, credo che il mantra di "non accedere come root" sia proprio lì per proteggere gli amministratori di sistema n00bie da loro stessi. Ma se raggiungi un livello di competenza con Linux al punto da poter progettare un sistema da qualsiasi sistema operativo Linux in pochissimo tempo e funziona ogni volta, allora non c'è motivo di vivere con il "non accedere mai come root" mantra perché a quel punto sei pronto a gestire la responsabilità derivante dall'utilizzo di quell'account. Ciò è particolarmente vero negli ambienti che utilizzano CentrifyDC per il supporto AD, poiché "root" diventa l'account sysadmin locale ed è (solitamente) abilitato automaticamente. Quindi, trovo che sia meglio andare al sodo e rendere l'impostazione della password dell'account root come una delle primissime attività che faccio in qualsiasi distribuzione al giorno d'oggi. Sicuro, Potrei fare tutto il 'login come il mio ID, quindi sudo up', ma personalmente non sento il bisogno di fare le cose in quel modo. Il tuo chilometraggio può variare ...


0

Cambia la shell di login dell'utente in una stringa vuota in / etc / passwd

Ad esempio, modifica:

# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash

# To
example:x:2001:2001:Example User,,,:/home/example:

Ho riavviato il mio display manager e ho notato che questo ha avuto effetto.

sudo service lightdm restart
# (or gdm, mdm, ...)

Mi ci sono volute settimane per identificarlo come il motivo per cui gli utenti erano nascosti nella finestra di benvenuto di login del gestore display. È evidente che / var / lib / AccountService / users viene ignorato da MDM e presumibilmente anche GDM. Non sono andato al punto di aggiungere un Exclude=user1,user2o un Include=user3sotto [greeter]in /etc/mdm/mdm.conf, o creare un /etc/mdm/custom.conf, in quanto un altro riquadro nascondeva gli utenti aggiunti useraddsemplicemente, mentre gli utenti aggiunti con addusersono stati mostrati. Impostando la shell di accesso su / bin / false si negano tutti gli accessi a quell'utente, che desidero ancora citare come. Ma ciò nasconde anche l'utente nella schermata di accesso se si desidera che tale utente sia semplicemente inaccessibile.

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.