Como ocultar usuários da tela de login do GDM?


64

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 não sei se acrescentar Exclude=foobarem /etc/gdm/gdm.confobras, você já tentou isso?
Umang

boa pergunta, as respostas talvez estejam desatualizadas (conforme discussão na meta).
Thufir 16/02

Respostas:


30

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.


afaik, a ferramenta GUI não funciona mais, devido ao fato de o GDM ter mudado de arquivos de texto planos para sua configuração para esquemas do Gconf.
LassePoulsen

Obrigado pela fonte de informações Lab. Notei que, nos últimos lançamentos, várias ferramentas da GUI foram perdidas por razões semelhantes.
Richard Holloway

29
Na verdade, acho que você não deve modificar /etc/gdm/gdm.schema. Em vez disso, adicione as duas linhas [greeter] Exclude=nobody,qmail-foo,qmail-bara /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.)
Gilles 'SO- deixa de ser mau'

3
Normalmente você deve usar UIDs abaixo de 1000 para isso.
txwikinger

@RichardHolloway Não consegue encontrar esse arquivo Ubuntu 12.04.04, você poderia aconselhar?
gotqn

56

Para o GDM 3.X mais recente, as respostas antigas não funcionam, exceto esta.
A greeterconfiguraçã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:

  1. Abra o terminal e digite (substitua userpelo nome de usuário que deseja ocultar na tela de login):

    sudo nano /var/lib/AccountsService/users/user
    
  2. Adicione o seguinte ao arquivo:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Alterne usuário ou efetue logout para testar se usernão está mais listado.


11
De fato, foi o que fiz depois de ler os documentos do Arch . Esta resposta deve ser votada de forma a que as pessoas a vejam mais cedo e economizem algum tempo.
Stefan van den Akker

parece ser o caminho apropriado em vez de manipular UIDs
xuma202

11
Fantástico! Isso ajuda a resolver o problema de usuários com uids inferiores a 1000 ocultos na tela de login.
22916 biocyberman

11
Quais são as ramificações de tornar um usuário uma conta do sistema?
precisa saber é o seguinte

2
Isso funcionou para mim, mas tive que reiniciar para que a alteração tivesse efeito.
benjer3

13

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'

3
Não existe "nível de usuário", é o ID do usuário.
João Pinto

6
Essa usermod -uopçã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.
Pool16 de

Para ocultar a lista completamente, você também pode executar o gdmsetup e usar a caixa de seleção.
Belacqua

11

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 MinimalUIDvalor é definido como 1000. Se, e somente se, a configuração padrão IncludeAll=truefor mantida no local e a Includediretiva 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,user2entrada no custom.conf funcionará conforme apresentado. Ele deve substituir qualquer IncludeAllconfiguração e exibir apenas os usuários listados explicitamente.


+1 para referência ao site da GDM e porque funcionou para mim.
Aaron

Não funciona mais em versões mais recentes do GDM.
Stefan van den Akker

2

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

2

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 ...


0

Altere o shell de login do usuário para uma string vazia em / etc / passwd

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,user2ou um Include=user3sob [greeter]/etc/mdm/mdm.conf, ou criar um /etc/mdm/custom.conf, pois outra caixa estava escondendo usuários adicionados por meio de useraddmulta, enquanto usuários adicionado com adduserforam 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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.