¿Cómo ocultar usuarios de la pantalla de inicio de sesión de GDM?

64

Recientemente he agregado varios usuarios nuevos que necesito para qmail. Ahora aparecen en el cuadro en la pantalla de inicio de sesión y lo abarrotan, y tengo que desplazarme para encontrar a mi usuario. ¿Cómo puedo ocultar a esos usuarios del cuadro de inicio de sesión?

gruszczy
fuente
No sé si anexar Exclude=foobaren /etc/gdm/gdm.conflas obras, ¿has probado?
Umang
buena pregunta, las respuestas pueden estar desactualizadas (según la discusión sobre meta).
Thufir

Respuestas:

30

Edite el archivo /etc/gdm/gdm.schema encuentre la sección que actualmente se ve así:

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

Y para excluir a un usuario llamado qmail, por ejemplo, agregue qmail a la lista predeterminada para que la sección se vea así.

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

Eso evitará que el usuario qmail aparezca en el gdm greeter. Solía ​​haber una buena herramienta GUI para hacer esto, pero no ha estado en Ubuntu en los últimos lanzamientos.

La otra alternativa es establecer el UID del usuario por debajo de 1000. Se consideran cuentas del sistema que también están excluidas en el GDM greeter.

Richard Holloway
fuente
afaik, la herramienta GUI ya no funciona, debido al hecho de que GDM cambió de archivos de texto planos para su configuración a esquemas de Gconf.
LassePoulsen
Gracias por la información Fuente Lab. He notado en las últimas versiones que varias herramientas GUI se han perdido por razones similares.
Richard Holloway
29
En realidad, no creo que debas modificar /etc/gdm/gdm.schema. En su lugar, agregue las dos líneas [greeter] Exclude=nobody,qmail-foo,qmail-bara /etc/gdm/custom.conf. (Además de nobodylos nombres de la lista por defecto no se mostrarán todos modos debido a que su UID es <1.000.)
'parada SO siendo malos' Gilles
3
Por lo general, debe usar uids menores de 1000 para esto.
txwikinger
@RichardHolloway No puedo encontrar ese archivo Ubuntu 12.04.04, ¿podría aconsejarme?
gotqn
56

Para el nuevo GDM 3.X, las respuestas antiguas no funcionan, excepto esta.
La greeterconfiguración custom.confes obsoleta , es decir, ya no funcionará. Una solución fácil si desea evitar cambiar el uid del usuario:

  1. Abra la terminal e ingrese (reemplace usercon el nombre de usuario que desea ocultar de la pantalla de inicio de sesión):

    sudo nano /var/lib/AccountsService/users/user
    
  2. Agregue lo siguiente al archivo:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Cambie de usuario o cierre sesión para probar si userya no aparece en la lista.

ratonesagol
fuente
1
De hecho, esto es lo que hice después de leer los documentos de Arch . Esta respuesta debe ser votada para que la gente la vea antes y ahorre algo de tiempo.
Stefan van den Akker
parece la forma adecuada en lugar de manipular los UID
xuma202
1
¡Fantástico! Esto ayuda a resolver el problema de los usuarios con menos de 1000 usuarios ocultos en la pantalla de inicio de sesión.
biocyberman
1
¿Cuáles son las ramificaciones de hacer que un usuario sea una cuenta del sistema?
Jistanidiot
2
Esto funcionó para mí, pero tuve que reiniciar para que el cambio surta efecto.
benjer3
13

Hacky pero puedes modificar la identificación del usuario para que no se muestre en la lista:

sudo usermod -u 999 <username>

Esto funciona porque los usuarios con una identificación inferior a 1000 se consideran usuarios del "sistema" (es decir, no humanos).

La única otra forma que sé es ocultar la lista por completo:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
Oli
fuente
3
No existe el "nivel de usuario", son los identificadores de usuario.
João Pinto
66
Esa usermod -uopción es interesante: cambia automáticamente el uid en el directorio de inicio y el spool de correo (si corresponde) para que coincida. Sin embargo, puede romper su acceso a cualquier archivo que posean fuera de su directorio de inicio.
Poolie
Para ocultar la lista por completo, también puede ejecutar gdmsetup y usar la casilla de verificación.
belacqua
11

Desarrollando el comentario de Gilles a la respuesta aceptada, esto es lo que creo que es la forma actual de "mejores prácticas" (seguras para los gnomos) de hacer esto. Este cambio también se reflejará en la "Sesión de Applet Indicador" de Gnome.

Este método es el sugerido en los documentos en el sitio web de GDM , y aunque tanto el sitio como Gilles muestran la adición de "nadie" a la exclusión, quería asegurarme de que estaba claro que esto es realmente necesario (a pesar de lo que dicen las páginas de manual). o documentos en línea explícitamente ofrecen). He probado esto en un par de sistemas 10.10 para verificar la repetibilidad.

Todo lo que tenemos que hacer es editar en una línea /etc/gdm/custom.conf. La mayoría de los otros métodos (realizar cambios en default.conf, gdm.conf, etc.) están en desuso.

Si tiene uno existente /etc/gdm/custom.conf, edite ese archivo. De lo contrario, copie sobre el archivo de ejemplo:

sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf

En la sección [Greeter] de /etc/gdm/custom.conf, agregue:

Exclude=user1,user2,nobody

Donde "user1" y "user2" son los nombres de usuario o las entradas de archivos passwd (por ejemplo, qmail, squid, etc.) que no desea mostrar en el "navegador de rostro" de GDM.

Nota : en mi versión de Gnome / GDM (2.30), si no tiene "nadie" en la entrada Excluir, aparecerá un usuario de inicio de sesión falso nobodyen lugar de user1 o user2.

NB # 2 : La no visualización de cuentas con UID por debajo de 1000 es un parámetro configurable. De manera predeterminada, el MinimalUIDvalor se establece en 1000. Si y solo si la configuración predeterminada IncludeAll=truese deja en su lugar y la Includedirectiva no se cambia a un valor no vacío, el GDM greeter escanea el archivo passwd en busca de entradas con UID mayor que MinimalUID. Luego se muestran los usuarios con UID's MinimalUID que no están en la lista Excluir.

No he probado si la configuración inversa, es decir, que establecer una Include=user1,user2entrada en custom.conf funcionará como se presenta. Debería anular cualquier IncludeAllconfiguración y mostrar solo los usuarios enumerados explícitamente.

belacqua
fuente
+1 para referencia al sitio de GDM, y porque esto funcionó para mí.
Aaron
Ya no funciona en versiones más nuevas de GDM.
Stefan van den Akker
2

Escribí un guión (gdm-greeter) este fin de semana. Funciona bien en CentOS 6.2, me pregunto si será útil para 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
Hans Vervaart
fuente
2

Tendría que aceptar que la respuesta más aceptada aquí es cercana, pero no acertada.

Simplemente lamí este problema yo mismo, y la respuesta para mí fue alterar la siguiente entrada de 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>

El efecto de esto es que toda la lista de usuarios está deshabilitada, lo que si estoy interpretando la pregunta original correctamente, es en realidad lo que el OP (gruszczy) tenía la intención de hacer. Esto elimina la necesidad de crear una larga línea de exclusiones, ya que todos los ID de usuario, independientemente del número de UID, se excluyen una vez que se modifica esta configuración. Personalmente, he aplicado esta configuración a 3 servidores CentOS 6.2 separados en el trabajo a los que se accede ocasionalmente a través de XDMCP (usando xrdp> vnc-server> xinetd> gdm> gnome) sobre RDP, lo que permite que algunos de nuestros administradores de Linux menos experimentados trabajen en estos sistemas con entrenamiento mínimo.

Dicho todo esto, si bien estoy de acuerdo en que un administrador de sistemas sin experiencia debe aprender desde el principio a trabajar desde una cuenta personal (tal vez con acceso a sudo) en lugar de como root, si tiene la experiencia para trabajar con esa cuenta correctamente, no hay daño al hacerlo. Solo asegúrate de saber lo que estás haciendo de antemano. En el caso de mis otros administradores de sistemas, agregué CentrifyDC para el soporte de Active Directory a todos estos sistemas y configuré los sistemas para que los ID de usuario de AD puedan usarse para sesiones de escritorio mientras mantengo los derechos del Grupo de seguridad de AD del usuario. Pero personalmente, dado que diseñé todos estos servidores y he usado Linux durante más de 15 años, no pienso en usar root para acelerar las cosas. De hecho, tiendo a habilitar root en sistemas donde ' me han desactivado solo para que pueda usar esa cuenta y seguir adelante con hacer las cosas. Lo principal allí, en realidad, es hacer el hábito de crear una copia de seguridad de cualquier archivo antes de modificarlo. Eso protegerá contra la mayoría de los contratiempos y le permitirá recuperar el sistema si realiza una edición que de lo contrario haría que el sistema se volviera inaccesible (simplemente inicie en un CD en vivo y arregle lo que necesita ser reparado).

En mi humilde opinión, creo que el mantra de 'nunca iniciar sesión como root' está realmente allí para proteger a los administradores de sistemas n00bie de sí mismos. Pero si alcanza un nivel de competencia con Linux hasta el punto en el que puede diseñar un sistema desde cualquier sistema operativo Linux en muy poco tiempo y funciona todo el tiempo, entonces no hay razón para vivir con el 'nunca iniciar sesión como root' mantra porque para ese punto ya estás listo para manejar la responsabilidad que conlleva el uso de esa cuenta. Esto es especialmente cierto en entornos que usan CentrifyDC para soporte de AD, porque 'root' se convierte en la cuenta local de administrador de sistemas y (generalmente) se habilita automáticamente. Por lo tanto, creo que es mejor ir al grano y establecer la contraseña de la cuenta raíz como una de las primeras tareas que hago en cualquier implementación hoy en día. Seguro, Podría hacer todo el 'inicio de sesión como mi propia ID, luego sudo', pero personalmente no siento la necesidad de hacer las cosas de esa manera. Su propio kilometraje puede variar ...

StygianAgenda
fuente
0

Cambie el shell de inicio de sesión del usuario a una cadena vacía en / etc / passwd

Por ejemplo, cambie:

# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash

# To
example:x:2001:2001:Example User,,,:/home/example:

Reinicié mi administrador de pantalla y observé que esto tenía efecto.

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

Me tomó semanas identificar esto como la razón por la cual los usuarios estaban ocultos en la pantalla de inicio de sesión del administrador de pantalla. Es evidente que / var / lib / AccountService / users está siendo ignorado por MDM, y presumiblemente también por GDM. No fui tan lejos como para agregar un Exclude=user1,user2o un Include=user3sub [greeter]en /etc/mdm/mdm.conf, o crear un /etc/mdm/custom.conf, ya que otro cuadro ocultaba los usuarios agregados useraddmuy bien, mientras que los usuarios añadido con adduserse muestran. Establecer el shell de inicio de sesión en / bin / false niega todo inicio de sesión a ese usuario, que todavía deseo sumar como. Pero eso también oculta al usuario en la pantalla de inicio de sesión si desea que ese usuario sea simplemente inaccesible.

ThorSummoner
fuente