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

63

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?

    
posée gruszczy 17.08.2010 - 12:25
la source

7 réponses

30

Modifiez 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, ajoutez par exemple 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 gdm. Auparavant, il existait un bon outil graphique, mais il n’a pas été dans Ubuntu depuis quelques versions.

L’autre option consiste à définir l’UID de l’utilisateur sur moins de 1 000. Ces comptes sont considérés comme des comptes système exclus également de la bannière GDM.

    
réponse donnée Richard Holloway 17.08.2010 - 13:30
la source
49

Pour les versions plus récentes de GDM 3.X, les anciennes réponses ne fonctionnent pas, sauf pour celle-ci
Le paramètre greeter dans custom.conf est obsolète , autrement dit, cela ne fonctionnera pas. plus. Une solution de contournement simple si vous souhaitez éviter de modifier l’identifiant de l’utilisateur:

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

    sudo nano /var/lib/AccountsService/users/user
    
  2. Ajoutez les éléments suivants au fichier:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Changez d'utilisateur ou déconnectez-vous pour tester si user n'est plus répertorié.

réponse donnée miceagol 04.11.2014 - 23:10
la source
13

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 car les utilisateurs dont l'identifiant est inférieur à 1 000 sont considérés comme des utilisateurs "système" (c'est-à-dire non des humains).

Le seul autre moyen que je connaisse consiste à masquer complètement la liste:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
    
réponse donnée Oli 17.08.2010 - 12:44
la source
11

Pour en savoir plus sur 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 GDM . et, bien que le site et Gilles indiquent tous les deux l'ajout de "personne", je voulais m'assurer qu'il était clair que cela est réellement nécessaire (malgré ce que les pages de manuel ou la documentation en ligne proposent explicitement). J'ai testé cela sur quelques systèmes 10.10 pour vérifier la répétabilité.

Tout ce que nous avons à faire, c’est d’éditer sur une ligne la modification de /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 n'avez pas "personne" répertorié dans l'entrée Exclure, alors vous aurez un faux utilisateur de connexion nobody affiché au lieu de utilisateur1 ou utilisateur2.

N.B. # 2 : le non-affichage des comptes avec des UID inférieurs à 1 000 est un paramètre configurable. Par défaut, la valeur MinimalUID est définie sur 1 000. 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, la centrale GDM analyse-t-elle le mot de passe fichier pour les entrées avec un UID supérieur à 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 encore 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.

    
réponse donnée belacqua 19.01.2011 - 04:48
la source
2

J'ai écrit un script (gdm-greeter) ce week-end. Cela fonctionne bien sur CentOS 6.2, je me demande s’il 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=[^[]*\([[].*\)//' | \
   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
    
réponse donnée Hans Vervaart 19.02.2012 - 22:58
la source
2

Je suis d’accord pour dire que la réponse la plus acceptée ici est proche, mais pas irréprochable.

Je viens de lécher le problème moi-même, et la solution a été 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, toute la liste des utilisateurs est désactivée, ce qui, si j'interprète correctement la question d'origine, correspond en fait à ce que l'OP (gruszczy) avait l'intention de faire. Cela é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 on accède parfois via XDMCP (à l'aide de xrdp > vnc-server > xinetd > gdm > gnome) via RDP, ce qui permet à certains de nos utilisateurs Linux moins expérimentés Les administrateurs travaillent sur ces systèmes avec une formation minimale.

Tout cela étant dit, bien que je convienne qu'un administrateur système inexpérimenté devrait apprendre dès le début à travailler à partir d'un compte personnel (peut-être avec 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 mal à le faire. 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 manière à ce 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 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 un laps de temps très court et qu’il fonctionne à chaque fois, il n’ya aucune raison de vivre avec le "jamais connecté 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 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 en tant que ma propre identité, puis rapidement, mais personnellement, je ne ressens pas le besoin de faire les choses de cette façon. Votre propre kilométrage peut varier ...

    
réponse donnée StygianAgenda 07.09.2012 - 17:32
la source
0

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 constaté 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 page 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, comme le ferait une autre boîte. masquer les utilisateurs ajoutés via useradd est parfait, tandis que les utilisateurs ajoutés avec adduser étaient affichés. Définir le shell de connexion sur / bin / false empêche toutes les connexions à cet utilisateur, ce que je souhaite toujours. Mais cela cache également l'utilisateur dans l'écran de connexion si vous voulez que cet utilisateur soit tout simplement inaccessible.

    
réponse donnée ThorSummoner 11.05.2017 - 05:46
la source

Lire d'autres questions sur les étiquettes