Jak ukryć użytkowników przed ekranem logowania GDM?


64

Ostatnio dodałem kilku nowych użytkowników, których potrzebuję do qmaila. Teraz pojawiają się w polu na ekranie logowania i zaśmiecają je, a ja muszę przewinąć, aby znaleźć mojego użytkownika. Jak mogę ukryć tych użytkowników przed polem logowania?


Nie wiem, czy dołączanie Exclude=foobarw /etc/gdm/gdm.confpracach, próbowałeś?
Umang,

dobre pytanie, odpowiedzi mogą być nieaktualne (jak w dyskusji na temat meta).
Thufir

Odpowiedzi:


30

Edytuj plik /etc/gdm/gdm.schema znajdź sekcję, która obecnie wygląda następująco:

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

Aby wykluczyć użytkownika o nazwie qmail, na przykład dodaj qmail do domyślnej listy, aby sekcja wyglądała tak.

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

Zapobiegnie to pojawianiu się qmaila przez użytkownika w gdm greeter. Było do tego ładne narzędzie GUI, ale nie było go w Ubuntu od kilku ostatnich wydań.

Inną alternatywą jest ustawienie UID użytkownika na mniej niż 1000. Są one uważane za konta systemowe, które są również wykluczone w programie GDM.


afaik, narzędzie GUI już nie działa, ponieważ GDM przełączył się z płaskich plików tekstowych dla swojej konfiguracji na schematy Gconf.
LassePoulsen,

Dzięki za informację Source Lab. Zauważyłem, że w ostatnich kilku wersjach kilka narzędzi GUI zostało utraconych z podobnych powodów.
Richard Holloway,

29
Właściwie nie sądzę, że powinieneś modyfikować /etc/gdm/gdm.schema. Zamiast tego dodaj dwie linie [greeter] Exclude=nobody,qmail-foo,qmail-bardo /etc/gdm/custom.conf. (Poza nobodytym nazwy na domyślnej liście i tak nie pojawią się, ponieważ ich identyfikator użytkownika wynosi <1000.)
Gilles

3
Zwykle do tego celu należy użyć płynu o wartości poniżej 1000.
txwikinger

@RichardHolloway Nie możesz znaleźć takiego pliku Ubuntu 12.04.04, czy mógłbyś doradzić?
gotqn

56

W nowszych wersjach GDM 3.X stare odpowiedzi nie działają, z wyjątkiem tego
. greeterUstawienie custom.confjest przestarzałe , tzn. Nie będzie już działać. Jedno łatwe obejście, jeśli chcesz uniknąć zmiany identyfikatora użytkownika:

  1. Otwórz terminal i wprowadź (zamień userna nazwę użytkownika, którą chcesz ukryć na ekranie logowania):

    sudo nano /var/lib/AccountsService/users/user
    
  2. Dodaj do pliku:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Przełącz użytkownika lub wyloguj się, aby sprawdzić, czy usernie ma go już na liście.


1
Rzeczywiście, to właśnie zrobiłem po przeczytaniu dokumentów Arch . Odpowiedź powinna zostać oceniona, aby ludzie mogli ją zobaczyć wcześniej i zaoszczędzić trochę czasu.
Stefan van den Akker

wydaje się być właściwym sposobem, a nie manipulowaniem
identyfikatorami

1
Fantastyczny! Pomaga to rozwiązać problem użytkowników z mniejszymi niż 1000 identyfikatorami użytkownika ukrytymi na ekranie logowania.
biocyberman

1
Jakie są konsekwencje utworzenia konta systemowego?
Jistanidiot

2
To działało dla mnie, ale musiałem zrestartować się, aby zmiana zaczęła obowiązywać.
benjer3

13

Hacky, ale możesz zmodyfikować identyfikator użytkownika, aby nie pojawiał się na liście:

sudo usermod -u 999 <username>

Działa to, ponieważ użytkownicy o identyfikatorze poniżej 1000 są uważani za użytkowników „systemowych” (tj. Nie ludzi).

Jedyny znany mi sposób to całkowite ukrycie listy:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'

3
Nie ma czegoś takiego jak „poziom użytkownika”, to identyfikatory użytkownika.
João Pinto,

6
Ta usermod -uopcja jest interesująca: automatycznie zmienia identyfikator użytkownika w katalogu domowym i bufor buforowania poczty (jeśli istnieje), aby dopasować. Może to jednak spowodować utratę dostępu do plików, które posiadają poza katalogiem macierzystym.
poolie 16.01.11

Aby całkowicie ukryć listę, możesz również uruchomić gdmsetup i użyć pola wyboru.
belacqua 18.01.11

11

Opracowując komentarz Gillesa do zaakceptowanej odpowiedzi, oto, co moim zdaniem, jest obecny sposób „najlepszych praktyk” (bezpieczny dla Gnome). Ta zmiana zostanie również odzwierciedlona w Gnome „Sesja apletu wskaźnika”.

Ta metoda jest sugerowana w dokumentacji na stronie GDM i chociaż zarówno witryna, jak i Gilles pokazują dodanie „nikt” do wykluczenia, chciałem upewnić się, że było jasne, że jest to rzeczywiście konieczne (pomimo tego, co strony lub dokumenty online wyraźnie oferują). Przetestowałem to na kilku systemach 10.10, aby zweryfikować powtarzalność.

Wszystko, co musimy zrobić, to dokonać edycji w jednym wierszu /etc/gdm/custom.conf. Większość innych metod (wprowadzanie zmian do default.conf, gdm.conf itp.) Jest przestarzała.

Jeśli masz /etc/gdm/custom.conf, edytuj ten plik. W przeciwnym razie skopiuj plik przykładowy:

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

W sekcji [Greeter] /etc/gdm/custom.confdodaj:

Exclude=user1,user2,nobody

Gdzie „użytkownik1” i „użytkownik2” to nazwy użytkowników lub wpisy plików passwd (np. Qmail, kałamarnica itp.), Których nie chcesz wyświetlać w „przeglądarce twarzy” GDM.

Uwaga : Jeśli w mojej wersji Gnome / GDM (2.30) nie ma wpisu „nikt” na liście Wyklucz, pojawi się fałszywy login użytkownika nobodyzamiast użytkownika 1 lub użytkownika 2.

Uwaga 2 : Brak wyświetlania kont o UID poniżej 1000 jest parametrem konfigurowalnym. Domyślnie MinimalUIDwartość jest ustawiona na 1000. Jeśli i tylko wtedy, gdy ustawienie domyślne IncludeAll=truepozostanie na miejscu, a Includedyrektywa nie zostanie zmieniona na niepustą wartość, program powitalny GDM skanuje plik passwd w poszukiwaniu wpisów o UID większym niż MinimalUID. Następnie wyświetlani są użytkownicy o UID powyżej MinimalUID, których nie ma na liście Wykluczeń.

Nie testowałem, czy ustawienie odwrotne, a mianowicie ustawienie Include=user1,user2pozycji w pliku custom.conf będzie działać tak, jak przedstawiono. Powinien zastąpić dowolne IncludeAllustawienie i wyświetlać tylko wyraźnie wymienionych użytkowników.


+1 za odniesienie do strony GDM, a ponieważ to zadziałało dla mnie.
Aaron

Nie działa już w nowszych wersjach GDM.
Stefan van den Akker

2

W ten weekend napisałem skrypt (gdm-greeter). Działa dobrze na CentOS 6.2, zastanawiam się, czy będzie przydatny dla 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

Muszę się zgodzić, że najbardziej akceptowana tutaj odpowiedź jest bliska, ale nie martwa.

Właśnie wylizałem ten problem, a odpowiedzią dla mnie była zmiana następującego wpisu 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>

Skutkuje to tym, że cała lista użytkowników jest wyłączona, co jeśli właściwie interpretuję oryginalne pytanie, jest właśnie tym, co OP (gruszczy) zamierzał zrobić. Eliminuje to potrzebę tworzenia długiej linii wykluczeń, ponieważ wszystkie identyfikatory użytkowników niezależnie od numeru UID są wykluczane, niezależnie od zmiany tego ustawienia. Osobiście zastosowałem to ustawienie do 3 oddzielnych działających serwerów CentOS 6.2, do których czasami można uzyskać dostęp za pośrednictwem XDMCP (za pomocą xrdp> vnc-server> xinetd> gdm> gnome) przez RDP, co pozwala niektórym z naszych mniej doświadczonych administratorów Linuksa na pracę nad tymi systemy z minimalnym przeszkoleniem.

Wszystko to powiedziało, chociaż zgadzam się, że niedoświadczony sysadmin powinien od początku uczyć się pracy z konta osobistego (być może z dostępem do sudo), a nie jako root, jeśli masz doświadczenie w prawidłowej pracy z tym kontem, nie zaszkodzi w ten sposób. Po prostu upewnij się, że wiesz, co robisz wcześniej. W przypadku moich innych sysadminów dodałem obsługę CentrifyDC dla Active Directory do wszystkich tych systemów i skonfigurowałem systemy tak, aby identyfikatory AD-UserID mogły być używane do sesji pulpitu przy jednoczesnym zachowaniu uprawnień AD Security Group. Ale osobiście, odkąd zaprojektowałem wszystkie te serwery i korzystam z Linuksa od ponad 15 lat, nie myślę o używaniu roota do przyspieszenia. W rzeczywistości włączam rootowanie w systemach, w których „ zostały wyłączone tylko po to, abym mógł korzystać z tego konta i przejść do sedna z robieniem rzeczy. Najważniejsze jest, aby po prostu stworzyć nawyk tworzenia kopii zapasowej dowolnego pliku przed jego zmianą. Pozwoli to zabezpieczyć się przed większością nieszczęść i pozwoli przywrócić system, jeśli wykonasz edycję, która w innym przypadku spowodowałaby, że system stałby się niedostępny (wystarczy uruchomić dysk CD na żywo i naprawić to, co należy naprawić).

IMHO, wierzę, że mantra „nigdy nie loguj się jako root” jest naprawdę po to, by chronić sysadminów n00bie przed sobą. Ale jeśli osiągniesz poziom kompetencji z Linuksem do tego stopnia, że ​​możesz zaprojektować system z dowolnego systemu operacyjnego Linux w bardzo krótkim czasie i będzie on działał za każdym razem, nie ma powodu, aby żyć według zasady „nigdy nie loguj się jako root” mantra, ponieważ do tego momentu jesteś gotowy do podjęcia odpowiedzialności związanej z korzystaniem z tego konta. Jest to szczególnie prawdziwe w środowiskach korzystających z CentrifyDC do obsługi AD, ponieważ „root” staje się lokalnym kontem sysadmin i (zazwyczaj) jest włączany automatycznie. Dlatego uważam, że najlepiej przejść do sedna i ustawić hasło konta root jako jedno z pierwszych zadań, które wykonuję obecnie przy każdym wdrożeniu. Pewnie, Mógłbym zrobić całe „logowanie jako mój własny identyfikator, a potem sudo w górę”, ale osobiście nie czuję potrzeby robienia tego w ten sposób. Twój własny przebieg może się różnić ...


0

Zmień powłokę logowania użytkownika na pusty ciąg w / etc / passwd

Na przykład zmień:

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

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

Uruchomiłem ponownie menedżera ekranu i zauważyłem, że to działa.

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

Zidentyfikowanie tego jako przyczyny, dla której użytkownicy byli ukryci w oknie logowania menedżera wyświetlania, zajęło mi tygodnie. Oczywiste jest, że / var / lib / AccountService / users jest ignorowany przez MDM, a przypuszczalnie także GDM. Nie posunąłem się tak daleko, aby dodać Exclude=user1,user2lub Include=user3pod / [greeter]w /etc/mdm/mdm.conf, ani nie utworzyć /etc/mdm/custom.conf, ponieważ inne okno ukrywało dodawanie użytkowników w useraddporządku, podczas gdy użytkownicy dodane z adduserzostały pokazane. Ustawienie powłoki logowania na / bin / false blokuje wszelkie logowanie do tego użytkownika, którego nadal chcę su. Ale to również ukrywa użytkownika na ekranie logowania, jeśli chcesz, aby ten użytkownik był po prostu niedostępny.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.