AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 2471
Accepted
gruszczy
gruszczy
Asked: 2010-08-18 02:25:33 +0800 CST2010-08-18 02:25:33 +0800 CST 2010-08-18 02:25:33 +0800 CST

如何从 GDM 登录屏幕隐藏用户?

  • 772

我最近添加了几个新用户,我需要 qmail。现在它们出现在登录屏幕的框中并使其混乱,我必须滚动才能找到我的用户。如何从登录框中隐藏这些用户?

gdm
  • 8 8 个回答
  • 86522 Views

8 个回答

  • Voted
  1. miceagol
    2014-11-05T14:10:18+08:002014-11-05T14:10:18+08:00

    对于较新的 GDM 3.X,旧答案不起作用,除了这个
    The greetersetting custom.confis obsolete,即它不再起作用。如果您想避免更改用户的 uid,一种简单的解决方法:

    1. 打开终端,然后输入(替换user为要从登录屏幕隐藏的用户名):

      sudo nano /var/lib/AccountsService/users/user
      
    2. 将以下内容添加到文件中:

      [User]  
      Language=   
      XSession=gnome  
      SystemAccount=true  
      
    3. 切换用户或注销以测试是否user不再列出。

    • 88
  2. Best Answer
    Richard Holloway
    2010-08-18T03:30:57+08:002010-08-18T03:30:57+08:00

    编辑文件 /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>
    

    这将阻止用户 qmail 出现在 gdm 问候语中。曾经有一个很好的 GUI 工具可以做到这一点,但在最近的几个版本中还没有出现在 Ubuntu 中。

    另一种选择是将用户的 UID 设置为 1000 以下。这些被认为是系统帐户,也被排除在 GDM 问候语中。

    • 31
  3. Oli
    2010-08-18T02:44:39+08:002010-08-18T02:44:39+08:00

    哈克,但您可以修改用户的 id,这样它们就不会显示在列表中:

    sudo usermod -u 999 <username>
    

    这是因为 id 低于 1000 的用户被认为是“系统”用户(即不是人类)。

    我知道的唯一其他方法是完全隐藏列表:

    sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
    
    • 18
  4. belacqua
    2011-01-19T19:48:37+08:002011-01-19T19:48:37+08:00

    详细说明Gilles对已接受答案的评论,这是我认为当前的“最佳实践”(Gnome 安全)方式来做到这一点。这一变化也将反映在 Gnome “Indicator Applet Session”中。

    这种方法是GDM 网站上的文档中建议的一种方法,尽管该网站和 Gilles 都显示将“nobody”添加到排除项中,但我想确保很明显这实际上是必要的(尽管手册页或在线文档明确提供)。我已经在几个 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“人脸浏览器”上显示的用户名或密码文件条目(例如,qmail、squid 等)。

    注意:在我的 Gnome/GDM (2.30) 版本下,如果您没有在 Exclude 条目中列出“nobody”,那么您将看到一个虚假的登录用户nobody,而不是 user1 或 user2。

    NB#2:UID 低于 1000 的账户不显示是一个可配置的参数。默认情况下,该MinimalUID值设置为 1000。当且仅当IncludeAll=true保留默认设置并且该Include指令未更改为非空值时,GDM 欢迎程序会扫描 passwd 文件以查找 UID 大于 MinimalUID 的条目。然后显示 UID 高于 MinimalUID 且不在排除列表中的用户。

    我还没有测试反向设置,即Include=user1,user2在 custom.conf 中设置一个条目是否可以正常工作。它应该覆盖任何IncludeAll设置,并且只显示明确列出的用户。

    • 13
  5. Hans Vervaart
    2012-02-20T13:58:01+08:002012-02-20T13:58:01+08:00

    这个周末我写了一个脚本(gdm-greeter)。它在 CentOS 6.2 上运行良好,我想知道它对 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
  6. StygianAgenda
    2012-09-08T07:32:43+08:002012-09-08T07:32:43+08:00

    我不得不同意这里最被接受的答案是接近的,但不是死的。

    我只是自己解决了这个问题,我的答案是更改以下 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 编号如何,一旦更改此设置,所有用户 ID 都会被排除。我亲自将此设置应用于工作中的 3 个单独的 CentOS 6.2 服务器,这些服务器偶尔通过 RDP 上的 XDMCP(使用 xrdp > vnc-server > xinetd > gdm > gnome)访问,这允许我们一些经验不足的 Linux 管理员在这些服务器上工作培训最少的系统。

    综上所述,虽然我确实同意没有经验的系统管理员应该从一开始就学习从个人帐户(可能具有 sudo 访问权限)而不是 root 工作,但如果您有正确使用该帐户的经验,那么没有害处在这样做。只要确保你事先知道你在做什么。对于我的其他系统管理员,我已经为所有这些系统添加了用于 Active Directory 支持的 CentrifyDC,并配置了系统,以便 AD-UserID 可用于桌面会话,同时维护用户的 AD 安全组权限。但就个人而言,由于我设计了所有这些服务器并且使用 Linux 已经超过 15 年,我认为使用 root 来加快速度并不重要。事实上,我倾向于在它所在的系统上启用 root s 已被禁用,以便我可以使用该帐户并直接完成任务。实际上,主要的事情就是养成在更改任何文件之前创建任何文件的备份副本的习惯。这将防止大多数事故发生,并允许您在执行会导致系统无法访问的编辑时恢复系统(只需启动到实时 CD 并修复需要修复的内容)。

    恕我直言,我相信“永远不要以 root 身份登录”的口头禅实际上只是为了保护 n00bie 系统管理员免受自己的侵害。但是,如果您对 Linux 的掌握程度达到了可以在很短的时间内从任何 Linux 操作系统设计系统并且每次都能正常工作的程度,那么就没有理由过着“从不以 root 身份登录”的生活口头禅,因为到那时,您已经准备好承担使用该帐户所带来的责任。在使用 CentrifyDC 支持 AD 的环境中尤其如此,因为“root”成为本地系统管理员帐户并且(通常)自动启用。因此,我发现最好切入正题,将 root 帐户的密码设置作为我现在在任何部署中所做的首要任务之一。当然,我可以完成整个“以我自己的 ID 登录,然后 sudo up”,但我个人认为没有必要这样做。您自己的里程可能会有所不同...

    • 2
  7. ThorSummoner
    2017-05-11T19:46:53+08:002017-05-11T19:46:53+08:00

    在 /etc/passwd 中将用户登录 shell 更改为空字符串

    例如,更改:

    # 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 也是如此。我没有在 /etc/mdm/mdm.conf 中添加一个Exclude=user1,user2或一个Include=user3下[greeter],或者创建一个 /etc/mdm/custom.conf,因为另一个框隐藏了通过useradd就好了添加的用户,而用户添加了adduser显示。将登录 shell 设置为 /bin/false 会拒绝该用户的所有登录,我仍然希望这样做。但是,如果您希望该用户完全无法访问,这也会将用户隐藏在登录屏幕中。

    • 0
  8. surajsheikh
    2022-03-08T20:13:12+08:002022-03-08T20:13:12+08:00

    这在 Zorin 16 上对我有用 - gdm3

    取消注释 /etc/gdm3/greeter.dconf-defaults 中的 disable-user-list=true 行

    nano /etc/gdm3/greeter.dconf-defaults
    
    # - Disable user list
    disable-user-list=true
    

    然后

    /etc/gdm3/greeter.dconf-defaults
    
    • 0

相关问题

  • 10.04 Lucid 中的多席位状态如何?[关闭]

  • 从登录屏幕启动访客会话

  • 如何更改 GDM 中的登录屏幕主题?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve