Недавно я добавил несколько новых пользователей, которые мне нужны для qmail. Теперь они появляются в окне на экране входа в систему и загромождают его, и мне нужно прокрутить, чтобы найти моего пользователя. Как я могу скрыть этих пользователей из окна входа?
Для новых GDM 3.X старые ответы не работают, за исключением этого. Параметр greeter в custom.conf устарел, то есть он больше не будет работать. Одним из простых способов обхода проблемы, если вы хотите избежать изменения uid пользователя:
Откройте терминал и введите (замените user на имя пользователя, которое вы хотите скрыть от экрана входа в систему):sudo nano /var/lib/AccountsService/users/user
Добавить в файл: [User]
Language=
XSession=gnome
SystemAccount=true
Выключить пользователя или выйти из системы, чтобы проверить, нет ли user. Hacky, но вы можете изменить идентификатор пользователя, чтобы они не отображались в списке:
sudo usermod -u 999 <username>
Это работает, потому что пользователи с идентификатором менее 1000 считаются «системными» пользователями (т. е. не люди).
Единственный другой способ, который я знаю, - полностью скрыть список:
sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
Разрабатывая комментарий Жиля к принятому ответу, вот что, я считаю, является нынешней «лучшей практикой» (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 и отображать только явные списки пользователей.
В эти выходные я написал сценарий (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
Я должен согласиться с тем, что наиболее приемлемый ответ здесь близок, но не мертв.
Я просто лизал эту проблему сам, и ответ для меня заключался в том, чтобы изменить следующую 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, но я лично не чувствую необходимости делать что-то в этом роде. Ваш собственный пробег может меняться ...
Пример: 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. Но это также скрывает пользователя на экране входа в систему, если вы хотите, чтобы этот пользователь был недоступен.