J'ai récemment ajouté plusieurs nouveaux utilisateurs, dont j'ai besoin pour qmail. Maintenant, ils apparaissent dans la boîte dans l'écran de connexion et l'encombrent, et je dois faire défiler pour trouver mon utilisateur. Comment puis-je masquer ces utilisateurs de la zone de connexion?
Editez le fichier /etc/gdm/gdm.schema pour trouver la section qui ressemble à ceci:
<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>
Et pour exclure un utilisateur appelé qmail, par exemple, ajoutez qmail à la liste par défaut pour que la section ressemble à ceci.
<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>
Cela empêchera l'utilisateur qmail d'apparaître dans la page d'accueil de gdm. Il existait un outil graphique agréable pour le faire, mais il n’a pas été dans Ubuntu depuis quelques versions.
L'autre alternative consiste à définir l'UID de l'utilisateur sur moins de 1 000. Ceux-ci sont également considérés comme des comptes système exclus de la bannière GDM.
Pour GDM 3.X plus récent, les anciennes réponses ne fonctionnent pas, sauf pour celle-ci
Le paramètre greeter
dans custom.conf
est obsolète , c’est-à-dire qu’il ne fonctionnera plus. Une solution de contournement facile si vous souhaitez éviter de changer l’utilisateur de l’utilisateur:
Ouvrez le terminal et entrez (remplacez user
par le nom d'utilisateur que vous souhaitez masquer dans l'écran de connexion):
Sudo nano /var/lib/AccountsService/users/user
Ajoutez ce qui suit au fichier:
[User]
Language=
XSession=gnome
SystemAccount=true
Changez d'utilisateur ou déconnectez-vous pour vérifier si user
n'est plus dans la liste.
Hacky mais vous pouvez modifier l'id de l'utilisateur pour qu'il n'apparaisse pas dans la liste:
Sudo usermod -u 999 <username>
Cela fonctionne parce que les utilisateurs avec un identifiant inférieur à 1000 sont considérés comme des utilisateurs "système" (c'est-à-dire pas des humains).
Le seul autre moyen que je connaisse est de masquer complètement la liste:
Sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
En développant le commentaire de Gilles à la réponse acceptée, voici ce que je crois être la "meilleure pratique" actuelle (gnome-safe) pour y parvenir. Cette modification sera également reflétée dans la "session d'applet d'indicateur" de Gnome.
Cette méthode est celle suggérée dans la documentation du site Web de GDM , et bien que le site et Gilles affichent l'ajout de "personne" à l'exclusion, je voulais m'assurer qu'il était clair qu'il s'agit bien réellement nécessaires (malgré ce que les pages de manuel ou la documentation en ligne proposent explicitement). J'ai testé cela sur deux systèmes 10.10 pour vérifier la répétabilité.
Tout ce que nous avons à faire est de modifier en une ligne /etc/gdm/custom.conf
. La plupart des autres méthodes (modification de default.conf, gdm.conf, etc.) sont obsolètes.
Si vous avez un /etc/gdm/custom.conf
existant, éditez ce fichier. Sinon, copiez le fichier d'exemple:
Sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf
Dans la section [Greeter] de /etc/gdm/custom.conf
, ajoutez:
Exclude=user1,user2,nobody
Où "utilisateur1" et "utilisateur2" sont les noms d'utilisateur ou les entrées de fichier mot de passe (par exemple, qmail, calmar, etc.) que vous ne souhaitez pas afficher sur le "navigateur de visage" de GDM.
Remarque : Sous ma version de Gnome/GDM (2.30), si vous ne voyez pas "personne" dans l'entrée Exclure, vous aurez alors un faux utilisateur de connexion nobody
au lieu de user1 ou user2.
N.B. # 2 : Le non-affichage des comptes avec des UID inférieurs à 1000 est un paramètre configurable. Par défaut, la valeur MinimalUID
est définie sur 1000. Si et seulement si le paramètre par défaut IncludeAll=true
est laissé en place et que la directive Include
n'est pas remplacée par une valeur non vide, le greeter GDM analyse-t-il le fichier mot de passe pour les entrées avec un ID supérieur que MinimalUID. Les utilisateurs dont l'UID est supérieur à MinimalUID et qui ne figurent pas dans la liste d'exclusion sont ensuite affichés.
Je n'ai pas vérifié si le paramètre inverse, à savoir que définir une entrée Include=user1,user2
dans custom.conf fonctionnerait tel que présenté. Il doit remplacer tout paramètre IncludeAll
et afficher uniquement les utilisateurs explicitement répertoriés.
J'ai écrit un script (gdm-greeter) ce week-end. Cela fonctionne bien sur CentOS 6.2, je me demande si cela sera utile pour 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
Je dois admettre que la réponse la plus acceptée ici est proche, mais pas irréprochable.
Je viens de lécher ce problème moi-même, et la solution pour moi était de modifier l'entrée suivante de 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>
En conséquence, toutes les listes d'utilisateurs sont désactivées. Si j'interprète correctement la question d'origine, il s'agit en fait de ce que l'OP (gruszczy) avait l'intention de faire. Ceci élimine le besoin de créer une longue ligne d'exclusions, car tous les ID utilisateur, quel que soit leur numéro, sont exclus une fois ce paramètre modifié. J'ai personnellement appliqué ce paramètre à 3 serveurs CentOS 6.2 distincts au travail, auxquels il est parfois possible d'accéder via XDMCP (avec xrdp> vnc-server> xinetd> gdm> gnome) via RDP, ce qui permet à certains de nos administrateurs Linux moins expérimentés de travailler sur ceux-ci. systèmes avec une formation minimale.
Tout cela étant dit, même si je suis d'accord pour dire qu'un administrateur système inexpérimenté devrait apprendre dès le début à utiliser un compte personnel (peut-être avec un accès Sudo) plutôt qu'en tant que root, si vous avez l'expérience nécessaire pour utiliser ce compte correctement, il n'y a pas de problème en le faisant. Assurez-vous simplement de savoir ce que vous faites avant de commencer. Dans le cas de mes autres administrateurs système, j'ai ajouté CentrifyDC pour Active Directory à tous ces systèmes et les ai configurés de sorte que les AD-UserIDs puissent être utilisés pour les sessions de bureau tout en conservant les droits du groupe de sécurité AD de l'utilisateur. Mais personnellement, depuis que j'ai conçu tous ces serveurs et utilisé Linux depuis plus de 15 ans, je ne pense pas à utiliser root pour accélérer les choses. En fait, j'ai tendance à activer la racine sur les systèmes où elle a été désactivée afin de pouvoir utiliser ce compte et de me lancer à la poursuite de l'objectif. En réalité, l’essentiel est de prendre l’habitude de créer une copie de sauvegarde de tout fichier avant de le modifier. Cela vous évitera la plupart des incidents et vous permettra de restaurer le système si vous effectuez une modification qui rendrait le système inaccessible (démarrez simplement sur un CD live et corrigez ce qui doit être corrigé).
IMHO, je crois que le mantra de "ne jamais se connecter en tant que root" est vraiment juste là pour protéger les administrateurs système n00bie d'eux-mêmes. Mais si vous atteignez un niveau de compétence avec Linux au point où vous pouvez concevoir un système à partir de n’importe quel système d’exploitation Linux en très peu de temps et qu’il fonctionne à chaque fois, il n’ya aucune raison de vivre selon le principe "ne jamais vous connecter en tant que root". mantra, car à ce stade, vous êtes prêt à assumer la responsabilité qui découle de l’utilisation de ce compte. Cela est particulièrement vrai dans les environnements qui utilisent CentrifyDC pour la prise en charge d'AD, car 'root' devient le compte administrateur système local et est (généralement) activé automatiquement. Je trouve donc préférable d’aller droit au but et de définir le mot de passe du compte root comme l’une des toutes premières tâches que j’effectue actuellement lors de tout déploiement. Bien sûr, je pourrais faire tout le processus de connexion avec ma propre identité, puis avec Sudo, mais je ne ressens pas personnellement le besoin de faire les choses de cette façon. Votre propre kilométrage peut varier ...
Par exemple, changez:
# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash
# To
example:x:2001:2001:Example User,,,:/home/example:
J'ai redémarré mon gestionnaire d'affichage et ai observé que cela prenait effet.
Sudo service lightdm restart
# (or gdm, mdm, ...)
Cela m'a pris des semaines pour identifier cela comme la raison pour laquelle les utilisateurs étaient cachés dans la barre de connexion du gestionnaire d'affichage. Il est évident que/var/lib/AccountService/users est ignoré par MDM, et supposé également par GDM. Je ne suis pas allé jusqu'à ajouter un Exclude=user1,user2
ou un Include=user3
sous [greeter]
dans /etc/mdm/mdm.conf, ou créer un /etc/mdm/custom.conf, car une autre boîte masquait les utilisateurs ajoutés via useradd
uniquement très bien, alors que les utilisateurs ajoutés avec adduser
étaient affichés. Définir le shell de connexion sur/bin/false empêche toute connexion à cet utilisateur, ce que je souhaite toujours utiliser. Mais cela cache également l'utilisateur dans l'écran de connexion si vous voulez que cet utilisateur soit tout simplement inaccessible.