it-swarm-id.com

Bagaimana cara menyembunyikan pengguna dari layar login GDM?

Baru-baru ini saya menambahkan beberapa pengguna baru, yang saya perlukan untuk qmail. Sekarang mereka muncul di kotak di layar login dan mengacaukannya, dan saya harus gulir untuk menemukan pengguna saya. Bagaimana saya bisa menyembunyikan para pengguna itu dari kotak login?

64
gruszczy

Edit file /etc/gdm/gdm.schema temukan bagian yang saat ini terlihat seperti ini:

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

Dan untuk mengecualikan pengguna yang disebut qmail misalnya tambahkan qmail ke daftar default sehingga bagian ini terlihat seperti ini.

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

Itu akan menghentikan qmail pengguna yang muncul di penyapa gdm. Dulu ada alat GUI yang bagus untuk melakukan ini tetapi belum ada di Ubuntu untuk beberapa rilis terakhir.

Alternatif lain adalah mengatur UID pengguna di bawah 1000. Itu dianggap akun sistem yang dikecualikan dalam penyambut GDM juga.

30
Richard Holloway

Untuk GDM 3.X yang lebih baru, jawaban lama tidak berfungsi, kecuali yang ini
Pengaturan greeter di custom.conf adalah sang , mis. Itu tidak akan berfungsi lagi. Satu solusi mudah jika Anda ingin menghindari perubahan pengguna:

  1. Buka terminal, dan masukkan (ganti user dengan nama pengguna yang ingin Anda sembunyikan dari layar login):

    Sudo nano /var/lib/AccountsService/users/user
    
  2. Tambahkan yang berikut ke file:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Beralih pengguna atau keluar untuk menguji apakah user tidak terdaftar lagi.

55
miceagol

Meretas tetapi Anda dapat mengubah id pengguna sehingga tidak ditampilkan dalam daftar:

Sudo usermod -u 999 <username>

Ini berfungsi karena pengguna dengan id di bawah 1000 dianggap sebagai pengguna "sistem" (mis. Bukan manusia).

Satu-satunya cara saya tahu adalah menyembunyikan daftar sepenuhnya:

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

Menguraikan komentar Gilles untuk jawaban yang diterima, inilah yang saya yakini adalah cara "praktik terbaik" (Gnome-safe) saat ini untuk melakukan ini. Perubahan ini juga akan tercermin dalam "Sesi Applet Indikator" Gnome.

Metode ini adalah yang disarankan dalam dokumen di situs web GDM , dan meskipun situs dan Gilles menunjukkan penambahan "tidak ada" pada pengecualian, saya ingin memastikan bahwa sudah jelas ini sebenarnya diperlukan (terlepas dari apa yang ditawarkan secara manual atau dokumen online secara eksplisit). Saya telah menguji ini pada beberapa sistem 10,10 untuk memverifikasi pengulangan.

Yang perlu kita lakukan hanyalah melakukan edit satu baris ke /etc/gdm/custom.conf. Sebagian besar metode lain (membuat perubahan ke default.conf, gdm.conf, dll.) Tidak digunakan lagi.

Jika Anda memiliki /etc/gdm/custom.conf yang ada, edit file itu. Jika tidak, salin file contoh:

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

Di bagian [Penyapa] dari /etc/gdm/custom.conf, tambahkan:

Exclude=user1,user2,nobody

Di mana "user1" dan "user2" adalah nama pengguna atau entri file passwd (mis., Qmail, squid, dll.) Yang tidak ingin Anda tampilkan di "browser wajah" GDM.

Catatan : Di bawah versi Gnome/GDM saya (2.30), jika Anda tidak memiliki "tidak ada" yang tercantum dalam entri Kecualikan, maka Anda akan memiliki pengguna login palsu nobody muncul bukannya user1 atau user2.

N.B. # 2 : Tidak ditampilkannya akun dengan UID di bawah 1000 adalah parameter yang dapat dikonfigurasi. Secara default, nilai MinimalUID diatur ke 1000. Jika dan hanya jika pengaturan default IncludeAll=true dibiarkan dan arahan Include tidak diubah ke nilai yang tidak kosong, apakah penyambut GDM memindai file passwd untuk entri dengan UID yang lebih besar dari MinimalUID. Pengguna dengan UID di atas MinimalUID yang tidak ada dalam daftar Kecualikan kemudian ditampilkan.

Saya belum menguji apakah pengaturan balik, yaitu, pengaturan entri Include=user1,user2 di custom.conf akan berfungsi seperti yang disajikan. Ini harus mengesampingkan pengaturan IncludeAll, dan hanya menampilkan pengguna yang terdaftar secara eksplisit.

11
belacqua

Saya menulis skrip (gdm-greeter) akhir pekan ini. Ini bekerja dengan baik pada CentOS 6.2, saya ingin tahu apakah ini akan berguna untuk 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
Hans Vervaart

Saya harus setuju bahwa jawaban yang paling diterima di sini adalah dekat, tetapi tidak mati terus.

Saya hanya menjilat masalah ini sendiri, dan jawaban bagi saya adalah mengubah entri gdm.schema berikut:

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

Efek dari ini adalah bahwa semua daftar pengguna dinonaktifkan, yang jika saya menafsirkan pertanyaan asli dengan benar, sebenarnya adalah apa yang ingin dilakukan oleh OP (gruszczy). Ini menghilangkan kebutuhan untuk membuat garis panjang pengecualian, karena semua ID pengguna terlepas dari nomor UID dikecualikan terlepas setelah pengaturan ini diubah. Saya pribadi menerapkan pengaturan ini ke 3 server CentOS 6.2 terpisah di tempat kerja yang kadang-kadang diakses melalui XDMCP (menggunakan xrdp> vnc-server> xinetd> gdm> gnome) di atas RDP, yang memungkinkan beberapa admin Linux kami yang kurang berpengalaman bekerja di sana. sistem dengan pelatihan minimal.

Semua itu mengatakan, sementara saya setuju bahwa sysadmin yang tidak berpengalaman harus belajar dari awal untuk bekerja dari akun pribadi (mungkin dengan akses Sudo) daripada sebagai root, jika Anda memiliki pengalaman untuk bekerja dengan akun itu dengan benar, tidak ada salahnya dalam melakukannya. Pastikan Anda tahu apa yang Anda lakukan sebelumnya. Dalam kasus sysadmin saya yang lain, saya telah menambahkan dukungan CentrifyDC untuk Direktori Aktif ke semua sistem ini dan mengonfigurasi sistem sehingga AD-UserIDs dapat digunakan untuk sesi desktop dengan tetap mempertahankan hak-hak Grup Keamanan AD pengguna. Tetapi secara pribadi, karena saya merekayasa semua server ini dan telah menggunakan Linux selama lebih dari 15 tahun sekarang, saya pikir tidak ada yang menggunakan root untuk mempercepat semuanya. Bahkan, saya cenderung mengaktifkan root pada sistem di mana ia telah dinonaktifkan hanya agar saya dapat menggunakan akun itu dan memotong ke pengejaran dengan menyelesaikan sesuatu. Hal utama di sana, sebenarnya, adalah membuat kebiasaan membuat salinan cadangan dari file apa pun sebelum Anda mengubahnya. Itu akan melindungi Anda dari sebagian besar kecelakaan dan memungkinkan Anda untuk memulihkan sistem seandainya Anda melakukan pengeditan yang jika tidak akan menyebabkan sistem menjadi tidak dapat diakses (cukup boot ke CD langsung dan perbaiki apa yang perlu diperbaiki).

IMHO, saya percaya bahwa mantra 'tidak pernah login sebagai root' benar-benar ada di sana untuk melindungi sysadmin n00bie dari diri mereka sendiri. Tetapi jika Anda mencapai tingkat kompetensi dengan Linux ke titik di mana Anda dapat merekayasa sistem dari OS Linux apa pun dalam waktu yang sangat singkat dan bekerja setiap saat, maka tidak ada alasan untuk hidup dengan 'jangan pernah masuk sebagai root' mantra karena pada saat itu Anda siap untuk menangani tanggung jawab yang datang bersama dengan menggunakan akun itu. Ini terutama benar di lingkungan yang menggunakan dukungan CentrifyDC untuk AD, karena 'root' menjadi akun sysadmin lokal dan (biasanya) diaktifkan secara otomatis. Jadi, saya menemukan cara terbaik untuk memotong ke pengejaran dan membuat pengaturan kata sandi akun root sebagai salah satu tugas pertama yang saya lakukan pada penyebaran apa pun saat ini. Tentu, saya bisa melakukan keseluruhan 'login sebagai ID saya sendiri, lalu Sudo', tetapi saya pribadi tidak merasa perlu melakukan hal-hal seperti itu. Jarak tempuh Anda sendiri dapat bervariasi ...

2
StygianAgenda

Ubah Shell login pengguna ke string kosong di/etc/passwd

Misalnya, ubah:

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

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

Saya memulai kembali manajer tampilan saya dan mengamati efek ini.

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

Butuh berminggu-minggu bagi saya untuk mengidentifikasi ini sebagai alasan mengapa pengguna disembunyikan di penyapa login manajer tampilan. Jelas bahwa/var/lib/AccountService/pengguna diabaikan oleh MDM, dan diasumsikan juga GDM. Saya tidak ingin menambahkan Exclude=user1,user2 atau Include=user3 di bawah [greeter] di /etc/mdm/mdm.conf, atau membuat /etc/mdm/custom.conf, karena kotak lain menyembunyikan pengguna yang ditambahkan melalui useradd hanya baik, sementara pengguna ditambahkan dengan adduser ditunjukkan. Mengatur Shell login ke/bin/false menolak semua login ke pengguna itu, yang saya masih ingin su sebagai. Tapi itu juga menyembunyikan pengguna di layar login jika Anda ingin pengguna itu tidak dapat diakses.

0
ThorSummoner