Wie verstecke ich Benutzer vom GDM-Anmeldebildschirm?

64

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

gruszczy
quelle
Ich weiß nicht, ob Exclude=foobarin /etc/gdm/gdm.confWerken angehängt , haben Sie es versucht?
Umang
gute frage, antworten sind vielleicht veraltet (laut diskussion auf meta).
Thufir

Antworten:

30

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 Releases noch nicht in Ubuntu enthalten war.

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

Richard Holloway
quelle
afaik, das GUI-Tool funktioniert nicht mehr, da GDM von ebenen Textdateien für seine Konfiguration auf Gconf-Schemata umgestellt hat.
LassePoulsen
Danke für die Information Source Lab. Ich habe in den letzten Veröffentlichungen festgestellt, dass mehrere GUI-Tools aus ähnlichen Gründen verloren gegangen sind.
Richard Holloway
29
Eigentlich denke ich nicht, dass Sie modifizieren sollten /etc/gdm/gdm.schema. Fügen Sie stattdessen die beiden Zeilen [greeter] Exclude=nobody,qmail-foo,qmail-barzu hinzu /etc/gdm/custom.conf. (Abgesehen davon nobodywerden die Namen in der Standardliste sowieso nicht angezeigt, da ihre UID <1000 ist.)
Gilles 'SO - hör auf, böse zu sein',
3
Normalerweise sollten Sie dafür UIDs unter 1000 verwenden.
txwikinger
@RichardHolloway Kann eine solche Datei nicht finden Ubuntu 12.04.04, könntest du einen Rat geben?
Gotqn
56

Bei neuerem GDM 3.X funktionieren alte Antworten nur noch in diesem Fall.
Die greeterEinstellung in custom.confist veraltet , dh sie funktioniert nicht mehr. Eine einfache Problemumgehung, wenn Sie vermeiden möchten, die Benutzer-ID zu ändern:

  1. Öffnen Sie das Terminal und geben userSie Folgendes ein (ersetzen Sie es 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 usernicht mehr aufgeführt ist.

miceagol
quelle
1
Genau das habe ich nach dem Lesen der Arch-Dokumente getan . Diese Antwort sollte positiv bewertet werden, damit die Leute sie früher sehen und etwas Zeit sparen.
Stefan van den Akker
scheint wie der richtige Weg, anstatt
UIDs zu
1
Fantastisch! Dies hilft, das Problem zu lösen, dass Benutzer mit Benutzer-IDs unter 1000 im Anmeldebildschirm ausgeblendet sind.
Biocyberman
1
Welche Konsequenzen hat es, einen Benutzer zu einem Systemkonto zu machen?
Jistanidiot
2
Dies funktionierte für mich, aber ich musste neu starten, damit die Änderung wirksam wurde.
Benjer3
13

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" (dh 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'
Oli
quelle
3
Es gibt kein "Benutzerlevel", es sind die Benutzer-IDs.
João Pinto
6
Diese usermod -uOption ist interessant: Sie ändert automatisch die UID für das Ausgangsverzeichnis und den Mail-Spool (falls vorhanden) entsprechend. Der Zugriff auf Dateien, die sich außerhalb des Basisverzeichnisses befinden, wird möglicherweise unterbrochen.
Poolie
Um die Liste vollständig auszublenden, können Sie auch gdmsetup ausführen und das Kontrollkästchen verwenden.
Belacqua
11

Ich gehe auf Gilles '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 wird in den Dokumenten auf der GDM-Website vorgeschlagen , und obwohl sowohl die Site als auch Gilles den Zusatz "nobody" zum Ausschluss enthalten, wollte ich sicherstellen, dass klar ist, dass dies tatsächlich notwendig ist (trotz der in den Manpages enthaltenen Informationen) oder Online-Dokumente ausdrücklich anbieten). Ich habe dies auf einigen 10.10-Systemen getestet, um die Wiederholbarkeit zu überprüfen.

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

Wenn Sie bereits eine haben /etc/gdm/custom.conf, 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 Folgendes /etc/gdm/custom.confhinzu:

Exclude=user1,user2,nobody

Wobei "user1" und "user2" die Benutzernamen oder passwd-Dateieinträge (z. B. qmail, squid usw.) sind, 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, wird nobodyanstelle von Benutzer1 oder Benutzer2 ein falscher Anmeldebenutzer angezeigt.

Anmerkung 2 : Die Nichtanzeige von Konten mit UIDs unter 1000 ist ein konfigurierbarer Parameter. Standardmäßig ist der MinimalUIDWert auf 1000 festgelegt. Wenn und nur wenn die Standardeinstellung beibehalten IncludeAll=truewird und die IncludeDirektive nicht in einen nicht leeren Wert geändert wird, durchsucht der GDM-Begrüßer die passwd-Datei nach Einträgen, deren UID größer als 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,user2Eintrags in der custom.conf, wie dargestellt funktioniert. Es sollte alle IncludeAllEinstellungen außer Kraft setzen und nur die explizit aufgelisteten Benutzer anzeigen.

belacqua
quelle
+1 für einen Verweis auf die Website von GDM, und weil dies für mich funktioniert hat.
Aaron
Funktioniert nicht mehr auf neueren Versionen von GDM.
Stefan van den Akker
2

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

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

Trotzdem stimme ich zu, dass ein unerfahrener Systemadministrator von Anfang an lernen sollte, von einem persönlichen Konto aus (möglicherweise mit Sudo-Zugriff) anstatt als Root zu arbeiten 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. In der Tat neige ich dazu, root auf Systemen zu aktivieren, auf denen es Es wurde nur deaktiviert, damit ich dieses Konto verwenden und mit der Erledigung der 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.

IMHO, ich glaube, dass das Mantra von "nie als root einloggen" 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 ...

StygianAgenda
quelle
0

Ändern Sie die Benutzeranmeldeshell 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, ein Exclude=user1,user2oder ein Include=user3Under [greeter]in /etc/mdm/mdm.conf hinzuzufügen oder eine /etc/mdm/custom.conf zu erstellen, da eine andere Box Benutzer versteckt, die über useraddjust fine hinzugefügt wurden , während Benutzer hinzugefügt mit adduserwurden gezeigt. Wenn Sie die Anmeldeshell 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.

ThorSummoner
quelle