回答:
ファイル/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でも除外されるシステムアカウントと見なされます。
/etc/gdm/gdm.schema
。代わりに、2行[greeter]
Exclude=nobody,qmail-foo,qmail-bar
をに追加し/etc/gdm/custom.conf
ます。(別にnobody
そのuidが<1000年なので、デフォルトのリスト内の名前はとにかく表示されません。)
Ubuntu 12.04.04
、アドバイスをお願いします。
新しいGDM 3.Xでは、これを除いて古い回答は機能しません。
のgreeter
設定custom.conf
は廃止されています。つまり、もう機能しません。ユーザーのuidの変更を避けたい場合の簡単な回避策:
ターミナルを開き、次のように入力します(user
ログイン画面で非表示にするユーザー名に置き換えます)。
sudo nano /var/lib/AccountsService/users/user
ファイルに次を追加します。
[User]
Language=
XSession=gnome
SystemAccount=true
ユーザーを切り替えるか、ログアウトして、user
リストに表示されていないかどうかをテストします。
ハッキーですが、ユーザーIDを変更してリストに表示されないようにすることができます。
sudo usermod -u 999 <username>
これは、1000未満のIDを持つユーザーは「システム」ユーザー(つまり、人間ではない)と見なされるため機能します。
私が知っている他の唯一の方法は、リストを完全に隠すことです:
sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
usermod -u
オプションは興味深いものです。ホームディレクトリのuidとメールスプール(存在する場合)を自動的に変更します。ただし、ホームディレクトリ以外で所有しているファイルへのアクセスが中断される場合があります。
受け入れられた答えに対する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,user2
custom.confのエントリの設定が提示どおりに機能するかどうかはテストしていません。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を有効にする傾向があります。sが無効になっているため、そのアカウントを使用して、物事を成し遂げながら追跡することができます。本当に重要なのは、ファイルを変更する前にバックアップコピーを作成することです。これにより、ほとんどの事故を防ぐことができ、システムをアクセスできなくなるような編集を実行した場合にシステムを回復できます(ライブ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も同様です。私は追加する限り行かなかったExclude=user1,user2
か、Include=user3
下を[greeter]
別の箱に隠れていたユーザーが経由追加として、/etc/mdm/mdm.confに、または/etc/mdm/custom.confを作成するuseradd
だけで罰金のユーザーが、が追加adduser
されました。ログインシェルを/ bin / falseに設定すると、そのユーザーへのすべてのログインが拒否されます。ただし、そのユーザーをアクセスできないようにする場合は、ログイン画面でユーザーを非表示にします。
Exclude=foobar
中で/etc/gdm/gdm.conf
あなたはそれを試してみましたが、作品?