Bagaimana cara menyembunyikan pengguna dari layar login GDM?


64

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?


Saya tidak tahu apakah menambahkan Exclude=foobardalam /etc/gdm/gdm.confkarya, apakah Anda sudah mencobanya?
Umang

pertanyaan yang bagus, jawabannya mungkin sudah ketinggalan zaman (sesuai diskusi tentang meta).
Thufir

Jawaban:


30

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.


afaik, alat GUI tidak berfungsi lagi, karena fakta bahwa GDM beralih dari file text pesawat untuk konfigurasi ke skema Gconf.
LassePoulsen

Terima kasih atas Lab Sumber informasinya. Saya perhatikan beberapa rilis terakhir beberapa alat GUI telah hilang karena alasan yang sama.
Richard Holloway

29
Sebenarnya, saya tidak berpikir Anda harus memodifikasi /etc/gdm/gdm.schema. Sebagai gantinya, tambahkan dua baris [greeter] Exclude=nobody,qmail-foo,qmail-barke /etc/gdm/custom.conf. (Selain itu nobody, nama-nama dalam daftar default tidak akan muncul karena uid mereka adalah <1000.)
Gilles 'SO-stop being evil'

3
Biasanya Anda harus menggunakan uids di bawah 1000 untuk ini.
txwikinger

@RichardHolloway Tidak dapat menemukan file seperti itu Ubuntu 12.04.04, bisakah Anda memberi saran?
Gotqn

56

Untuk 3.x GDM baru, jawaban lama tidak bekerja, kecuali untuk yang satu ini
The greeterpengaturan di custom.confadalah usang , yakni tidak akan bekerja lagi. Satu solusi mudah jika Anda ingin menghindari perubahan pengguna:

  1. Buka terminal, dan masukkan (ganti userdengan 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 jika usertidak terdaftar lagi.


1
Memang, inilah yang saya lakukan setelah membaca Arch docs . Jawaban ini harus dibatalkan sehingga orang melihatnya lebih cepat dan menghemat waktu.
Stefan van den Akker

sepertinya cara yang tepat daripada memanipulasi UID
xuma202

1
Fantastis! Ini membantu untuk memecahkan masalah pengguna dengan cairan kurang dari 1000 disembunyikan di layar login.
biocyberman

1
Apa konsekuensi membuat pengguna menjadi Akun Sistem?
Jistanidiot

2
Ini bekerja untuk saya, tetapi saya harus mem-boot ulang agar perubahan diterapkan.
benjer3

13

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" (yaitu 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'

3
Tidak ada yang namanya "level pengguna", itu id pengguna.
João Pinto

6
Itu usermod -upilihan yang menarik: secara otomatis mengubah uid pada direktori home dan spool email (jika ada) untuk mencocokkan. Namun, ini dapat memutus akses mereka ke file apa pun yang mereka miliki di luar direktori home mereka.
poolie

Untuk menyembunyikan daftar sepenuhnya, Anda juga dapat menjalankan gdmsetup dan menggunakan kotak centang.
belacqua

11

Menguraikan komentar Gilles untuk jawaban yang diterima, inilah yang saya percaya adalah "praktik terbaik" saat ini (Gnome-safe) cara 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 jelas ini benar-benar diperlukan (terlepas dari apa halaman manualnya) atau dokumen online menawarkan secara eksplisit). Saya telah menguji ini pada beberapa sistem 10,10 untuk memverifikasi pengulangan.

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

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

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

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

Exclude=user1,user2,nobody

Di mana "user1" dan "user2" adalah nama pengguna atau entri file passwd (misalnya, qmail, squid, dll.) Yang tidak ingin Anda perlihatkan pada "browser wajah" GDM.

Catatan : Di bawah versi saya Gnome / GDM (2.30), jika Anda tidak memiliki "tidak ada" yang terdaftar di entri Kecualikan, maka Anda akan meminta pengguna login palsu nobodymuncul alih-alih user1 atau user2.

NB # 2 : Tidak ditampilkannya akun dengan UID di bawah 1000 adalah parameter yang dapat dikonfigurasi. Secara default, MinimalUIDnilainya diatur ke 1000. Jika dan hanya jika pengaturan default IncludeAll=truedibiarkan dan Includedirektif tidak diubah ke nilai yang tidak kosong, apakah penyambut GDM memindai file passwd untuk entri dengan UID 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, bahwa pengaturan Include=user1,user2entri di custom.conf akan berfungsi seperti yang disajikan. Ini harus mengesampingkan IncludeAllpengaturan apa pun , dan hanya menampilkan pengguna yang terdaftar secara eksplisit.


+1 untuk referensi ke situs GDM, dan karena ini berfungsi untuk saya.
Aaron

Tidak berfungsi lagi pada versi GDM yang lebih baru.
Stefan van den Akker

2

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

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 kantor 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 ' s telah dinonaktifkan agar saya dapat menggunakan akun itu dan memotong untuk mengejar 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 memulihkan sistem seandainya Anda melakukan pengeditan yang dapat menyebabkan sistem menjadi tidak dapat diakses (hanya 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 ...


0

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 ini mulai berlaku.

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 bertindak terlalu jauh dengan menambahkan Exclude=user1,user2atau di Include=user3bawah [greeter]di /etc/mdm/mdm.conf, atau membuat /etc/mdm/custom.conf, karena kotak lain menyembunyikan pengguna yang ditambahkan dengan useraddbaik, sementara pengguna ditambahkan dengan adduserditunjukkan. 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.