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

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

1
задан 14 July 2012 в 18:38

6 ответов

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

Откройте терминал и введите (замените user на имя пользователя, которое вы хотите скрыть от экрана входа в систему):
sudo nano /var/lib/AccountsService/users/user
Добавить в файл:
[User]  
Language=   
XSession=gnome  
SystemAccount=true  
Выключить пользователя или выйти из системы, чтобы проверить, нет ли user.
40
ответ дан 29 May 2018 в 12:45
  • 1
    В самом деле, это то, что я сделал после чтения Arch docs . Этот ответ должен быть одобрен, чтобы люди увидели его раньше и сэкономили некоторое время. – Stefan van den Akker 12 July 2015 в 12:37
  • 2
    представляется скорее подходящим способом, чем манипулированием UID – xuma202 13 January 2016 в 20:03
  • 3
    пожалуйста, укажите, из какой версии gdm этот ответ работает – edward torvalds 3 February 2016 в 19:00
  • 4
    Фантастика! Это помогает решить проблему пользователей с uids менее 1000, которые скрыты на экране входа в систему. – biocyberman 10 March 2016 в 02:37
  • 5
    Каковы последствия создания учетной записи системы? – Jistanidiot 8 March 2017 в 22:28

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

sudo usermod -u 999 <username>

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

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

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
12
ответ дан 29 May 2018 в 12:45
  • 1
    Нет такой вещи, как «уровень пользователя», это идентификаторы пользователя. – João Pinto 17 August 2010 в 19:14
  • 2
    Эта опция usermod -u интересна: она автоматически изменяет uid в домашнем каталоге и почтовый спутник (если есть), чтобы соответствовать. Однако он может нарушить их доступ к любым файлам, которые они хранят вне своего домашнего каталога. – poolie 16 January 2011 в 20:44
  • 3
    Чтобы скрыть список полностью, вы также можете запустить gdmsetup и использовать флажок. – belacqua 18 January 2011 в 09:47

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

Этот метод является тем, который предлагается в документах на веб-сайте 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.

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

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

11
ответ дан 29 May 2018 в 12:45
  • 1
    +1 для ссылки на сайт GDM, и потому, что это сработало для меня. – Aaron 13 February 2012 в 22:00
  • 2
    Больше не работает в более новых версиях GDM. – Stefan van den Akker 12 July 2015 в 12:40

В эти выходные я написал сценарий (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
ответ дан 29 May 2018 в 12:45

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

Я просто лизал эту проблему сам, и ответ для меня заключался в том, чтобы изменить следующую gdm.schema entry:

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

2
ответ дан 29 May 2018 в 12:45

Измените оболочку входа пользователя на пустую строку в / etc / passwd

Пример: change:

# 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
ответ дан 29 May 2018 в 12:45

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

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