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

64

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?

Gruszczy
la source
Je ne sais pas si l'ajout Exclude=foobaraux /etc/gdm/gdm.confœuvres, l'avez-vous essayé?
Umang
bonne question, les réponses sont peut-être obsolètes (comme dans la discussion sur la méta).
Thufir

Réponses:

30

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 y avait un bon outil graphique pour faire cela, mais cela 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.

Richard Holloway
la source
Autant que je sache, l’outil graphique ne fonctionne plus, GDM étant passé des fichiers texte de plan pour sa configuration aux schémas Gconf.
LassePoulsen
Merci pour l'information Source Lab. J'ai remarqué qu'au cours des dernières versions, plusieurs outils d'interface graphique ont été perdus pour des raisons similaires.
Richard Holloway
29
En fait, je ne pense pas que vous devriez modifier /etc/gdm/gdm.schema. Au lieu de cela, ajoutez les deux lignes [greeter] Exclude=nobody,qmail-foo,qmail-barà /etc/gdm/custom.conf. (A part cela nobody, les noms dans la liste par défaut n'apparaîtront pas parce que leur ID utilisateur est <1000.)
Gilles 'arrête d'être méchant'
3
Habituellement, vous devriez utiliser des uids inférieurs à 1000 pour cela
txwikinger
@RichardHolloway Impossible de trouver un tel fichier Ubuntu 12.04.04, pourriez-vous un conseil?
Gotqn
56

Pour les versions plus récentes de GDM 3.X, les anciennes réponses ne fonctionnent pas, sauf pour celle-ci.
La greeterconfiguration custom.confest obsolète , c’est-à-dire que cela 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 sur 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 tester si usern'est plus répertorié.

miceagol
la source
1
En effet, c’est ce que j’ai fait après avoir lu la documentation Arch . Cette réponse devrait être votée afin que les gens la voient plus tôt et gagnent du temps.
Stefan van den Akker
semble être la manière appropriée plutôt que de manipuler les UID
xuma202
1
Fantastique! Cela aide à résoudre le problème des utilisateurs avec moins de 1000 UID sont cachés sur l'écran de connexion.
biocyberman
1
Quelles sont les conséquences de la création d'un compte système pour un utilisateur?
Jistanidiot
2
Cela a fonctionné pour moi, mais j'ai dû redémarrer pour que le changement prenne effet.
benjer3
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 parce que les utilisateurs avec un identifiant inférieur à 1000 sont considérés comme des utilisateurs "système" (c.-à-d. 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'
Oli
la source
3
"Le niveau de l'utilisateur" n'existe pas, ce sont ses identifiants.
João Pinto
6
Cette usermod -uoption est intéressante: elle change automatiquement l'ID du répertoire de base et le spool de courrier (le cas échéant) pour qu'il corresponde. Cependant, cela pourrait empêcher leur accès aux fichiers qu’ils possèdent en dehors de leur répertoire personnel.
poolie
Pour masquer complètement la liste, vous pouvez également exécuter gdmsetup et utiliser la case à cocher.
Belacqua
11

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 GDM , et bien que le site et Gilles indiquent que "personne" est ajouté à l'exclusion, je voulais m'assurer qu'il était clair que cela est réellement nécessaire (malgré les pages de manuel ou les documents en ligne offrent 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 en avez un /etc/gdm/custom.conf, é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 de mot de passe (par exemple, qmail, calmar, etc.) que vous ne souhaitez pas afficher sur le "navigateur de visage" de GDM.

Remarque : Dans ma version de Gnome / GDM (2.30), si vous ne voyez pas "personne" dans l'entrée Exclure, vous aurez un faux utilisateur de connexion qui nobodyapparaît à la place de l'utilisateur1 ou de l'utilisateur2.

NB # 2 : Le non affichage des comptes avec des UID inférieurs à 1000 est un paramètre configurable. Par défaut, la MinimalUIDvaleur est définie sur 1000. Si et seulement si le paramètre par défaut IncludeAll=trueest laissé en place et que la Includedirective n'est pas remplacée par une valeur non vide, la sonde GDM analyse le fichier passwd à la recherche d'entrées dont l'UID est 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 vérifié si le paramètre inverse, à savoir que définir une Include=user1,user2entrée dans custom.conf fonctionnerait tel que présenté. Il doit remplacer tout IncludeAllparamètre et afficher uniquement les utilisateurs explicitement répertoriés.

Belacqua
la source
+1 pour référence au site de GDM, et parce que cela a fonctionné pour moi.
Aaron
Ne fonctionne plus sur les nouvelles versions de GDM.
Stefan van den Akker
2

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

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 initiale, c'est 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 quelle que soit la modification de ce paramètre. 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 à 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 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 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 root sur les systèmes où il s a été désactivé pour que je puisse utiliser ce compte et me mettre à la poursuite d'objects concrets. 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 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. Sûr, Je pourrais faire l'intégralité de la connexion en tant que mon propre identifiant, puis rapidement, mais personnellement, je ne ressens pas le besoin de faire les choses de cette façon. Votre propre kilométrage peut varier ...

StygianAgenda
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 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é aussi loin que d'ajouter un Exclude=user1,user2ou un Include=user3sous [greeter]dans /etc/mdm/mdm.conf, ou créer un /etc/mdm/custom.conf, comme une autre boîte a été ajoutée aux utilisateurs qui se cachent par useraddtrès bien, tandis que les utilisateurs ajouté avec adduseront été montré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.

ThorSummoner
la source