Come nascondere gli utenti dalla schermata di accesso GDM?

63

Ho recentemente aggiunto diversi nuovi utenti, di cui ho bisogno per qmail. Ora appaiono nella casella nella schermata di login e lo ingombrano, e devo scorrere per trovare il mio utente. Come posso nascondere quegli utenti dalla casella di accesso?

    
posta gruszczy 17.08.2010 - 12:25

7 risposte

30

Modifica il file /etc/gdm/gdm.schema trova la sezione che al momento assomiglia a questa:

  <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 per esempio aggiungi qmail alla lista predefinita in modo che la sezione assomigli 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 che qmail appare nel gdm greeter. C'era un bell'interfaccia grafica per fare questo, ma non è stato in Ubuntu per le 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 dal greeter GDM.

    
risposta data Richard Holloway 17.08.2010 - 13:30
49

Per le nuove versioni di GDM 3.X, le risposte precedenti non funzionano, ad eccezione di questo
L'impostazione greeter in custom.conf è obsoleta , ovvero non funzionerà più. Un semplice trucco se si vuole evitare di cambiare l'uid dell'utente:

  1. Apri il terminale e inserisci (sostituisci user con il nome utente che desideri 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 disconnessione per verificare se user non è più elencato.

risposta data miceagol 04.11.2014 - 23:10
13

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

sudo usermod -u 999 <username>

Funziona perché gli utenti con ID inferiore a 1000 sono considerati utenti "di sistema" (cioè non umani).

L'unico altro modo che conosco è quello di nascondere completamente la lista:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
    
risposta data Oli 17.08.2010 - 12:44
11

Esaminando il commento di Gilles alla risposta accettata, ecco quello che ritengo sia il modo corrente di "best practice" (Gnome-safe) per farlo. Questo cambiamento si rifletterà anche nella "Sessione di applet Indicatore" di Gnome.

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

Tutto ciò che dobbiamo fare è creare una modifica su una riga su /etc/gdm/custom.conf . La maggior parte degli altri metodi (apportare modifiche a default.conf, gdm.conf, ecc.) Sono deprecati.

Se hai un /etc/gdm/custom.conf esistente, modifica quel file. Altrimenti, copia il 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 "utente1" e "utente2" sono i nomi utente o le voci del file passwd (ad esempio, qmail, squid, ecc.) che non desideri mostrare sul "browser face" di GDM.

Nota : sotto la mia versione di Gnome / GDM (2.30), se non hai "nessuno" elencato nella voce Exclude, allora avrai un utente login fasullo nobody show up invece di user1 o user2.

N.B. # 2 : la mancata 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 è lasciata sul posto e la direttiva Include non viene modificata in un valore non vuoto, il GDM greeter esegue la scansione del passwd file per voci con UID maggiore di MinimalUID. Vengono quindi visualizzati gli utenti con UID sopra MinimalUID che non sono inclusi nell'elenco di esclusione.

Non ho provato se l'impostazione inversa, cioè, che 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 in modo esplicito.

    
risposta data belacqua 19.01.2011 - 04:48
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=[^[]*\([[].*\)//' | \
   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
    
risposta data Hans Vervaart 19.02.2012 - 22:58
2

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

Ho appena leccato questo problema da solo, e la risposta per me era 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 questo è che tutti gli elenchi utente sono disabilitati, il 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 serie di esclusioni, in quanto tutti gli ID utente, indipendentemente dal numero UID, vengono esclusi indipendentemente da quando questa impostazione viene modificata. Ho applicato personalmente questa impostazione a 3 server CentOS 6.2 separati al lavoro a cui si accede occasionalmente tramite XDMCP (usando xrdp & gt; vnc-server & gt; xinetd & gt; gdm & gt; gnome) su RDP, che consente ad alcuni dei nostri meno esperti Linux gli amministratori lavorano su questi sistemi con un addestramento minimo.

Tutto ciò detto, mentre sono d'accordo che un sysadmin inesperto dovrebbe imparare fin dall'inizio a lavorare da un account personale (magari con accesso sudo) piuttosto che come root, se hai l'esperienza per lavorare correttamente con quell'account, non c'è niente di male nel farlo. Assicurati solo di sapere cosa stai facendo in anticipo. 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 ID-ID utente possano essere utilizzati per le sessioni desktop mantenendo i diritti del gruppo di sicurezza AD dell'utente. Ma personalmente, dal momento che ho progettato tutti questi server e ho usato Linux da oltre 15 anni, non penso nulla dell'utilizzo di root per accelerare le cose. In effetti, tendo ad abilitare root sui sistemi in cui è stato disabilitato solo per poter utilizzare quell'account e tagliare l'inseguimento con le cose da fare. La cosa principale lì, in realtà, è solo prendere l'abitudine di creare una copia di backup di qualsiasi file prima di modificarlo. Ciò proteggerà la maggior parte dei disavventure e ti consentirà di ripristinare il sistema se dovessi eseguire una modifica che altrimenti renderebbe il sistema inaccessibile (basta avviare un CD live e correggere ciò che deve essere corretto).

IMHO, credo che il mantra di "non accedere mai come root" sia davvero lì solo per proteggere gli amministratori di sistema n00bie da se stessi. Ma se raggiungi un livello di competenza con Linux fino al punto in cui puoi ingegnerizzare un sistema da qualsiasi sistema operativo Linux in pochissimo tempo e funziona sempre, allora non c'è motivo di vivere con "mai accedere come root" mantra perché a quel punto sei pronto a gestire la responsabilità che deriva dall'usare quell'account. Ciò è particolarmente vero negli ambienti che utilizzano CentrifyDC per il supporto di Active Directory, perché "root" diventa l'account sysadmin locale ed è (solitamente) abilitato automaticamente. Quindi, trovo il modo migliore per passare all'inseguimento e rendere l'impostazione della password dell'account root come una delle primissime attività che faccio su qualsiasi distribuzione al giorno d'oggi. Certo, potrei fare l'intero 'login come mio ID personale, poi sudo su', ma personalmente non sento il bisogno di fare le cose in questo modo. Il tuo chilometraggio può variare ...

    
risposta data StygianAgenda 07.09.2012 - 17:32
0

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

Ad esempio, cambia:

# 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 osservato che questo ha effetto.

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

Ci sono volute settimane per identificarlo come la ragione per cui gli utenti erano nascosti nel gestore di accessi del display manager. È evidente che / var / lib / AccountService / utenti viene ignorato da MDM e presumibilmente GDM. Non sono arrivato 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, come era un altro riquadro nascondendo gli utenti aggiunti tramite useradd bene, mentre gli utenti aggiunti con adduser sono stati mostrati. L'impostazione della shell di login su / bin / false nega tutti gli accessi a quell'utente, che desidero ancora su come. Ma questo nasconde anche l'utente nella schermata di login se vuoi che quell'utente sia semplicemente inaccessibile.

    
risposta data ThorSummoner 11.05.2017 - 05:46

Leggi altre domande sui tag