Kullanıcılar GDM giriş ekranından nasıl gizlenir?


64

Geçenlerde qmail için ihtiyaç duyduğum birkaç yeni kullanıcı ekledim. Şimdi, giriş ekranındaki kutuda belirip dağınıklık yapıyorlar ve kullanıcımı bulmak için kaydırmalıyım. Bu kullanıcıları giriş kutusundan nasıl gizleyebilirim?


Ben ekleme olup olmadığını bilmiyorum Exclude=foobariçinde /etc/gdm/gdm.confişlerin, bunu denediniz mi?
Umang

güzel bir soru, cevaplar belki eski olabilir (meta üzerinde tartışma başına).
Thufir

Yanıtlar:


30

/Etc/gdm/gdm.schema dosyasını düzenleyin, şunun gibi görünen bölümü bulun:

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

Ayrıca qmail adlı bir kullanıcıyı dışlamak için, örneğin varsayılan listeye qmail ekleyin, böylece bölüm bu şekilde görünür.

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

Bu, kullanıcı qmail’inin gdm selamlayıcısında görünmesini engeller. Bunu yapmak için hoş bir GUI aracı vardı, ancak son birkaç sürümde Ubuntu'da bulunmuyordu.

Diğer alternatif ise, kullanıcının kullanıcı kimliğini 1000'in altında yapmaktır. Bunlar GDM karşılayıcıda dışlanan sistem hesapları olarak kabul edilir.


afaik, GUM aracı artık GDM'nin düzlemsel metin dosyalarından Gconf şemalarına geçmesinden dolayı çalışmaz.
LassePoulsen,

Bilgi Kaynağı Laboratuarı için teşekkürler. Son birkaç bültende benzer nedenlerle birkaç GUI aracının kaybolduğunu fark ettim.
Richard Holloway

29
Aslında, değişiklik yapman gerektiğini düşünmüyorum /etc/gdm/gdm.schema. Bunun yerine, iki satırı ekleyin [greeter] Exclude=nobody,qmail-foo,qmail-baretmek /etc/gdm/custom.conf. (Bunun haricinde nobody, varsayılan listedeki adlar yine de gösterilmez, çünkü kullanıcı adlarının <1000 olması gerekir.)
Gilles

3
Genellikle bunun için 1000'in altındaki sıvıları kullanmalısınız.
txwikinger

@RichardHolloway İçinde böyle bir dosya Ubuntu 12.04.04bulunamadı, tavsiye eder misiniz?
saat

56

Yeni GDM 3.X için eski cevaplar bu hariç, işe yaramaz içinde ayar olan eskimiş artık çalışmaz yani. Kullanıcının kullanıcı kimliğini değiştirmekten kaçınmak istiyorsanız kolay bir çözüm:
greetercustom.conf

  1. Terminali açın ve girin ( usergiriş ekranından gizlemek istediğiniz kullanıcı adı ile değiştirin ):

    sudo nano /var/lib/AccountsService/users/user
    
  2. Aşağıdakileri dosyaya ekleyin:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. userArtık listelenip listelenmediğini test etmek için kullanıcıyı değiştirin veya oturumu kapatın .


1
Aslında, Arch docs okuduktan sonra yaptığım şey bu . Bu cevabın yükseltilmesi gerekiyor, böylece insanlar bunu daha erken görüyor ve biraz zaman kazanıyor.
Stefan van den Akker

UID'leri manipüle etmek yerine uygun yol gibi görünüyor
xuma202

1
Fantastik! Bu, kullanıcıların 1000'den daha az sıvıya sahip olan kullanıcıların sorunlarını çözmesine yardımcı olur giriş ekranında gizlidir.
biocyberman

1
Bir kullanıcıyı Sistem Hesabı yapmanın sonuçları nelerdir?
Jistanidiot

2
Bu benim için çalıştı, ancak değişikliklerin etkili olması için yeniden başlatmam gerekti.
benjer3 16

13

Hacky ancak kullanıcının kimliğini değiştirerek listede gösterilmemesini sağlayabilirsiniz:

sudo usermod -u 999 <username>

Bu işe yarar çünkü 1000'in altındaki kimliği olan kullanıcılar "sistem" kullanıcıları olarak kabul edilir (yani insanlar değil).

Bildiğim diğer tek yol listeyi tamamen gizlemektir:

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

3
"Kullanıcının seviyesi" diye bir şey yoktur, kullanıcının kimlikleridir.
João Pinto

6
Bu usermod -useçenek ilginç: ana dizindeki kullanıcı kimliğini ve posta makarasını (varsa) eşleşecek şekilde otomatik olarak değiştirir. Ancak, kendi dizinleri dışındaki dosyalara erişimlerini kırabilir.
poolie

Listeyi tamamen gizlemek için, gdmsetup komutunu çalıştırabilir ve onay kutusunu kullanabilirsiniz.
belacqua

11

Gerekçe olarak Gilles kabul cevaba un yorumunu buraya bunu geçerli 'en iyi uygulamalar' (Gnome güvenli) yolu olduğuna inanıyoruz budur. Bu değişiklik aynı zamanda Gnome "Gösterge Uygulaması Oturumunda" da yansıtılacaktır.

Bu yöntem, GDM web sitesindeki dokümanlar için önerilmiş olan şeydir ve hem site hem de Gilles, dışlanmaya "hiç kimsenin" eklendiğini göstermese de, bunun gerçekten gerekli olduğundan emin olmak istedim (sayfaların ne olduğuna rağmen) veya açıkça açıkça sunan çevrimiçi dokümanlar). Tekrarlanabilirliği doğrulamak için bunu birkaç 10,10 sistemde test ettim.

Tek yapmamız gereken tek satırlı düzenleme yapmak /etc/gdm/custom.conf. Diğer çoğu yöntem (default.conf, gdm.conf, vb. Değişiklik yapmak için) kullanımdan kaldırılmıştır.

Eğer varsa /etc/gdm/custom.conf, o dosyayı düzenleyin. Aksi takdirde, örnek dosyaya kopyalayın:

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

[Greeter] bölümünde /etc/gdm/custom.conf, şunu ekleyin:

Exclude=user1,user2,nobody

"User1" ve "user2", GDM "yüz tarayıcısında" göstermek istemediğiniz kullanıcı adları veya kullanıcı dosya girişleridir (örneğin, qmail, kalamar vb.).

Not : Gnome / GDM (2.30) versiyonumun altında, Hariç Tut girişinde listelenen "hiç kimse" yoksa nobody, kullanıcı1 veya kullanıcı2 yerine sahte bir giriş kullanıcısı görünür.

Not 2 : 1000'in altında UID ile hesapların gösterilmesi yapılandırılabilir bir parametredir. Varsayılan olarak, MinimalUIDdeğer 1000 olarak ayarlanır. Yalnızca ve varsayılan ayar IncludeAll=trueyerinde bırakılırsa ve Includeyönerge boş olmayan bir değere değiştirilmezse, GDM karşılayıcı UD'nin MinimalUID'den büyük olan girişler için passwd dosyasını tarar mı? UID'sinin, Dışlama listesinde olmayan MinimalUID'nin üstünde olan kullanıcılar görüntülenir.

Ters ayarın yani Include=user1,user2custom.conf'ta bir girdi ayarının sunulduğu gibi çalışıp çalışmayacağını test etmedim . Herhangi bir IncludeAllayarı geçersiz kılmalı ve yalnızca açıkça listelenen kullanıcıları göstermelidir.


GDM'nin sitesine referans olarak +1 ve bu benim için çalıştı çünkü.
Aaron

GDM'nin yeni sürümlerinde artık çalışmıyor.
Stefan van den Akker

2

Bu haftasonu bir senaryo (gdm-greeter) yazdım. CentOS 6.2'de iyi çalışıyor, Ubuntu için faydalı olup olmayacağını merak ediyorum?

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

Buradaki en çok kabul edilen cevabın yakın, ancak henüz ölü olmadığı konusunda hemfikir olmalıyım.

Ben sadece bu sorunu kendim yaladım ve benim için cevap şu gdm.schema girişini değiştirmek oldu:

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

Bunun etkisi, tüm kullanıcı listelerinin devre dışı bırakılmasıdır; orijinal soruyu doğru yorumluyorsam, aslında OP'nin (gruszczy) yapmayı düşündüğü şey budur. Bu, UID numarasına bakılmaksızın tüm kullanıcı kimlikleri, bu ayar değiştirildiğinde bir kez hariç tutulduğundan, uzun bir hariç tutma satırı oluşturma gereksinimini ortadan kaldırır. Kişisel olarak bu ayarı RDP üzerinden XDMCP (xrdp> vnc-server> xinetd> gdm> gnome kullanarak) aracılığıyla erişilen işyerindeki 3 ayrı CentOS 6.2 sunucusuna şahsen uyguladım. asgari eğitim almış sistemler.

Bunların hepsi, deneyimsiz bir sysadmin'in başlangıçtan itibaren kökten ziyade kişisel bir hesaptan (belki sudo erişimi olan) çalışmayı öğrenmesi gerektiği konusunda hemfikir olmamakla birlikte, söz konusu hesapla düzgün çalışabilme deneyiminiz varsa Bunu yaparken. Sadece elden önce ne yaptığını bildiğinden emin ol. Diğer sistem yöneticilerimde, bu sistemlerin tümüne Active Directory desteği için CentrifyDC'yi ekledim ve sistemleri, AD-Kullanıcı Adları, kullanıcının AD Güvenlik Grubu haklarını koruyarak masaüstü oturumları için kullanılabilecek şekilde yapılandırdım. Ancak kişisel olarak, bu sunucuların hepsini tasarladığım ve 15 yıldan fazla bir süredir Linux kullandığım için, işleri hızlandırmak için kök kullanmanın hiçbir şey olmadığını düşünüyorum. Aslında, onun kökünü sistemler üzerinde etkinleştirme eğilimindeyim. Sadece bu hesabı kullanabilmek ve işleri bitirmek için kovalamacayı kesebilmek için etkisiz hale getirildim. Buradaki asıl şey, gerçekten, değiştirmeden önce herhangi bir dosyanın yedek kopyasını oluşturmayı alışkanlık haline getirmektir. Bu, en çok aksiliklere karşı güvenli bir koruma sağlar ve aksi takdirde sistemin erişilememesine neden olacak bir düzenleme yaparsanız sistemi kurtarmanıza izin verir (yalnızca canlı bir CD'ye önyükleyin ve düzeltilmesi gerekenleri düzeltin).

IMHO, “asla root olarak giriş yapmaz” mantrasının, n00bie sistem yöneticilerini kendisinden korumak için gerçekten orada olduğuna inanıyorum. Ancak, Linux ile herhangi bir Linux işletim sisteminden çok kısa bir sürede bir sistemi kurabileceğiniz ve her zaman çalıştığı noktaya kadar bir yetkinlik seviyesine ulaşırsanız ve o zaman 'hiçbir zaman root olarak giriş yapmamanız' için hiçbir neden yoktur. mantra, çünkü o noktadan sonra, bu hesabı kullanmanın beraberinde getirdiği sorumluluğu yerine getirmeye hazırsınız. Bu özellikle AD desteği için CentrifyDC kullanan ortamlarda geçerlidir, çünkü 'root' yerel sysadmin hesabı olur ve (genellikle) otomatik olarak etkinleştirilir. Bu yüzden, kovalamaca kesmeyi ve kök hesabın şifresini ayarlamayı, günümüzde herhangi bir dağıtımda yaptığım ilk görevlerden biri olarak yapmayı en iyi buluyorum. Elbette, Tüm 'kendi kimliğim olarak giriş yap, sonra sudo up' diyebilirim, ancak şahsen bazı şeyleri bu şekilde yapma gereği duymuyorum. Kendi kilometreniz değişebilir ...


0

Kullanıcı oturum açma kabuğunu / etc / passwd içindeki boş bir dizgeyle değiştirin.

Örneğin, değiştirin:

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

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

Ekran yöneticimi yeniden başlattım ve bunun etkili olduğunu gördüm.

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

Bunu, kullanıcıların görüntü yöneticisi giriş selamlayıcısında neden gizlendiğinin nedeni olarak tanımlamak haftalar sürdü. / Var / lib / AccountService / kullanıcıların MDM tarafından göz ardı edildiği ve tahminen GDM olduğu da açıktır. Bir ekleme kadar ileri gitmedi Exclude=user1,user2veya Include=user3altından [greeter]bir başka kutu saklandığını kullanıcıların yardımı ile ilave olarak, /etc/mdm/mdm.conf içinde veya bir /etc/mdm/custom.conf oluşturmak useraddgayet kullanıcılar ise, ile eklendi adduser. Giriş kabuğunu / bin / false olarak ayarlamak, hala kullanmak istediğim kullanıcının girişini reddeder. Ancak, kullanıcının erişemeyeceği düzlükte olmasını istiyorsanız, kullanıcıyı giriş ekranında da gizler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.