web-dev-qa-db-fra.com

Comment masquer les utilisateurs de l'écran de connexion GDM?

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?

64
gruszczy

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.

30
Richard Holloway

Pour GDM 3.X plus récent, les anciennes réponses ne fonctionnent pas, sauf pour celle-ci
Le paramètre greeterdans 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:

  1. Ouvrez le terminal et entrez (remplacez userpar le nom d'utilisateur que vous souhaitez masquer dans l'écran de connexion):

    Sudo nano /var/lib/AccountsService/users/user
    
  2. Ajoutez ce qui suit au fichier:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Changez d'utilisateur ou déconnectez-vous pour vérifier si usern'est plus dans la liste.

55
miceagol

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

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 nobodyau 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 MinimalUIDest définie sur 1000. Si et seulement si le paramètre par défaut IncludeAll=true est laissé en place et que la directive Includen'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 IncludeAllet afficher uniquement les utilisateurs explicitement répertoriés.

11
belacqua

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

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 ...

2
StygianAgenda

Remplacez le shell de connexion de l'utilisateur par une chaîne vide dans/etc/passwd

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.

0
ThorSummoner