Eu adicionei recentemente vários novos usuários, necessários para o qmail. Agora eles aparecem na caixa da tela de login e a desorganizam, e eu tenho que rolar para encontrar meu usuário. Como ocultar esses usuários da caixa de login?
Eu adicionei recentemente vários novos usuários, necessários para o qmail. Agora eles aparecem na caixa da tela de login e a desorganizam, e eu tenho que rolar para encontrar meu usuário. Como ocultar esses usuários da caixa de login?
Respostas:
Edite o arquivo /etc/gdm/gdm.schema e encontre a seção que se parece atualmente com esta:
<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>
E para excluir um usuário chamado qmail, por exemplo, adicione qmail à lista padrão para que a seção fique assim.
<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>
Isso impedirá que o usuário qmail apareça no gdm greeter. Costumava haver uma boa ferramenta GUI para fazer isso, mas não existe no Ubuntu nos últimos lançamentos.
A outra alternativa é definir o UID do usuário abaixo de 1000. Essas são consideradas contas de sistema que também são excluídas no greeter do GDM.
/etc/gdm/gdm.schema
. Em vez disso, adicione as duas linhas [greeter]
Exclude=nobody,qmail-foo,qmail-bar
a /etc/gdm/custom.conf
. (Além do mais nobody
, os nomes na lista padrão não serão exibidos de qualquer maneira porque o uid é <1000.)
Ubuntu 12.04.04
, você poderia aconselhar?
Para o GDM 3.X mais recente, as respostas antigas não funcionam, exceto esta.
A greeter
configuração custom.conf
é obsoleta , ou seja, não funcionará mais. Uma solução fácil, se você quiser evitar alterar o uid do usuário:
Abra o terminal e digite (substitua user
pelo nome de usuário que deseja ocultar na tela de login):
sudo nano /var/lib/AccountsService/users/user
Adicione o seguinte ao arquivo:
[User]
Language=
XSession=gnome
SystemAccount=true
Alterne usuário ou efetue logout para testar se user
não está mais listado.
Hacky, mas você pode modificar o ID do usuário para que ele não apareça na lista:
sudo usermod -u 999 <username>
Isso funciona porque usuários com ID abaixo de 1000 são considerados usuários do "sistema" (isto é, não humanos).
A única outra maneira que eu sei é ocultar a lista completamente:
sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
usermod -u
opção é interessante: altera automaticamente o uid no diretório inicial e o spool de correio (se houver) para corresponder. No entanto, isso pode interromper o acesso a qualquer arquivo que eles possuam fora do diretório inicial.
Ao elaborar o comentário de Gilles à resposta aceita, eis o que acredito ser a maneira atual de "melhores práticas" (segura para o Gnome). Essa alteração também será refletida na "Sessão de applets de indicadores" do Gnome.
Esse método é o sugerido nos documentos no site da GDM e, embora o site e Gilles mostrem a adição de "ninguém" à exclusão, eu queria ter certeza de que ficou claro que isso é realmente necessário (apesar do que as páginas de manual ou documentos online oferecem explicitamente). Eu testei isso em alguns sistemas 10.10 para verificar a repetibilidade.
Tudo o que precisamos fazer é editar em uma linha para /etc/gdm/custom.conf
. A maioria dos outros métodos (fazer alterações no default.conf, gdm.conf etc.) estão obsoletos.
Se você já possui /etc/gdm/custom.conf
, edite esse arquivo. Caso contrário, copie sobre o arquivo de exemplo:
sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf
Na seção [Greeter] de /etc/gdm/custom.conf
, adicione:
Exclude=user1,user2,nobody
Onde "user1" e "user2" são os nomes de usuário ou entradas de arquivos passwd (por exemplo, qmail, squid etc.) que você não deseja exibir no "navegador de rosto" do GDM.
Nota : Na minha versão do Gnome / GDM (2.30), se você não tiver "ninguém" listado na entrada Excluir, você terá um usuário de login falso nobody
, em vez do usuário1 ou usuário2.
NB # 2 : a não exibição de contas com UIDs abaixo de 1000 é um parâmetro configurável. Por padrão, o MinimalUID
valor é definido como 1000. Se, e somente se, a configuração padrão IncludeAll=true
for mantida no local e a Include
diretiva não for alterada para um valor não vazio, o GDM cumprimenta o arquivo passwd em busca de entradas com UIDs maiores que MinimalUID. Usuários com UIDs acima de MinimalUID acima que não estão na lista Excluir são exibidos.
Não testei se a configuração reversa, ou seja, a configuração de uma Include=user1,user2
entrada no custom.conf funcionará conforme apresentado. Ele deve substituir qualquer IncludeAll
configuração e exibir apenas os usuários listados explicitamente.
Eu escrevi um script (gdm-greeter) neste fim de semana. Funciona bem no CentOS 6.2, gostaria de saber se será útil para o 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
Eu teria que concordar que a resposta mais aceita aqui é próxima, mas não está morta.
Apenas lambi esse problema, e a resposta para mim foi alterar a seguinte entrada 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>
O efeito disso é que todas as listas de usuários estão desabilitadas, o que, se estou interpretando a pergunta original corretamente, é realmente o que o OP (gruszczy) pretendia fazer. Isso elimina a necessidade de criar uma longa linha de exclusões, pois todos os IDs de usuário, independentemente do número de UID, são excluídos, independentemente da alteração dessa configuração. Eu pessoalmente apliquei essa configuração em 3 servidores CentOS 6.2 separados no trabalho que são acessados ocasionalmente via XDMCP (usando xrdp> vnc-server> xinetd> gdm> gnome) sobre RDP, o que permite que alguns de nossos administradores Linux menos experientes trabalhem nesses sistemas com treinamento mínimo.
Tudo isso dito, embora eu concorde que um administrador de sistemas inexperiente deve aprender desde o início a trabalhar com uma conta pessoal (talvez com acesso ao sudo) e não como raiz, se você tiver experiência para trabalhar com essa conta corretamente, não há mal algum ao fazê-lo. Apenas certifique-se de saber o que está fazendo antes da mão. No caso de meus outros administradores de sistemas, adicionei o suporte do CentrifyDC for Active Directory a todos esses sistemas e configurei os sistemas para que os IDs de usuário do AD possam ser usados para sessões da área de trabalho, mantendo os direitos do grupo de segurança do usuário do AD. Mas, pessoalmente, desde que eu projetei todos esses servidores e utilizo o Linux há mais de 15 anos, acho que nada de usar o root para acelerar as coisas. De fato, tenho a tendência de habilitar a raiz em sistemas onde foi desativado apenas para que eu possa usar essa conta e ir direto ao ponto de fazer as coisas. Na verdade, o principal é apenas criar o hábito de criar uma cópia de backup de qualquer arquivo antes de alterá-lo. Isso protegerá contra a maioria dos contratempos e permitirá que você recupere o sistema, caso faça uma edição que, de outra forma, tornaria o sistema inacessível (basta inicializar em um CD ao vivo e corrigir o que precisa ser corrigido).
IMHO, acredito que o mantra de 'nunca faça login como root' esteja realmente lá apenas para proteger os administradores do n00bie de si mesmos. Mas se você atingir um nível de competência com o Linux a ponto de projetar um sistema a partir de qualquer sistema operacional Linux em um período muito curto de tempo e funcionar sempre, não há razão para viver com o 'nunca fazer login como root' mantra, porque nesse ponto você está pronto para lidar com a responsabilidade que vem junto com o uso dessa conta. Isso é especialmente verdade em ambientes que usam o CentrifyDC para suporte ao AD, porque 'root' se torna a conta sysadmin local e (geralmente) é ativada automaticamente. Portanto, acho melhor ir direto ao ponto e definir a senha da conta raiz como uma das primeiras tarefas que realizo em qualquer implantação atualmente. Certo, Eu poderia fazer todo o 'login como meu próprio ID e depois processar', mas pessoalmente não sinto a necessidade de fazer as coisas dessa maneira. Sua própria milhagem pode variar ...
Por exemplo, altere:
# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash
# To
example:x:2001:2001:Example User,,,:/home/example:
Reiniciei o meu gerenciador de exibição e observei isso entrando em vigor.
sudo service lightdm restart
# (or gdm, mdm, ...)
Levei semanas para identificar isso como a razão pela qual os usuários estavam ocultos no greeter de login do gerenciador de exibição. É aparente que / var / lib / AccountService / users está sendo ignorado pelo MDM e, supostamente, pelo GDM. Não fui tão longe quanto adicionar um Exclude=user1,user2
ou um Include=user3
sob [greeter]
/etc/mdm/mdm.conf, ou criar um /etc/mdm/custom.conf, pois outra caixa estava escondendo usuários adicionados por meio de useradd
multa, enquanto usuários adicionado com adduser
foram mostrados. Definir o shell de login como / bin / false nega todo o login para esse usuário, o qual ainda desejo su como. Mas isso também oculta o usuário na tela de login, se você deseja que ele seja inacessível.
Exclude=foobar
em/etc/gdm/gdm.conf
obras, você já tentou isso?