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

60

Eu adicionei recentemente vários novos usuários, que eu preciso para o qmail. Agora eles aparecem na caixa na tela de login, e eu tenho que rolar para encontrar meu usuário. Como posso ocultar esses usuários da caixa de login?

    
por gruszczy 17.08.2010 / 12:25

7 respostas

30

Edite o arquivo /etc/gdm/gdm.schema e encontre a seção que se parece com isso:

  <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 o 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 qmail do usuário apareça no saudador do gdm. Costumava haver uma boa ferramenta GUI para fazer isso, mas ela não está no Ubuntu nos últimos lançamentos.

A outra alternativa é definir o UID do usuário para menos de 1000. Essas são consideradas contas do sistema que também são excluídas do indicador do GDM.

    
por Richard Holloway 17.08.2010 / 13:30
46

Para o novo GDM 3.X, respostas antigas não funcionam, exceto por essa
A configuração greeter em custom.conf é obsoleta , ou seja, não funcionará não mais. Uma solução fácil se você quiser evitar alterar o fluxo do usuário:

  1. Abra o terminal e digite (substitua user pelo nome de usuário que você 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 o usuário ou efetue o logout para testar se user não estiver mais listado.

por miceagol 04.11.2014 / 23:10
12

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 os usuários com ID abaixo de 1000 são considerados usuários do "sistema" (ou seja, não humanos).

A única outra maneira que eu sei é esconder a lista completamente:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
    
por Oli 17.08.2010 / 12:44
11

Elaborando o comentário de Gilles para a resposta aceita, eis o que acredito ser a maneira atual de "boas práticas" (segura para o Gnome) de fazer isso. Essa mudança também será refletida na "Sessão de miniaplicativos do indicador" do Gnome.

Este método é aquele sugerido nos documentos no site do GDM e, embora tanto o site quanto Gilles mostrem a adição de "ninguém" à exclusão, eu queria ter certeza de que estava claro que isso é realmente necessário (apesar do que as páginas de manual ou os documentos on-line oferecem explicitamente). Eu testei isso em alguns sistemas 10.10 para verificar a repetibilidade.

Tudo o que precisamos fazer é fazer uma edição de uma linha para /etc/gdm/custom.conf . A maioria dos outros métodos (fazendo alterações no default.conf, gdm.conf, etc.) estão obsoletos.

Se você tiver um /etc/gdm/custom.conf existente, edite esse arquivo. Caso contrário, copie 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ários ou entradas do arquivo passwd (por exemplo, qmail, squid, etc.) que você não deseja mostrar no "navegador de rosto" do GDM.

Observação : Na minha versão do Gnome / GDM (2.30), se você não tiver "nobody" listado na entrada Exclude, você terá um usuário de login falso nobody show up em vez de user1 ou user2.

N.B. # 2 : A não exibição de contas com UIDs abaixo de 1000 é um parâmetro configurável. Por padrão, o valor MinimalUID é definido como 1000. Se e somente se a configuração padrão IncludeAll=true for mantida e a diretiva Include não for alterada para um valor não vazio, o usuário do GDM examinará a passwd arquivo para entradas com UIDs maiores que MinimalUID. Usuários com UIDs acima de MinimalUID que não estão na lista de exclusão são exibidos.

Eu não testei se a configuração inversa, ou seja, que a configuração de uma entrada Include=user1,user2 no custom.conf funcionará conforme apresentado. Ele deve substituir qualquer configuração de IncludeAll e exibir apenas os usuários explicitamente listados.

    
por belacqua 19.01.2011 / 04:48
2

Eu escrevi um roteiro (gdm-greeter) neste final 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=[^[]*\([[].*\)//' | \
   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
    
por Hans Vervaart 19.02.2012 / 22:58
2

Eu tenho que concordar que a resposta mais aceita aqui é próxima, mas não morta.

Eu apenas lambi esse problema, e a resposta para mim foi alterar a seguinte entrada do 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 eu estou interpretando corretamente a pergunta original, é realmente o que o OP (gruszczy) estava pretendendo fazer. Isso elimina a necessidade de criar uma linha longa de exclusões, já que todos os userIDs, independentemente do número UID, são excluídos, independentemente de uma vez que essa configuração seja alterada. Eu pessoalmente apliquei essa configuração a três servidores CentOS 6.2 separados no trabalho que são ocasionalmente acessados via XDMCP (usando xrdp > vnc-server > xinetd > gdm > gnome) através de RDP, o que permite que alguns de nossos usuários menos experientes os administradores trabalham nesses sistemas com treinamento mínimo.

Tudo isso dito, embora eu concorde que um administrador de sistema inexperiente deve aprender desde o início a trabalhar em uma conta pessoal (talvez com acesso ao sudo) em vez de como raiz, se você tiver experiência para trabalhar com essa conta corretamente, não há mal em fazer isso. Apenas certifique-se de que você sabe o que está fazendo antes da mão. No caso dos meus outros sysadmins, adicionei o CentrifyDC para suporte do Active Directory a todos esses sistemas e configurei os sistemas para que os AD-UserIDs possam ser usados para sessões de desktop, mantendo os direitos do grupo de segurança do AD do usuário. Mas, pessoalmente, desde que eu projetei todos esses servidores e usei o Linux por mais de 15 anos, não acho nada de usar o root para acelerar as coisas. Na verdade, eu tenho a tendência de ativar sistemas de raiz em que ele foi desativado apenas para que eu possa usar essa conta e ir direto ao ponto com as coisas feitas. O principal, aliás, é simplesmente criar o hábito de criar uma cópia de backup de qualquer arquivo antes de alterá-lo. Isso protege contra a maioria dos contratempos e permite que você recupere o sistema caso realize uma edição que faria com que o sistema ficasse inacessível (basta inicializar um CD ao vivo e consertar o que precisa ser consertado).

IMHO, acredito que o mantra de 'nunca logar como root' está realmente lá apenas para proteger os administradores n00bie de si mesmos. Mas se você atingir um nível de competência com o Linux ao ponto de poder projetar um sistema a partir de qualquer sistema operacional Linux em um período muito curto e funcionar sempre, então não há razão para viver pelo 'nunca logar como root' mantra porque a essa altura você está pronto para lidar com a responsabilidade que vem com o uso dessa conta. Isso é especialmente verdadeiro em ambientes que usam o CentrifyDC para suporte do AD, porque 'root' se torna a conta sysadmin local e é (geralmente) habilitada automaticamente. Então, acho melhor ir direto ao assunto e definir a senha da conta raiz como uma das primeiras tarefas que faço em qualquer implantação hoje em dia. Claro, eu poderia fazer todo o 'login como meu próprio ID, então sudo up', mas eu pessoalmente não sinto a necessidade de fazer as coisas dessa maneira. Sua própria milhagem pode variar ...

    
por StygianAgenda 07.09.2012 / 17:32
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:

Eu reiniciei meu gerenciador de exibição e observei isso tendo efeito.

sudo service lightdm restart
# (or gdm, mdm, ...)

Demorei semanas para identificar isso como a razão pela qual os usuários estavam ocultos no visor de login do gerenciador de exibição. É evidente que / var / lib / AccountService / users está sendo ignorado pelo MDM e assumido também pelo GDM. Eu não fui tão longe a ponto de adicionar um Exclude=user1,user2 ou um Include=user3 sob [greeter] em /etc/mdm/mdm.conf, ou criar um /etc/mdm/custom.conf, como uma outra caixa foi ocultando usuários adicionados via useradd , enquanto usuários adicionados com adduser foram exibidos. Definindo o shell de login para / bin / false nega todo o login para esse usuário, que eu ainda desejo su como. Mas isso também oculta o usuário na tela de login se você quiser que o usuário fique totalmente inacessível.

    
por ThorSummoner 11.05.2017 / 05:46

Tags