最近、qmailに必要な新しいユーザーをいくつか追加しました。これで、ログイン画面のボックスに表示されて混乱し、ユーザーを見つけるためにスクロールする必要があります。これらのユーザーをログインボックスから非表示にするにはどうすればよいですか?
ファイル/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でも除外されるシステムアカウントと見なされます。
新しいGDM 3.Xでは、これを除いて古い回答は機能しませんcustom.conf
のgreeter
設定は 廃止 です。つまり、もう機能しません。ユーザーのuidの変更を避けたい場合の簡単な回避策:
ターミナルを開き、次を入力します(user
をログイン画面で非表示にするユーザー名に置き換えます):
Sudo nano /var/lib/AccountsService/users/user
ファイルに次を追加します。
[User]
Language=
XSession=gnome
SystemAccount=true
ユーザーを切り替えるか、ログアウトして、user
がリストされていないかどうかをテストします。
ハッキーですが、ユーザーIDを変更してリストに表示されないようにすることができます。
Sudo usermod -u 999 <username>
IDが1000未満のユーザーは「システム」ユーザー(つまり、人間ではない)と見なされるため、これは機能します。
私が知っている他の唯一の方法は、リストを完全に隠すことです:
Sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
受け入れられた答えに対する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
設定をオーバーライドし、明示的にリストされたユーザーのみを表示する必要があります。
今週末、スクリプト(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
ここで最も受け入れられている答えは近いが、行き詰まっていないことに同意する必要があります。
私はこの問題を自分でなめただけで、答えは次の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を起動する」ことができますが、個人的にはそのようにする必要はありません。あなたのマイレージは異なる場合があります...
たとえば、変更します。
# 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に設定すると、そのユーザーへのすべてのログインが拒否されます。ただし、そのユーザーをアクセスできないようにする場合は、ログイン画面でユーザーを非表示にします。