Geçenlerde qmail için ihtiyaç duyduğum birkaç yeni kullanıcı ekledim. Şimdi, giriş ekranındaki kutuda belirip dağınıklık yapıyorlar ve kullanıcımı bulmak için kaydırmalıyım. Bu kullanıcıları giriş kutusundan nasıl gizleyebilirim?
/Etc/gdm/gdm.schema dosyasını düzenleyin, şunun gibi görünen bölümü bulun:
<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>
Ayrıca qmail adlı bir kullanıcıyı dışlamak için, örneğin varsayılan listeye qmail ekleyin, böylece bölüm bu şekilde görünür.
<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>
Bu, kullanıcı qmail’inin gdm selamlayıcısında görünmesini durduracaktır. Bunu yapmak için güzel bir GUI aracı vardı, ancak son birkaç sürümde Ubuntu'da bulunmadı.
Diğer alternatif ise, kullanıcının kullanıcı kimliğini 1000'in altında yapmaktır. Bunlar GDM karşılayıcıda dışlanan sistem hesapları olarak kabul edilir.
Yeni GDM 3.X için eski cevaplar bunun dışında işe yaramıyor custom.conf
içindeki greeter
ayarı eski , yani artık işe yaramaz. Kullanıcının kullanıcı kimliğini değiştirmekten kaçınmak istiyorsanız kolay bir çözüm:
Terminali açıp (user
yerine giriş ekranından gizlemek istediğiniz kullanıcı adı ile değiştir):
Sudo nano /var/lib/AccountsService/users/user
Aşağıdakileri dosyaya ekleyin:
[User]
Language=
XSession=gnome
SystemAccount=true
user
artık listelenip listelenmediğini test etmek için kullanıcıyı değiştirin veya oturumu kapatın.
Hacky ancak kullanıcının kimliğini, listede gösterilmemesi için değiştirebilirsiniz:
Sudo usermod -u 999 <username>
Bu işe yarar çünkü 1000'in altındaki kimliği olan kullanıcılar "sistem" kullanıcıları olarak kabul edilir (yani insanlar değil).
Bildiğim diğer tek yol listeyi tamamen gizlemektir:
Sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
Gilles 'in kabul edilen cevabına yaptığı yorumda, şu anki "en iyi uygulamalar" (Gnome-safe) yönteminin bu olduğuna inanıyorum. Bu değişiklik aynı zamanda Gnome "Gösterge Uygulaması Oturumunda" da yansıtılacaktır.
Bu yöntem, dokümanlardaki GDM web sitesi 'de önerildiği gibi, ve hem site hem de Gilles hariç tutulanlara "hiç kimsenin" eklenmediğini gösterse de, bunun açık olduğundan emin olmak istedim. gerçekten gerekli (manpages veya online docs açıkça sundukları ne rağmen). Bunu tekrarlanabilirliği doğrulamak için birkaç 10,10 sistemde test ettim.
Tek yapmamız gereken tek satırda düzenleme yapmak için /etc/gdm/custom.conf
. Diğer pek çok yöntem (default.conf, gdm.conf, vb. Değişiklik yapmak için) kullanımdan kaldırılmıştır.
Mevcut bir /etc/gdm/custom.conf
varsa, bu dosyayı düzenleyin. Aksi takdirde, örnek dosyaya kopyalayın:
Sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf
/etc/gdm/custom.conf
öğesinin [Greeter] bölümünde, şunu ekleyin:
Exclude=user1,user2,nobody
"User1" ve "user2", GDM "yüz tarayıcısında" göstermek istemediğiniz kullanıcı adları veya kullanıcı dosya girişleridir (örneğin, qmail, kalamar vb.).
Not : Gnome/GDM (2.30) sürümümde, Hariç Tut girişinde listelenen "hiç kimse" yoksa, sahte bir giriş kullanıcısı olacaktır. nobody
ortaya çıkıyor user1 veya user2 yerine.
N.B. # 2 : 1000'in altındaki UID hesaplarının gösterilmemesi yapılandırılabilir bir parametredir. Varsayılan olarak, MinimalUID
değeri 1000 olarak ayarlanmıştır. Yalnızca ve varsayılan ayar IncludeAll=true
yerinde bırakılmışsa ve Include
yönergesi boş olmayan bir değere değiştirilmezse, GDM karşılama dosyası passwd dosyasını tarar. UID ile MinimalUID'den büyük girişler. UID'sinin, Dışlama listesinde olmayan MinimalUID'nin üstünde olan kullanıcılar görüntülenir.
Ters ayar, yani, custom.conf içindeki bir Include=user1,user2
girişi ayarının sunulduğu gibi çalışıp çalışmadığını test etmedim. IncludeAll
ayarını geçersiz kılmalı ve yalnızca açıkça listelenen kullanıcıları göstermelidir.
Bu haftasonu bir senaryo (gdm-greeter) yazdım. CentOS 6.2'de iyi çalışıyor, Ubuntu için faydalı olup olmayacağını merak ediyorum?
#!/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
Buradaki en çok kabul edilen cevabın yakın, ancak henüz ölü olmadığı konusunda hemfikir olmalıyım.
Ben sadece bu sorunu kendim yaladım ve benim için cevap şu gdm.schema girişini değiştirmek oldu:
(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>
Bunun etkisi, tüm kullanıcıları listelemenin devre dışı bırakılmasıdır; orijinal soruyu doğru yorumluyorsam, aslında OP'nin (gruszczy) yapmayı düşündüğü şey budur. Bu, UID numarasına bakılmaksızın tüm kullanıcı kimlikleri, bu ayar değiştirildiğinde bir kez hariç tutulduğundan, uzun bir hariç tutma satırı oluşturma gereksinimini ortadan kaldırır. Bu ayarı şahsen ben XDMCP (xrdp> vnc-server> xinetd> gdm> gnome kullanarak) RDP üzerinden zaman zaman erişilen işyerindeki 3 ayrı CentOS 6.2 sunucusuna uygulamıştım. asgari eğitim almış sistemler.
Bunların hepsi, deneyimsiz bir sysadmin'in başlangıçtan itibaren kökten ziyade kişisel bir hesaptan (belki Sudo erişimi olan) çalışmayı öğrenmesi gerektiği konusunda hemfikir olmama rağmen, söz konusu hesapla düzgün çalışabilme deneyiminiz varsa Bunu yaparken. Sadece elden önce ne yaptığını bildiğinden emin ol. Diğer sistem yöneticilerimde, bu sistemlerin tümüne Active Directory desteği için CentrifyDC'yi ekledim ve sistemleri, AD-Kullanıcı Adları, kullanıcının AD Güvenlik Grubu haklarını koruyarak masaüstü oturumları için kullanılabilecek şekilde yapılandırdım. Ancak şahsen, bu sunucuların hepsini tasarladığım ve 15 yıldan fazla bir süredir Linux kullandığım için, işleri hızlandırmak için kök kullanmanın hiçbir şey olmadığını düşünüyorum. Aslında, devre dışı bırakıldığı sistemlerde, bu hesabı kullanabilmem ve işleri halledebilmem için kovalamacayı kesebilmeyi sağlama eğilimindeyim. Buradaki asıl şey, gerçekten, değiştirmeden önce herhangi bir dosyanın yedek kopyasını oluşturmayı alışkanlık haline getirmektir. Bu, en çok aksiliklere karşı güvenli bir koruma sağlar ve aksi takdirde sistemin erişilememesine neden olacak bir düzenleme yaparsanız sistemi kurtarmanıza izin verir (yalnızca canlı bir CD'ye önyükleyin ve düzeltilmesi gerekenleri düzeltin).
IMHO, “asla root olarak giriş yapmaz” mantrasının, n00bie sistem yöneticilerini kendisinden korumak için gerçekten orada olduğuna inanıyorum. Ancak, Linux ile herhangi bir Linux işletim sisteminden çok kısa bir sürede bir sistemi kurabileceğiniz ve her zaman çalıştığı noktaya kadar bir yetkinlik seviyesine ulaşırsanız ve o zaman 'hiçbir zaman root olarak giriş yapmamanız' için hiçbir neden yoktur. mantra, çünkü o noktadan sonra, bu hesabı kullanmanın beraberinde getirdiği sorumluluğu üstlenmeye hazırsınız. Bu özellikle AD desteği için CentrifyDC kullanan ortamlarda geçerlidir, çünkü 'root' yerel sysadmin hesabı olur ve (genellikle) otomatik olarak etkinleştirilir. Bu yüzden, kovalamaca kesmeyi ve kök hesabın şifresini ayarlamayı, günümüzde herhangi bir dağıtımda yaptığım ilk görevlerden biri olarak yapmayı en iyi buluyorum. Tabii ki, tüm 'kendi kimliğim olarak giriş yapıp ardından Sudo up' yapabilirim, ama şahsen ben böyle şeyler yapma gereği duymuyorum. Kendi kilometreniz değişebilir ...
Örneğin, değiştirin:
# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash
# To
example:x:2001:2001:Example User,,,:/home/example:
Ekran yöneticimi yeniden başlattım ve bunun etkili olduğunu gözlemledim.
Sudo service lightdm restart
# (or gdm, mdm, ...)
Bunu, kullanıcıların görüntü yöneticisi giriş selamlayıcısında neden gizlendiğinin nedeni olarak tanımlamak haftalar sürdü./Var/lib/AccountService/kullanıcıların MDM tarafından göz ardı edildiği ve tahminen GDM olduğu da açıktır. /Etc/mdm/mdm.conf içinde Exclude=user1,user2
altına Include=user3
veya _ [greeter]
eklemek ya da bir /etc/mdm/custom.conf oluşturmaya kadar gitmedim. , başka bir kutu olarak useradd
aracılığıyla eklenen kullanıcıları gizliyordu, ancak adduser
ile eklenen kullanıcılar gösteriliyordu. Giriş Kabuğunu/bin/false olarak ayarlamak, hala kullanmak istediğim kullanıcının girişini reddeder. Ancak, kullanıcının erişemeyeceği düzlükte olmasını istiyorsanız, kullanıcıyı giriş ekranında da gizler.