जीडीएम लॉगिन स्क्रीन से उपयोगकर्ताओं को कैसे छिपाएं?


64

मैंने हाल ही में कई नए उपयोगकर्ता जोड़े हैं, जिन्हें मुझे qmail की आवश्यकता है। अब वे लॉगिन स्क्रीन में बॉक्स में दिखाई देते हैं और इसे अव्यवस्थित करते हैं, और मुझे अपना उपयोगकर्ता खोजने के लिए स्क्रॉल करना होगा। मैं उन उपयोगकर्ताओं को लॉगिन बॉक्स से कैसे छिपा सकता हूं?


मैं नहीं जानता कि चाहे जोड़कर Exclude=foobarमें /etc/gdm/gdm.confकाम करता है, तो आप इसे की कोशिश की?
उमंग

अच्छा सवाल, उत्तर शायद पुराने हैं (मेटा पर चर्चा के अनुसार)।
फुफिर

जवाबों:


30

फ़ाइल को संपादित करें /etc/gdm/gdm.schema उस अनुभाग को ढूंढें जो वर्तमान में इस तरह दिखता है:

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

और उदाहरण के लिए qmail नामक उपयोगकर्ता को बाहर करने के लिए डिफ़ॉल्ट सूची में qmail जोड़ें ताकि अनुभाग इस तरह दिखे।

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

यह gdm अभिवादन में प्रदर्शित होने वाले उपयोगकर्ता qmail को रोक देगा। ऐसा करने के लिए एक अच्छा GUI टूल हुआ करता था लेकिन पिछले कुछ रिलीज के लिए उबंटू में नहीं रहा है।

दूसरा विकल्प उपयोगकर्ता के यूआईडी को 1000 से कम पर सेट करना है। उन्हें सिस्टम खाते माना जाता है जिन्हें जीडीएम अभिवादन में भी बाहर रखा गया है।


एफएआईसी, जीयूआई टूल किसी भी तरह से काम नहीं करता है, इस तथ्य के कारण कि जीडीएम ने प्लेन टेक्स्टफाइल्स से अपने कॉन्फिडेंस को गोकेन स्कीमास के लिए स्विच किया।
LassePoulsen

स्रोत लैब की जानकारी के लिए धन्यवाद। मैंने पिछले कुछ रिलीज पर ध्यान दिया है कि कई जीयूआई उपकरण समान कारणों से खो गए हैं।
रिचर्ड होलोवे

29
वास्तव में, मुझे नहीं लगता कि आपको संशोधित करना चाहिए /etc/gdm/gdm.schema। इसके बजाय, दो पंक्तियों [greeter] Exclude=nobody,qmail-foo,qmail-barको जोड़ें /etc/gdm/custom.conf। (इसके अलावा nobody, डिफ़ॉल्ट सूची में नाम वैसे भी दिखाई नहीं देंगे क्योंकि उनका यूआईडी <1000 है।)
गिलेज़

3
आमतौर पर आपको इसके लिए 1000 से कम के यूडीआई का उपयोग करना चाहिए।
txwikinger

@RichardHolloway में ऐसी फ़ाइल नहीं मिल रही है Ubuntu 12.04.04, क्या आप सलाह दे सकते हैं?

56

नए GDM 3.x के लिए, वर्ष जवाब काम नहीं करते, इस एक को छोड़कर में सेटिंग है अप्रचलित , यानी इसे अब और काम नहीं करेगा। यदि आप उपयोगकर्ता के यूआईडी को बदलने से बचना चाहते हैं तो एक आसान समाधान:
greetercustom.conf

  1. टर्मिनल खोलें, और दर्ज करें ( userलॉगिन स्क्रीन से जिस उपयोगकर्ता नाम को आप छिपाना चाहते हैं, उसके साथ बदलें ):

    sudo nano /var/lib/AccountsService/users/user
    
  2. फ़ाइल में निम्न जोड़ें:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. यदि userअभी सूचीबद्ध नहीं है, तो उपयोगकर्ता को स्विच करें या परीक्षण करें ।


1
दरअसल, आर्क डॉक्स पढ़ने के बाद मैंने यही किया । इस जवाब को ऊपर उठाया जाना चाहिए ताकि लोग इसे जल्द देखें और कुछ समय बचा सकें।
स्टेफन वैन डेन अककर जूल

UIDs में हेरफेर करने के बजाय उचित तरीका लगता है
xuma202

1
बहुत खुबस! यह यूजर्स की समस्या को हल करने में मदद करता है, जो 1000 से कम के यूजर्स लॉगिन स्क्रीन पर छिपे होते हैं।
बायोकैम्बरमैन

1
उपयोगकर्ता को सिस्टम खाता बनाने के क्या नियम हैं?
जिस्टिअटियोट

2
इसने मेरे लिए काम किया, लेकिन मुझे बदलाव लाने के लिए रिबूट करना पड़ा।
बेन्जेर 3

13

हैकी लेकिन आप उपयोगकर्ता की आईडी को संशोधित कर सकते हैं ताकि वे सूची में न दिखें:

sudo usermod -u 999 <username>

यह काम करता है क्योंकि 1000 से कम आयु वाले आईडी को "सिस्टम" उपयोगकर्ता माना जाता है (अर्थात मनुष्य नहीं)।

एकमात्र तरीका मुझे पता है कि सूची को पूरी तरह से छिपाना है:

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

3
"उपयोगकर्ता के स्तर" जैसी कोई चीज नहीं है, यह उपयोगकर्ता का आईडी है।
जोहो पिंटो

6
यह usermod -uविकल्प दिलचस्प है: यह स्वचालित रूप से होम डाइरेक्टरी और मेल स्पूल (यदि कोई हो) पर मिलान करने के लिए यूआईडी को बदल देता है। हालाँकि, यह उनके घर निर्देशिका के बाहर किसी भी फाइल तक उनकी पहुंच को तोड़ सकता है।
poolie

सूची को पूरी तरह से छिपाने के लिए, आप gdmsetup भी चला सकते हैं और चेक-बॉक्स का उपयोग कर सकते हैं।
बेलाक्वा

11

पर विस्तार से चर्चा करते गाइल्स के स्वीकार किए जाते हैं जवाब देने के लिए टिप्पणी, यहाँ मैं क्या मानना है कि वर्तमान "सर्वोत्तम प्रथाओं" (Gnome-सुरक्षित) तरीका यह है है। यह परिवर्तन सूक्ति "संकेतक एप्लेट सत्र" में भी दिखाई देगा।

यह विधि यह है कि जीडीएम वेबसाइट पर डॉक्स में एक ने सुझाव दिया था , और हालांकि साइट और गाइल्स दोनों ने "नहीं" के अलावा को बाहर करने के लिए दिखाया, मैं यह सुनिश्चित करना चाहता था कि यह स्पष्ट था कि यह वास्तव में आवश्यक है (इसके बावजूद कि क्या होता है या ऑनलाइन डॉक्स स्पष्ट रूप से प्रदान करते हैं)। मैंने इसे 10.10 सिस्टम के एक जोड़े पर दोहराया है।

इसके लिए हमें केवल एक पंक्ति को संपादित करना है /etc/gdm/custom.conf। अधिकांश अन्य विधियाँ (डिफ़ॉल्ट में परिवर्तन। Gf, gdm.conf, आदि) पदावनत हैं।

यदि आपके पास कोई मौजूदा है /etc/gdm/custom.conf, तो उस फ़ाइल को संपादित करें। अन्यथा, उदाहरण फ़ाइल पर प्रतिलिपि बनाएँ:

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

[अभिवादन] अनुभाग में /etc/gdm/custom.conf, जोड़ें:

Exclude=user1,user2,nobody

जहाँ "user1" और "user2" उपयोगकर्ता नाम या पासवार्ड फ़ाइल प्रविष्टियाँ हैं (उदाहरण के लिए, qmail, विद्रूप, आदि) जो आप GDM "फेस ब्राउज़र" पर दिखाना नहीं चाहते हैं।

नोट : Gnome / GDM (2.30) के मेरे संस्करण के तहत, यदि आपके पास बहिष्कृत प्रविष्टि में "कोई भी" सूचीबद्ध नहीं है, तो आपके पास उपयोगकर्ता 1 nobodyया user2 के बजाय एक फर्जी लॉगिन उपयोगकर्ता शो होगा।

एनबी # 2 : यूआईडी के 1000 के नीचे के खातों का गैर-प्रदर्शन एक विन्यास योग्य पैरामीटर है। डिफ़ॉल्ट रूप से, MinimalUIDमान 1000 पर सेट होता है। यदि और केवल अगर डिफ़ॉल्ट सेटिंग IncludeAll=trueको छोड़ दिया जाता है और Includeनिर्देश को गैर-रिक्त मान में नहीं बदला जाता है, तो क्या GDM अभिवादन, UID के लिए MinDUID से अधिक के साथ प्रविष्टियों के लिए पासवार्ड फ़ाइल को स्कैन करता है। UID के ऊपर के MinimalUID वाले उपयोगकर्ता, जिन्हें बहिष्कृत सूची में नहीं दिखाया गया है।

मैंने परीक्षण नहीं किया है कि रिवर्स सेटिंग, अर्थात्, Include=user1,user2custom.conf में प्रविष्टि सेट करना प्रस्तुत के रूप में काम करेगा। इसे किसी भी IncludeAllसेटिंग को ओवरराइड करना चाहिए , और केवल स्पष्ट रूप से सूचीबद्ध उपयोगकर्ताओं को प्रदर्शित करना चाहिए ।


GDM की साइट के संदर्भ में +1, और क्योंकि यह मेरे लिए काम करता है।
आरोन

जीडीएम के नए संस्करणों पर अब काम नहीं करता है।
स्टीफन वैन डेन अककर जूल

2

मैंने इस सप्ताह के अंत में एक स्क्रिप्ट (जीडीएम-अभिवादन) लिखा था। यह सेंटोस 6.2 पर अच्छी तरह से काम करता है, मुझे आश्चर्य है कि क्या यह उबंटू के लिए उपयोगी होगा?

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

मुझे सहमत होना पड़ेगा कि यहाँ सबसे स्वीकृत उत्तर करीब है, लेकिन मृत नहीं है।

मैंने सिर्फ इस समस्या को खुद ही झेला, और मेरे लिए इसका उत्तर निम्न 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>

इसका प्रभाव यह है कि सभी उपयोगकर्ता-सूचीकरण अक्षम है, जो अगर मैं मूल प्रश्न को सही ढंग से व्याख्या कर रहा हूं, तो वास्तव में ओपी (ग्रुस्ज़ज़ी) क्या करना चाहता था। यह बहिष्करण की एक लंबी पंक्ति को शिल्प करने की आवश्यकता को समाप्त कर देता है, क्योंकि यूआईडी संख्या की परवाह किए बिना सभी उपयोगकर्ताआईडी को छोड़ दिया जाता है, भले ही यह सेटिंग बदल जाए। मैंने व्यक्तिगत रूप से इस सेटिंग को 3 अलग-अलग CentOS 6.2 सर्वरों पर काम करने के लिए लागू किया है जो RDM पर XDMCP (xrdp> vnc-server> xinetd> gdm> gnome) के माध्यम से कभी-कभी एक्सेस किए जाते हैं, जो इन पर हमारे कुछ कम अनुभवी लिनक्स एडिंस काम करने की अनुमति देता है न्यूनतम प्रशिक्षण के साथ सिस्टम।

उस सभी ने कहा, जबकि मैं इस बात से सहमत हूं कि अनुभवहीन सिसडमिन को शुरुआत से ही एक व्यक्तिगत खाते से काम करना सीखना चाहिए (हो सकता है कि सुडो एक्सेस के साथ) रूट के बजाय, यदि आपके पास उस खाते के साथ ठीक से काम करने का अनुभव है, तो कोई नुकसान नहीं है ऐसा करने में। बस सुनिश्चित करें कि आप जानते हैं कि आप हाथ से पहले क्या कर रहे हैं। मेरे अन्य sysadmins के मामले में, मैंने इन सभी प्रणालियों में सक्रिय निर्देशिका सहायता के लिए CentrifyDC जोड़ा है और सिस्टम को कॉन्फ़िगर किया है ताकि उपयोगकर्ता के AD सुरक्षा समूह के अधिकारों को बनाए रखते हुए डेस्कटॉप सत्रों के लिए AD-UserID का उपयोग किया जा सके। लेकिन व्यक्तिगत रूप से, चूंकि मैंने इन सभी सर्वरों को इंजीनियर किया है और अब 15 वर्षों से लिनक्स का उपयोग किया है, मुझे लगता है कि चीजों को गति देने के लिए रूट का उपयोग करने में कुछ भी नहीं है। वास्तव में, मैं सिस्टम पर रूट को सक्षम करता हूं जहां यह ' s को केवल इसलिए अक्षम किया गया है ताकि मैं उस खाते का उपयोग कर सकूं और काम पूरा होने के साथ पीछा कर सकूं। वहाँ मुख्य बात, वास्तव में, बस किसी भी फ़ाइल की बैकअप प्रतिलिपि बनाने से पहले उसे बदलने की आदत बनाना है। यह अधिकांश दुर्घटनाओं के खिलाफ सुरक्षित है और आपको सिस्टम को पुनर्प्राप्त करने की अनुमति देता है जो आपको एक संपादन करना चाहिए जो अन्यथा सिस्टम को दुर्गम होने का कारण बना देगा (बस एक लाइव सीडी के लिए बूट करें और ठीक करें जिसे ठीक करने की आवश्यकता है)।

IMHO, मेरा मानना ​​है कि वास्तव में '00 रूट के रूप में लॉगिन नहीं 'का मंत्र स्वयं से n00bie sysadmins की रक्षा के लिए है। लेकिन अगर आप लिनक्स के साथ उस स्तर तक सक्षमता के स्तर पर पहुंच जाते हैं, जहां आप बहुत कम समय में किसी भी लिनक्स ओएस से एक सिस्टम को इंजीनियर कर सकते हैं और यह हर बार काम करता है, तो 'कभी रूट के रूप में लॉगिन नहीं' करने का कोई कारण नहीं है। मंत्र क्योंकि उस बिंदु से आप उस खाते का उपयोग करने के साथ आने वाली जिम्मेदारी को संभालने के लिए तैयार हैं। यह विशेष रूप से उन वातावरणों में सच है जो AD समर्थन के लिए CentrifyDC का उपयोग करते हैं, क्योंकि 'रूट' स्थानीय sysadmin खाता बन जाता है और स्वचालित रूप से सक्षम होता है। इसलिए, मुझे सबसे अच्छा लगता है कि पीछा करने के लिए कटौती करना और रूट अकाउंट के पासवर्ड की सेटिंग करना, क्योंकि मैं आजकल किसी भी तैनाती पर काम करता हूं। ज़रूर, मैं पूरे 'लॉगिन को अपनी आईडी के रूप में कर सकता था, फिर सुडो अप', लेकिन मैं व्यक्तिगत रूप से इस तरह से चीजों को करने की आवश्यकता महसूस नहीं करता। आपका अपना माइलेज अलग हो सकता है ...


0

/ Etc / passwd में खाली स्ट्रिंग में उपयोगकर्ता लॉगिन शेल बदलें

उदाहरण के लिए, बदलें:

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

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

मैंने अपने प्रदर्शन प्रबंधक को पुनः आरंभ किया और इसे प्रभावी होने का अवलोकन किया।

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

उपयोगकर्ताओं को प्रदर्शन प्रबंधक लॉगिन अभिवादन में छिपे होने के कारण के रूप में इसकी पहचान करने में मुझे सप्ताह लग गए। यह स्पष्ट है कि / var / lib / AccountService / उपयोगकर्ताओं को MDM द्वारा अनदेखा किया जा रहा है, और निश्चित रूप से GDM भी। मैं जहाँ तक एक जोड़ने के रूप में करने के लिए जाना नहीं था Exclude=user1,user2या एक Include=user3के तहत [greeter]/etc/mdm/mdm.conf में, या एक /etc/mdm/custom.conf बनाने के लिए, के रूप में एक एक और बॉक्स छिपा था उन के माध्यम से जोड़ा useraddठीक, उन जबकि के साथ जोड़ा adduserगया। लॉगिन शेल को / बिन / असत्य पर सेट करने से उस उपयोगकर्ता के सभी लॉगिन से इनकार कर दिया जाता है, जिसे मैं अभी भी su के रूप में देखना चाहता हूं। लेकिन यह भी उपयोगकर्ता को लॉगिन स्क्रीन में छुपाता है यदि आप चाहते हैं कि उपयोगकर्ता सादा दुर्गम हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.