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


64

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


Я не знаю, добавлял ли ты Exclude=foobarв /etc/gdm/gdm.confтруды, ты пробовал это?
Уманг

Хороший вопрос, ответы могут быть устаревшими (согласно обсуждению на мета).
Thufir

Ответы:


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.


afaik, инструмент с графическим интерфейсом больше не работает из-за того, что GDM переключился с плоских текстовых файлов для своей конфигурации на схемы Gconf.
LassePoulsen

Спасибо за информацию Source Lab. Я заметил, что за последние несколько выпусков несколько инструментов GUI были потеряны по тем же причинам
Ричард Холлоуэй

29
На самом деле, я не думаю, что вы должны изменить /etc/gdm/gdm.schema. Вместо этого добавьте две строки [greeter] Exclude=nobody,qmail-foo,qmail-barв /etc/gdm/custom.conf. (Кроме nobodyимен в списке по умолчанию не будут отображаться в любом случае , потому что их UID является <1000.)
«SO- перестать быть злом» Жиля

3
Обычно вы должны использовать uids до 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
Действительно, это то, что я сделал после прочтения документации Arch . Этот ответ должен быть одобрен, чтобы люди видели его раньше и сэкономили время.
Стефан ван ден Аккер

кажется, что это правильный путь, а не манипулирование UID
xuma202

1
Фантастика! Это помогает решить проблему пользователей с uid менее 1000, скрытых на экране входа в систему.
biocyberman

1
Каковы последствия того, чтобы сделать пользователя системной учетной записью?
Jistanidiot

2
Это сработало для меня, но мне пришлось перезагрузиться, чтобы изменения вступили в силу.
benjer3

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опция интересна: она автоматически меняет uid в домашнем каталоге и почтовую папку (если есть) для соответствия. Однако это может нарушить их доступ к любым файлам, которые они имеют за пределами своего домашнего каталога.
пул

Чтобы полностью скрыть список, вы также можете запустить gdmsetup и использовать флажок.
Белаква

11

Обращаясь к комментариям Жиля к принятому ответу, я верю в то, что в настоящее время существует способ «наилучшей практики» (безопасный для гномов) сделать это. Это изменение также будет отражено в «Сессии апплета индикатора».

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

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

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


+1 за ссылку на сайт GDM, и потому что это сработало для меня.
Аарон

Больше не работает на более новых версиях GDM.
Стефан ван ден Аккер

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=[^[]*\([[].*\)/\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>

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

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

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


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=user3under [greeter]в /etc/mdm/mdm.conf, или создать /etc/mdm/custom.conf, так как другой блок скрывал пользователей, добавленных через useraddочень хорошо, в то время как пользователи добавил с adduserбыли показаны. Установка логина оболочки / bin / false запрещает все входы в систему для этого пользователя, что я все еще хотел бы su как. Но это также скрывает пользователя на экране входа в систему, если вы хотите, чтобы этот пользователь был просто недоступен.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.