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

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

74
задан 14 July 2012 в 17:38

7 ответов

Редактируйте файл /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. Раньше для этого была хорошая утилита с графическим интерфейсом, но она не была в Ubuntu в последних релизах.

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

30
ответ дан 14 July 2012 в 17:38

Hacky but you can modify the user's id so they don't show in the list:

sudo usermod -u 999 <username>

Это работает, потому что пользователи с id ниже 1000 считаются "системными" пользователями (т.е. не людьми).

Единственный известный мне способ - полностью скрыть список:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
16
ответ дан 14 July 2012 в 17:38

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

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

     sudo  нано / вар / библиотека / AccountsService / пользователи / пользователь
     
  2. Добавьте в файл следующее:

      [Пользователь]
    Язык =
    XSession = гном
    SystemAccount = true
     
  3. Сменить пользователя или выйти из системы, чтобы проверить, нет ли пользователя больше в списке.

75
ответ дан 14 July 2012 в 17:38

Измените оболочку входа пользователя на пустую строку в / 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. Но это также скрывает пользователя на экране входа в систему, если вы хотите, чтобы этот пользователь был просто недоступен.

0
ответ дан 14 July 2012 в 17:38

Mo kọ iwe afọwọkọ kan (gdm-greeter) ni ipari ose yii . O ṣiṣẹ daradara lori CentOS 6.2, Mo ṣe iyalẹnu boya yoo wulo fun 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
ответ дан 14 July 2012 в 17:38

Разрабатывая комментарий Жиля к принятому ответу, вот что я считаю лучшим способом (Gnome-safe) в настоящее время. Это изменение также будет отражено в Gnome "Indicator Applet Session"

. Этот метод предложен в документации на сайте GDM, и хотя и сайт, и Жиль показывают добавление "никого" к исключению, я хотел убедиться, что это действительно необходимо (несмотря на то, что явно предлагают manpages или онлайн-документы). Я протестировал это на паре систем 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 "face browser".

Примечание : В моей версии Gnome/GDM (2.30), если у вас нет "никого" в записи Exclude, то у вас будет фальшивый пользователь для входа в систему , который не появится вместо user1 или user2.

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

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

12
ответ дан 14 July 2012 в 17:38

Я должен был согласиться, что наиболее приемлемый ответ здесь близок, но не мертв.

Я просто сам лизнул эту проблему, и ответом для меня было изменение следующей 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-сервер > xinetd > gdm > gnome) через RDP, что позволяет некоторым из наших менее опытных администраторов Linux работать на этих системах с минимальным обучением.

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

IMHO, я считаю, что мантра "никогда не входить в систему с правами root" на самом деле существует только для того, чтобы защитить сисадминов n00bie от них самих. Но если вы достигнете такого уровня компетентности в Linux, что сможете в очень короткие сроки спроектировать систему из любой операционной системы Linux, и она будет работать каждый раз, то нет причин жить по мантре 'никогда не входить в систему от имени root', потому что к этому моменту вы готовы взять на себя ответственность, которая сопутствует использованию этой учетной записи. Это особенно верно в средах, использующих CentrifyDC для поддержки AD, поскольку 'root' становится локальной учетной записью системного администратора и (обычно) включается автоматически. Поэтому я считаю, что лучше всего перейти к делу и сделать установку пароля учетной записи root одной из самых первых задач, которые я выполняю при любой установке на сегодняшний день. Конечно, я мог бы сделать весь этот 'вход в систему как свой собственный ID, а затем поднять его', но лично я не чувствую необходимости делать что-то подобное. Ваш собственный пробег может варьироваться...

2
ответ дан 14 July 2012 в 17:38

Другие вопросы по тегам:

Похожие вопросы: