web-dev-qa-db-ja.com

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

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

64
gruszczy

ファイル/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でも除外されるシステムアカウントと見なされます。

30

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

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

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

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

55
miceagol

ハッキーですが、ユーザーIDを変更してリストに表示されないようにすることができます。

Sudo usermod -u 999 <username>

IDが1000未満のユーザーは「システム」ユーザー(つまり、人間ではない)と見なされるため、これは機能します。

私が知っている他の唯一の方法は、リストを完全に隠すことです:

Sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
13
Oli

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

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

必要なことは、/etc/gdm/custom.confを1行編集するだけです。他のほとんどの方法(default.conf、gdm.confなどに変更を加える)は非推奨です。

既存の/etc/gdm/custom.confがある場合は、そのファイルを編集します。それ以外の場合、サンプルファイルをコピーします。

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

/etc/gdm/custom.confの[Greeter]セクションで、次を追加します。

Exclude=user1,user2,nobody

ここで、「user1」および「user2」は、GDM「face browser」に表示したくないユーザー名またはpasswdファイルのエントリ(qmail、squidなど)です。

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

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

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

11
belacqua

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

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

私はこの問題を自分でなめただけで、答えは次の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を有効にする傾向があるのは、そのアカウントを使用して、物事を成し遂げながら追跡するためです。本当に重要なのは、ファイルを変更する前にバックアップコピーを作成する習慣をつけることです。これにより、ほとんどの事故を防ぐことができ、システムにアクセスできなくなるような編集を実行した場合にシステムを回復できます(ライブCDから起動して、修正が必要なものを修正します)。

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

2
StygianAgenda

/ 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も同様です。 /etc/mdm/mdm.confのExclude=user1,user2の下にInclude=user3または[greeter]を追加したり、/ etc/mdm/custom.confを作成したりしませんでした。 、別のボックスがuseraddを介して追加されたユーザーを非表示にしていたため、adduserを使用して追加されたユーザーが表示されました。ログインシェルを/ bin/falseに設定すると、そのユーザーへのすべてのログインが拒否されます。ただし、そのユーザーをアクセスできないようにする場合は、ログイン画面でユーザーを非表示にします。

0
ThorSummoner