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?
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?
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.
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:
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
Aggiungi quanto segue al file:
[User]
Language=
XSession=gnome
SystemAccount=true
Cambia utente o disconnessione per verificare se user
non è più elencato.
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'
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.
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
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 ...
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.
Leggi altre domande sui tag gdm