GDMログイン画面からユーザーを非表示にする方法は?


64

最近、qmailに必要な新しいユーザーをいくつか追加しました。これで、ログイン画面のボックスに表示されて混乱し、ユーザーを見つけるためにスクロールする必要があります。これらのユーザーをログインボックスから非表示にするにはどうすればよいですか?


私は追加するかどうか分からないExclude=foobar中で/etc/gdm/gdm.confあなたはそれを試してみましたが、作品?
ウマン

良い質問です、答えは時代遅れかもしれません(メタの議論によると)。
スーフィール

回答:


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ツールがありましたが、最近のいくつかのリリースではUbuntuにはありませんでした。

他の代替方法は、ユーザーのUIDを1000未満に設定することです。これらは、GDM greeterでも除外されるシステムアカウントと見なされます。


afaik、GDMが設定用のプレーンテキストファイルからGconfスキーマに切り替えたため、GUIツールはもう機能しません。
ラッセポールセン

情報ソースラボに感謝します。最近のいくつかのリリースで、同様の理由でいくつかのGUIツールが失われていることに気付きました。
リチャードホロウェイ

29
実際、変更する必要はないと思います/etc/gdm/gdm.schema。代わりに、2行[greeter] Exclude=nobody,qmail-foo,qmail-barをに追加し/etc/gdm/custom.confます。(別にnobodyそのuidが<1000年なので、デフォルトのリスト内の名前はとにかく表示されません。)
ジル「SO-ストップ悪さ」

3
通常、これには1000未満のuidを使用する必要があります。
txwikinger

@RichardHollowayにそのようなファイルが見つかりませんUbuntu 12.04.04、アドバイスをお願いします。
gotqn 14年

56

新しいGDM 3.Xでは、これを除いて古い回答は機能しません。
greeter設定custom.conf廃止されています。つまり、もう機能しません。ユーザーのuidの変更を避けたい場合の簡単な回避策:

  1. ターミナルを開き、次のように入力します(userログイン画面で非表示にするユーザー名に置き換えます)。

    sudo nano /var/lib/AccountsService/users/user
    
  2. ファイルに次を追加します。

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. ユーザーを切り替えるか、ログアウトして、userリストに表示されていないかどうかをテストします。


1
実際、これは私がArchのドキュメントを読んだ後にしたことです。人々がより早くそれを見て、時間を節約するために、この答えは支持されるべきです。
ステファンヴァンデンアッカー

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です。
ジョアンピント

6
このusermod -uオプションは興味深いものです。ホームディレクトリのuidとメールスプール(存在する場合)を自動的に変更します。ただし、ホームディレクトリ以外で所有しているファイルへのアクセスが中断される場合があります。
プーリー

リストを完全に非表示にするには、gdmsetupを実行してチェックボックスを使用することもできます。
ベラク

11

受け入れられた答えに対するGillesのコメントについて詳しく説明すると、これがこれを行うための現在の「ベストプラクティス」(ノームセーフ)方法であると私は信じています。この変更は、Gnomeの「Indicator Applet Session」にも反映されます。

この方法は、GDM Webサイトのドキュメントで提案されている方法であり、サイトとGillesの両方が除外に「nobody」の追加を示していますが、これが実際に必要であることを明確にしたかったですまたはオンラインドキュメントが明示的に提供しています)。再現性を確認するために、10.10システムのいくつかでこれをテストしました。

必要なのは、を1行編集するだけ/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、squidなど)です。

:Gnome / GDM(2.30)の私のバージョンでは、除外エントリに「nobody」がリストされていない場合nobody、user1またはuser2の代わりに偽のログインユーザーが表示されます。

NB#2:UIDが1000未満のアカウントの非表示は、構成可能なパラメーターです。デフォルトでは、MinimalUID値は1000に設定されています。デフォルト設定IncludeAll=trueがそのままで、Includeディレクティブが空でない値に変更されない場合にのみ、GDM greeterは、MinimalUIDより大きいUIDを持つエントリについてpasswdファイルをスキャンします。[除外]リストにない、MinimalUIDを超えるUIDを持つユーザーが表示されます。

リバース設定、つまりInclude=user1,user2custom.confのエントリの設定が提示どおりに機能するかどうかはテストしていません。IncludeAll設定をオーバーライドし、明示的にリストされたユーザーのみを表示する必要があります。


GDMのサイトを参照するために+1。
アーロン

GDMの新しいバージョンではもう機能しません。
ステファンヴァンデンアッカー

2

今週末、スクリプト(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

ここで最も受け入れられている答えは近いが、完全ではないことに同意する必要があります。

私はこの問題を自分でなめただけで、答えは次の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が除外されるため、これにより除外の長い行を作成する必要がなくなります。私は個人的にこの設定をRDP経由でXDMCP(xrdp> vnc-server> xinetd> gdm> gnomeを使用)経由で時々アクセスされる職場の3つの個別のCentOS 6.2サーバーに適用しました。最小限のトレーニングでシステム。

そのすべては、経験の浅いシステム管理者がrootとしてではなく、個人アカウント(おそらくsudoアクセスで)から作業することを最初から学ぶべきであることに同意しますが、そのアカウントで適切に作業する経験があれば害はありませんそうすることで。事前に何をしているかを確認してください。私の他のシステム管理者の場合、Active Directoryサポート用のCentrifyDCをこれらのすべてのシステムに追加し、ユーザーのADセキュリティグループ権限を維持しながらデスクトップセッションにAD-UserIDを使用できるようにシステムを構成しました。しかし、個人的には、これらのサーバーをすべて設計し、Linuxを15年以上使用しているので、物事をスピードアップするためにルートを使用することはないと思います。実際、システムでrootを有効にする傾向があります。sが無効になっているため、そのアカウントを使用して、物事を成し遂げながら追跡することができます。本当に重要なのは、ファイルを変更する前にバックアップコピーを作成することです。これにより、ほとんどの事故を防ぐことができ、システムをアクセスできなくなるような編集を実行した場合にシステムを回復できます(ライブCDから起動して、修正が必要なものを修正します)。

私見、私は「ルートとして決してログインしない」というマントラは、n00bieのシステム管理者を自分自身から保護するために本当にそこにあると信じています。しかし、Linuxの能力レベルに達し、非常に短時間でLinux OSからシステムを設計できるようになり、毎回動作するようになった場合、「rootとしてログインしない」で生きる理由はありません。その時点までに、そのアカウントの使用に伴う責任を処理する準備ができているからです。これは、ADサポートにCentrifyDCを使用する環境で特に当てはまります。「root」がローカルsysadminアカウントになり、(通常)自動的に有効になるためです。そのため、最近の展開で最初に行う作業の1つとして、ルートアカウントのパスワードを設定して設定するのが最善の方法です。承知しました、「自分のIDとしてログインしてからsudoを実行」することはできますが、個人的にはそうする必要はありません。あなたのマイレージは異なる場合があります...


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.