GDM 로그인 화면에서 사용자를 숨기는 방법은 무엇입니까?


64

최근에 큐메일에 필요한 몇 가지 새로운 사용자를 추가했습니다. 이제 로그인 화면의 상자에 표시되어 혼란스럽고 사용자를 찾으려면 스크롤해야합니다. 로그인 상자에서 해당 사용자를 숨기려면 어떻게해야합니까?


나는 추가 여부를 알 수없는 Exclude=foobar에서 /etc/gdm/gdm.conf작품, 당신이 그것을 시도?
Umang

좋은 질문은 대답이 구식 일 수 있습니다 (메타에 대한 토론에 따라).
Thufir

답변:


30

/etc/gdm/gdm.schema 파일을 편집하여 현재 다음과 같은 섹션을 찾으십시오.

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

예를 들어 qmail이라는 사용자를 제외하려면 qmail을 기본 목록에 추가하여 섹션이 다음과 같이 표시되도록합니다.

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

그러면 gdm greeter에 사용자 qmail이 나타나지 않습니다. 이 작업을 수행하는 데 유용한 GUI 도구가 있었지만 지난 몇 가지 릴리스에서는 우분투에 없었습니다.

다른 대안은 사용자의 UID를 1000 미만으로 설정하는 것입니다.이 계정은 GDM 인사말에서 제외 된 시스템 계정으로 간주됩니다.


afaik, GUI 도구는 GDM이 구성을 위해 평면 텍스트 파일에서 Gconf 스키마로 전환했기 때문에 더 이상 작동하지 않습니다.
LassePoulsen

정보원 실험실에 감사드립니다. 지난 몇 가지 릴리스에서 유사한 이유로 여러 GUI 도구가 손실되었습니다.
Richard Holloway

29
실제로, 나는 당신이 수정해야한다고 생각하지 않습니다 /etc/gdm/gdm.schema. 대신에 두 줄 [greeter] Exclude=nobody,qmail-foo,qmail-bar을 추가하십시오 /etc/gdm/custom.conf. (을 제외 nobody하고 기본 목록의 이름은 uid가 <1000이므로 어쨌든 표시되지 않습니다.)
Gilles

3
보통 1000 미만의 uid를 사용해야합니다.
txwikinger

@RichardHolloway에서 해당 파일을 찾을 수 없습니다. Ubuntu 12.04.04조언이 있습니까?
gotqn

56

새로운 GDM의 3.X의 경우, 기존 답변이 하나를 제외하고, 작동하지 않습니다 의 설정 입니다 쓸모 가 더 이상 작동하지 않습니다 즉. 사용자의 UID를 변경하지 않으려는 경우 한 가지 쉬운 해결 방법 :
greetercustom.conf

  1. 터미널을 열고 다음을 입력하십시오 ( user로그인 화면에서 숨기려는 사용자 이름으로 바꾸십시오 ).

    sudo nano /var/lib/AccountsService/users/user
    
  2. 파일에 다음을 추가하십시오.

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. user더 이상 표시되지 않으면 사용자를 전환하거나 로그 아웃하여 테스트하십시오 .


1
사실, 이것은 아치 문서를 읽은 후에 내가 한 일 입니다. 이 답변은 사람들이 더 빨리보고 시간을 절약 할 수 있도록 상향 조정되어야합니다.
Stefan van den Akker

UID를 조작하는 대신 적절한 방법 인 것 같습니다
xuma202

1
환상적인! 이렇게하면 uid가 1000 미만인 사용자가 로그인 화면에 숨겨져있는 문제를 해결할 수 있습니다.
biocyberman

1
사용자를 시스템 계정으로 만들면 어떤 결과가 발생합니까?
Jistanidiot

2
이것은 나를 위해 일했지만 변경 사항을 적용하려면 재부팅해야했습니다.
benjer3

13

해 키지 만 사용자 ID를 수정하여 목록에 표시되지 않도록 할 수 있습니다.

sudo usermod -u 999 <username>

이것은 1000 미만의 ID를 가진 사용자가 "시스템"사용자 (즉 사람이 아닌)로 간주되기 때문에 작동합니다.

내가 아는 유일한 방법은 목록을 완전히 숨기는 것입니다.

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'

3
"사용자 수준"과 같은 것은 없으며 사용자의 id입니다.
João Pinto

6
usermod -u옵션은 흥미 롭습니다. 홈 디렉토리의 uid와 메일 스풀 (있는 경우)이 자동으로 변경됩니다. 그러나 홈 디렉토리 외부에서 소유 한 파일에 대한 액세스 권한이 손상 될 수 있습니다.
poolie 2012 년

목록을 완전히 숨기려면 gdmsetup을 실행하고 확인란을 사용할 수도 있습니다.
belacqua

11

허용되는 답변 에 대한 Gilles 의 의견을 자세히 설명하면, 현재 이것을 수행하는 현재의 "모범 사례"(Gnome-safe) 방법이라고 생각합니다. 이 변경 사항은 Gnome "Indicator Applet Session"에도 반영됩니다.

이 방법은 GDM 웹 사이트 의 문서에서 제안 된 방법이며 사이트와 Gilles 모두 제외에 "아무도 없음"을 추가했지만 실제로 이것이 필요하다는 것을 분명히하고 싶었습니다 (맨 페이지가 무엇인지에도 불구하고) 또는 온라인 문서는 명시 적으로 제공합니다). 반복성을 확인하기 위해 두 개의 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"는 GDM "face browser"에 표시하지 않을 사용자 이름 또는 passwd 파일 항목 (예 : qmail, 오징어 등)입니다.

참고 : 내 Gnome / GDM (2.30) 버전에서 제외 항목에 "아무도 없음"이 없으면 사용자 로그인 사용자 nobody가 사용자 1 또는 사용자 2 대신 표시됩니다.

NB # 2 : UID가 1000 미만인 계정의 비 표시는 구성 가능한 매개 변수입니다. 기본적으로 MinimalUID값은 1000으로 설정됩니다. 기본 설정 IncludeAll=true이 그대로 유지되고 Include지시문이 비어 있지 않은 값으로 변경되지 않은 경우에만 GDM greeter는 UID가 MinimalUID보다 큰 항목에 대해 암호 파일을 스캔합니다. 그런 다음 제외 목록에없는 UID 이상의 MinimalUID를 가진 사용자가 표시됩니다.

리버스 설정, 즉 Include=user1,user2custom.conf에 항목 을 설정하면 제시된대로 작동 하는지 테스트하지 않았습니다 . IncludeAll설정을 무시하고 명시 적으로 나열된 사용자 만 표시해야합니다.


GDM 사이트와 관련하여 +1했습니다.
Aaron

최신 버전의 GDM에서는 더 이상 작동하지 않습니다.
Stefan van den Akker

2

이번 주말에 스크립트 (gdm-greeter)를 작성했습니다. CentOS 6.2에서 잘 작동합니다. 우분투에 유용할까요?

#!/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

나는 여기서 가장 인정받는 대답이 가까이 있지만 죽지 않았다는 데 동의해야합니다.

방금이 문제를 직접 핥았으며 대답은 다음 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>

이것의 결과는 모든 사용자 목록이 비활성화되어 원래 질문을 올바르게 해석하면 실제로 OP (gruszczy)가 의도 한 것입니다. 이 설정을 변경하면 UID 번호에 관계없이 모든 userID가 제외되므로 긴 제외 행을 작성하지 않아도됩니다. RDP를 통해 XDMCP를 통해 (xrdp> vnc-server> xinetd> gdm> gnome을 사용하여) 가끔 액세스하는 3 개의 별도 CentOS 6.2 서버에이 설정을 개인적으로 적용하여 경험이 적은 Linux 관리자가 최소한의 훈련으로 시스템.

나는 경험이없는 sysadmin이 처음부터 루트가 아닌 개인 계정 (수도 액세스 가능)에서 배우는 법을 배워야한다는 데 동의하지만, 해당 계정으로 올바르게 작업 한 경험이 있다면 아무런 해가 없습니다 이 과정에서. 미리 무엇을하고 있는지 확인하십시오. 다른 sysadmins의 경우 Active Directory 지원을위한 CentrifyDC를 이러한 모든 시스템에 추가하고 사용자의 AD 보안 그룹 권한을 유지하면서 데스크톱 세션에 AD-UserID를 사용할 수 있도록 시스템을 구성했습니다. 그러나 개인적으로, 나는이 모든 서버를 설계하고 현재 15 년 이상 Linux를 사용해 왔기 때문에 루트를 사용하여 속도를 높이는 것은 아무 것도 생각하지 않습니다. 사실, 나는 그것이있는 시스템에서 루트를 활성화하는 경향이 있습니다. 그 계정을 사용하고 일을 끝내면서 추격을자를 수 있도록 비활성화되었습니다. 실제로 중요한 것은 파일을 변경하기 전에 파일의 백업 복사본을 만드는 습관을 만드는 것입니다. 이렇게하면 대부분의 실수를 방지 할 수 있으며 시스템을 액세스 할 수 없게하는 편집을 수행 할 경우 시스템을 복구 할 수 있습니다 (라이브 CD로 부팅하고 수정해야 할 사항을 수정하기 만하면 됨).

IMHO, 나는 'never login as root'라는 만트라가 실제로 n00bie 시스템 관리자를 보호하기 위해 존재한다고 생각합니다. 그러나 Linux OS에서 시스템을 매우 짧은 시간 안에 엔지니어링 할 수있는 수준까지 Linux와의 역량 수준에 도달하고 매번 작동한다면 '루트로 로그인하지 마십시오'라는 이유가 없습니다. 그 시점까지는 해당 계정을 사용하는 데 따른 책임을 처리 할 준비가 되었기 때문에 만트라가 있습니다. 'root'는 로컬 sysadmin 계정이되며 일반적으로 자동으로 활성화되므로 AD 지원을 위해 CentrifyDC를 사용하는 환경에서 특히 그렇습니다. 따라서 추적을 줄이고 루트 계정 암호 설정을 요즘 배포에서 수행하는 첫 번째 작업 중 하나로 만드는 것이 가장 좋습니다. 확실한, 나는 '내 자신의 ID로 로그인 한 다음 sudo up'을 할 수는 있지만 개인적으로 그렇게 할 필요는 없다고 생각합니다. 자신의 마일리지는 다를 수 있습니다 ...


0

/ etc / passwd에서 사용자 로그인 쉘을 빈 문자열로 변경하십시오.

예를 들어, 다음을 변경하십시오.

# 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로 설정하면 해당 사용자에 대한 모든 로그인이 거부됩니다. 그러나 사용자가 일반 사용자에게 액세스 할 수 없게하려면 로그인 화면에서 사용자를 숨 깁니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.