it-swarm-eu.dev

Wie verstecke ich Benutzer vom GDM-Anmeldebildschirm?

Ich habe kürzlich einige neue Benutzer hinzugefügt, die ich für qmail benötige. Jetzt erscheinen sie in der Box auf dem Anmeldebildschirm und überladen es, und ich muss scrollen, um meinen Benutzer zu finden. Wie kann ich diese Benutzer aus dem Anmeldefeld ausblenden?

64
gruszczy

Bearbeiten Sie die Datei /etc/gdm/gdm.schema und suchen Sie den Abschnitt, der derzeit so aussieht:

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

Wenn Sie beispielsweise einen Benutzer mit dem Namen qmail ausschließen möchten, fügen Sie der Standardliste qmail hinzu, damit der Abschnitt so aussieht.

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

Dadurch wird verhindert, dass Benutzer-Qmail im GDM-Begrüßer angezeigt wird. Zu diesem Zweck gab es früher ein nettes GUI-Tool, das in den letzten Veröffentlichungen nicht in Ubuntu enthalten war.

Die andere Alternative besteht darin, die UID des Benutzers auf unter 1000 zu setzen. Dies sind Systemkonten, die auch im GDM-Begrüßer ausgeschlossen sind.

30

Bei neueren GDM 3.X-Versionen funktionieren alte Antworten nur mit dieser
Die Einstellung greeter in custom.conf ist veraltet , d. H., Sie funktioniert nicht mehr. Eine einfache Problemumgehung, wenn Sie vermeiden möchten, die Benutzer-ID zu ändern:

  1. Öffnen Sie das Terminal und geben Sie Folgendes ein (ersetzen Sie user durch den Benutzernamen, den Sie auf dem Anmeldebildschirm ausblenden möchten):

    Sudo nano /var/lib/AccountsService/users/user
    
  2. Fügen Sie der Datei Folgendes hinzu:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Wechseln Sie den Benutzer oder melden Sie sich ab, um zu testen, ob user nicht mehr aufgeführt ist.

55
miceagol

Hacky, aber Sie können die Benutzer-ID ändern, damit sie nicht in der Liste angezeigt werden:

Sudo usermod -u 999 <username>

Dies funktioniert, weil Benutzer mit einer ID unter 1000 als "Systembenutzer" (d. H. Nicht als Menschen) betrachtet werden.

Die einzige andere Möglichkeit, die ich kenne, besteht darin, die Liste vollständig auszublenden:

Sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
13
Oli

Ich gehe auf Gilles 's Kommentar zur akzeptierten Antwort ein und bin der Meinung, dass dies mit den aktuellen "Best Practices" (Gnome-safe) möglich ist. Diese Änderung wird auch in der "Indicator Applet Session" von Gnome berücksichtigt.

Diese Methode wurde in den Dokumenten auf der GDM-Website vorgeschlagen, und obwohl sowohl die Site als auch Gilles den Zusatz "nobody" zum Ausschluss aufweisen, wollte ich sicherstellen, dass klar ist, dass dies der Fall ist tatsächlich notwendig (trotz des Angebots der Hilfeseiten oder Online-Dokumente). Ich habe dies auf einigen 10.10-Systemen getestet, um die Wiederholbarkeit zu überprüfen.

Alles, was wir tun müssen, ist die einzeilige Bearbeitung von /etc/gdm/custom.conf. Die meisten anderen Methoden (Änderungen an default.conf, gdm.conf usw. vornehmen) sind veraltet.

Wenn Sie bereits einen /etc/gdm/custom.conf haben, bearbeiten Sie diese Datei. Andernfalls kopieren Sie die Beispieldatei:

Sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf

Fügen Sie im Abschnitt [Greeter] von /etc/gdm/custom.conf Folgendes hinzu:

Exclude=user1,user2,nobody

Wobei "user1" und "user2" die Benutzernamen oder passwd-Dateieinträge sind (z. B. qmail, squid usw.), die Sie nicht im GDM-Gesichtsbrowser anzeigen möchten.

Hinweis : Wenn in meiner Version von Gnome/GDM (2.30) im Eintrag "Ausschließen" kein "Niemand" aufgeführt ist, haben Sie einen gefälschten Anmeldebenutzer nobody wird anstelle von Benutzer1 oder Benutzer2 angezeigt.

N.B. # 2 : Die Nichtanzeige von Konten mit UIDs unter 1000 ist ein konfigurierbarer Parameter. Der MinimalUID -Wert wird standardmäßig auf 1000 festgelegt. Wenn und nur wenn die Standardeinstellung IncludeAll=true beibehalten wird und die Include -Direktive nicht in einen nicht leeren Wert geändert wird, gilt dies Der GDM-Begrüßer durchsucht die passwd-Datei nach Einträgen, deren UID größer als die MinimalUID ist. Benutzer mit einer UID über der MinimalUID, die nicht in der Ausschlussliste enthalten sind, werden angezeigt.

Ich habe nicht getestet, ob die umgekehrte Einstellung, nämlich die Einstellung eines Include=user1,user2 -Eintrags in der custom.conf, wie dargestellt funktioniert. Es sollte alle IncludeAll Einstellungen überschreiben und nur die explizit aufgelisteten Benutzer anzeigen.

11
belacqua

Ich habe an diesem Wochenende ein Skript (gdm-greeter) geschrieben. Es funktioniert gut auf CentOS 6.2, ich frage mich, ob es für Ubuntu nützlich sein wird?

#!/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

Ich muss zustimmen, dass die am meisten akzeptierte Antwort hier nah ist, aber nicht tot auf.

Ich habe dieses Problem gerade selbst geleckt und die Antwort für mich war, den folgenden gdm.schema-Eintrag zu ändern:

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

Dies hat zur Folge, dass alle Benutzerlisten deaktiviert sind. Wenn ich die ursprüngliche Frage richtig interpretiere, ist dies tatsächlich die Absicht des OP (gruszczy). Dadurch entfällt die Notwendigkeit, eine lange Reihe von Ausschlüssen zu erstellen, da alle Benutzer-IDs unabhängig von der UID-Nummer ausgeschlossen werden, sobald diese Einstellung geändert wird. Ich habe diese Einstellung persönlich auf drei separate CentOS 6.2-Server bei der Arbeit angewendet, auf die gelegentlich über XDMCP (mit xrdp> vnc-server> xinetd> gdm> gnome) über RDP zugegriffen wird, wodurch einige unserer weniger erfahrenen Linux-Administratoren daran arbeiten können Systeme mit minimaler Ausbildung.

Trotzdem stimme ich zu, dass ein unerfahrener Systemadministrator von Anfang an lernen sollte, von einem persönlichen Konto (möglicherweise mit Sudo-Zugriff) anstatt von einem Root-Konto aus zu arbeiten. Wenn Sie jedoch die Erfahrung haben, mit diesem Konto ordnungsgemäß zu arbeiten, ist dies kein Nachteil dabei. Stellen Sie einfach sicher, dass Sie wissen, was Sie tun. Bei meinen anderen Systemadministratoren habe ich allen diesen Systemen CentrifyDC für Active Directory-Unterstützung hinzugefügt und die Systeme so konfiguriert, dass die AD-Benutzer-IDs für Desktopsitzungen verwendet werden können, während die AD-Sicherheitsgruppenrechte des Benutzers beibehalten werden. Aber da ich persönlich alle diese Server entwickelt habe und seit über 15 Jahren Linux verwende, denke ich nicht daran, root zu verwenden, um die Dinge zu beschleunigen. Tatsächlich neige ich dazu, root auf Systemen zu aktivieren, auf denen es deaktiviert wurde, nur damit ich dieses Konto verwenden und mit der Erledigung von Aufgaben auf den Punkt kommen kann. Die Hauptsache ist, dass Sie sich angewöhnen, von jeder Datei eine Sicherungskopie zu erstellen, bevor Sie sie ändern. Dies schützt vor den meisten Pannen und ermöglicht es Ihnen, das System wiederherzustellen, falls Sie eine Bearbeitung durchführen, die andernfalls dazu führen würde, dass auf das System nicht mehr zugegriffen werden kann (starten Sie einfach von einer Live-CD und reparieren Sie, was repariert werden muss).

IMHO, ich glaube, dass das Mantra von "nie als root anmelden" wirklich nur da ist, um die n00bie-Sysadmins vor sich selbst zu schützen. Wenn Sie jedoch mit Linux so weit fortgeschritten sind, dass Sie in kürzester Zeit ein System von einem beliebigen Linux-Betriebssystem aus entwickeln können und es jedes Mal funktioniert, dann gibt es keinen Grund, sich an das Prinzip "Niemals als Root anmelden" zu halten. Mantra, denn zu diesem Zeitpunkt sind Sie bereit, die Verantwortung zu übernehmen, die mit der Nutzung dieses Kontos einhergeht. Dies gilt insbesondere für Umgebungen, in denen CentrifyDC für die AD-Unterstützung verwendet wird, da "root" zum lokalen Sysadmin-Konto wird und (normalerweise) automatisch aktiviert wird. Daher finde ich es am besten, auf den Punkt zu kommen und das Passwort des Root-Kontos als eine der allerersten Aufgaben festzulegen, die ich heutzutage bei jeder Bereitstellung mache. Sicher, ich könnte das ganze 'Anmelden als meine eigene ID, dann Sudo up' machen, aber ich persönlich habe nicht das Bedürfnis, die Dinge so zu machen. Ihr eigener Kilometerstand kann variieren ...

2
StygianAgenda

Ändern Sie die Benutzeranmeldungs-Shell in eine leere Zeichenfolge in/etc/passwd

Ändern Sie zum Beispiel:

# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash

# To
example:x:2001:2001:Example User,,,:/home/example:

Ich habe meinen Display-Manager neu gestartet und festgestellt, dass dies wirksam wird.

Sudo service lightdm restart
# (or gdm, mdm, ...)

Ich habe Wochen gebraucht, um festzustellen, warum Benutzer im Anmelde-Begrüßer des Display-Managers versteckt waren. Es ist offensichtlich, dass/var/lib/AccountService/users von MDM und vermutlich auch von GDM ignoriert wird. Ich bin nicht so weit gegangen, einen Exclude=user1,user2 oder einen Include=user3 unter [greeter] in /etc/mdm/mdm.conf hinzuzufügen oder eine /etc/mdm/custom.conf zu erstellen , als eine andere Box Benutzer versteckte, die über useradd hinzugefügt wurden, ganz gut, während Benutzer, die mit adduser hinzugefügt wurden, angezeigt wurden. Wenn Sie die Login-Shell auf/bin/false setzen, werden alle Anmeldungen für diesen Benutzer verweigert, die ich weiterhin als su möchte. Dadurch wird der Benutzer jedoch auch im Anmeldebildschirm ausgeblendet, wenn dieser Benutzer einfach nicht erreichbar sein soll.

0
ThorSummoner