Как скрыть пользователей от экрана входа GDM?

59

Недавно я добавил несколько новых пользователей, которые мне нужны для qmail. Теперь они появляются в окне на экране входа в систему и загромождают его, и мне нужно прокрутить, чтобы найти моего пользователя. Как я могу скрыть этих пользователей из окна входа?

    
задан gruszczy 17.08.2010 в 12:25
источник

7 ответов

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>

Это остановит пользователя qmail, появляющегося в gdm greeter. Раньше был хороший графический инструмент для этого, но он не был в Ubuntu для последних нескольких выпусков.

Другой альтернативой является установка UID пользователя под 1000. Это считается системными учетными записями, которые также исключены в GDM greeter.

    
ответ дан Richard Holloway 17.08.2010 в 13:30
источник
45

Для более новых GDM 3.X старые ответы не работают, кроме этого
Значение greeter в custom.conf устарело , то есть оно не будет работать больше. Один простой способ обхода проблемы, если вы хотите избежать изменения uid пользователя:

  1. Откройте терминал и введите (замените user на имя пользователя, которое вы хотите скрыть от экрана входа):

    sudo nano /var/lib/AccountsService/users/user
    
  2. Добавьте в файл следующее:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Выключите пользователя или выйдите из системы, чтобы проверить, не больше ли user .

ответ дан miceagol 04.11.2014 в 23:10
12

Hacky, но вы можете изменить идентификатор пользователя, чтобы он не отображался в списке:

sudo usermod -u 999 <username>

Это работает, потому что пользователи с идентификатором менее 1000 считаются «системными» пользователями (то есть не людьми).

Единственный другой способ, который я знаю, - полностью скрыть список:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
    
ответ дан Oli 17.08.2010 в 12:44
11

Разрабатывая комментарий Gilles к принятому ответу, вот что я считаю нынешним «лучшим опытом» (Gnome-safe) для этого. Это изменение также будет отражено в сеансе апплета индикатора Gnome.

Этот метод является тем, который предлагается в документах на веб-сайте GDM . , и хотя и сайт, и Gilles показывают добавление «никто» к исключению, я хотел убедиться, что было ясно, что это действительно необходимо (несмотря на то, что явно предлагают ссылки или онлайн-документы). Я проверил это на нескольких 10.10 системах, чтобы проверить повторяемость.

Все, что нам нужно сделать, это сделать в однострочном редактировании /etc/gdm/custom.conf . Большинство других методов (внесение изменений в default.conf, gdm.conf и т. Д.) Устарели.

Если у вас есть существующий /etc/gdm/custom.conf , отредактируйте этот файл. В противном случае скопируйте файл примера:

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

В разделе [Greeter] в /etc/gdm/custom.conf добавьте:

Exclude=user1,user2,nobody

Где «user1» и «user2» - это имена пользователей или файлов passwd (например, qmail, squid и т. д.), которые вы не хотите показывать в «браузере лица GDM».

Примечание : в моей версии Gnome / GDM (2.30), если у вас нет «никого», указанного в записи «Исключить», у вас появится пользователь фиктивного входа nobody вместо user1 или user2.

N.B. # 2 : Неотображение учетных записей с UID ниже 1000 является настраиваемым параметром. По умолчанию значение MinimalUID установлено на 1000. Если и только если значение по умолчанию IncludeAll=true оставлено на месте, а директива Include не изменена на непустое значение, выполняет ли GID greeter проверку passwd файл для записей с UID больше, чем MinimalUID. Затем отображаются пользователи с минимальным идентификатором UID, которые не входят в список исключений.

Я не тестировал, будет ли изменен параметр обратной связи, а именно, что установка записи Include=user1,user2 в custom.conf будет работать как представленная. Он должен переопределить любой параметр IncludeAll и отображать только тех, кто явно указан.     

ответ дан belacqua 19.01.2011 в 04:48
2

В эти выходные я написал сценарий (gdm-greeter). Он хорошо работает на CentOS 6.2, интересно, будет ли он полезен для 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=[^[]*\([[].*\)//' | \
   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
    
ответ дан Hans Vervaart 19.02.2012 в 22:58
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>

Эффект от этого заключается в том, что все листинг пользователя отключен, что, если я правильно интерпретирую исходный вопрос, на самом деле намеревается сделать OP (gruszczy). Это исключает необходимость создания длинной строки исключений, так как все идентификаторы пользователя, независимо от номера UID, исключаются независимо от того, будет ли изменен этот параметр. Я лично применил этот параметр к 3 отдельным серверам CentOS 6.2 на работе, к которым иногда обращаются через XDMCP (используя xrdp > vnc-server > xinetd > gdm > gnome) через RDP, что позволяет некоторым из наших менее опытных Linux админы работают над этими системами с минимальной подготовкой.

Все это сказало, хотя я согласен с тем, что неопытный системный администратор должен учиться с самого начала, чтобы работать с личной учетной записью (возможно, с доступом к суду), а не с правами root, если у вас есть опыт работы с этой учетной записью должным образом, нет никакого вреда в этом. Просто убедитесь, что вы знаете, что делаете перед вами. В случае с моими другими системными администраторами я добавил CentrifyDC для поддержки Active Directory ко всем этим системам и настроил системы, чтобы AD-UserID могли использоваться для сеансов рабочего стола при сохранении прав пользователя AD Security Group. Но лично, поскольку я разработал все эти серверы и использовал Linux уже более 15 лет, я не думаю, что использовать root для ускорения работы. Фактически, я стараюсь включить root в системах, где он был отключен, чтобы я мог использовать эту учетную запись и прервать погоню за тем, чтобы все было сделано. Главное, действительно, это просто создать привычку создавать резервную копию любого файла, прежде чем изменять его. Это будет безопасно защищать от большинства неудач и позволит вам восстановить систему, если вы выполните редактирование, которое в противном случае стало бы недоступным для системы (просто загрузитесь на Live CD и исправьте то, что нужно исправить).

ИМХО, я считаю, что мантра «никогда не входите в систему как корень» на самом деле существует только для защиты системных администраторов n00bie от самих себя. Но если вы достигнете уровня компетентности с Linux до такой степени, что вы сможете инженеризовать систему из любой ОС Linux за очень короткое время, и она работает каждый раз, тогда нет причин жить по принципу «никогда не входить в систему как root», мантру, потому что к этому моменту вы готовы справиться с ответственностью, которая приходит вместе с использованием этой учетной записи. Это особенно справедливо в средах, которые используют поддержку CentrifyDC для AD, потому что «root» становится локальной учетной записью sysadmin и обычно (обычно) включается автоматически. Поэтому мне лучше всего перейти к преследованию и установить настройку пароля учетной записи root как одну из первых задач, которые я выполняю при любом развертывании в настоящее время. Конечно, я мог бы сделать весь вход в качестве своего собственного идентификатора, а затем sudo up, но я лично не чувствую необходимости делать что-то в этом роде. Ваш собственный пробег может меняться ...

    
ответ дан StygianAgenda 07.09.2012 в 17:32
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 / users игнорируется MDM и, предположительно, GDM. Я не зашел так далеко, чтобы добавить Exclude=user1,user2 или Include=user3 в [greeter] в /etc/mdm/mdm.conf или создать /etc/mdm/custom.conf, так как еще один скрыть пользователей, добавленных через useradd , просто отлично, в то время как пользователи добавили adduser . Установка оболочки входа в / bin / false запрещает все входные данные для этого пользователя, которые я по-прежнему желаю su. Но это также скрывает пользователя на экране входа в систему, если вы хотите, чтобы этот пользователь был недоступен.

    
ответ дан ThorSummoner 11.05.2017 в 05:46