it-swarm.it

Come nascondere gli utenti dalla schermata di accesso GDM?

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?

64
gruszczy

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. In passato esisteva uno strumento GUI piacevole, ma non è stato utilizzato 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.

30
Richard Holloway

Per i nuovi GDM 3.X, le vecchie risposte non funzionano, tranne che per questo
L'impostazione greeter in custom.conf è obsoleto , ovvero non funzionerà più. Una soluzione semplice se si desidera evitare di modificare l'UID dell'utente:

  1. Apri il terminale e inserisci (sostituisci user con 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 user non è più elencato.

55
miceagol

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'
13
Oli

Elaborando il commento di Gilles alla risposta accettata, ecco quello che credo sia l'attuale modo di "best practice" (sicuro di 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 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 di una riga su /etc/gdm/custom.conf. La maggior parte degli altri metodi (apportando modifiche a default.conf, gdm.conf, ecc.) Sono obsoleti.

Se hai un /etc/gdm/custom.conf esistente, 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, avrai un utente di accesso falso nobody mostra invece di user1 o user2.

N.B. # 2 : la non visualizzazione degli account con UID inferiore a 1000 è un parametro configurabile. Per impostazione predefinita, il valore MinimalUID è impostato su 1000. Se e solo se l'impostazione predefinita IncludeAll=true viene lasciata in posizione e la direttiva Include non viene modificata in un valore non vuoto, lo fa il greeter GDM esegue la scansione del file passwd alla ricerca di 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 voce Include=user1,user2 in custom.conf funzionerà come presentato. Dovrebbe sovrascrivere qualsiasi impostazione IncludeAll e visualizzare solo gli utenti elencati esplicitamente.

11
belacqua

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
Hans Vervaart

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 realtà, tendo ad abilitare il root sui sistemi in cui è stato disabilitato solo per poter usare quell'account e andare al sodo con il 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. Certo, potrei fare tutto il 'login come il mio ID, quindi Sudo up', ma personalmente non sento la necessità di fare le cose in quel modo. Il tuo chilometraggio può variare ...

2
StygianAgenda

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,user2 o un Include=user3 sotto [greeter] in /etc/mdm/mdm.conf, o creare un /etc/mdm/custom.conf , poiché un'altra finestra nascondeva gli utenti aggiunti tramite useradd bene, mentre venivano mostrati gli utenti aggiunti con adduser. Impostando la Shell di accesso su/bin/false si negano tutti gli accessi a quell'utente, che desidero ancora fare. Ma ciò nasconde anche l'utente nella schermata di accesso se si desidera che tale utente sia semplicemente inaccessibile.

0
ThorSummoner