Ostatnio dodałem kilku nowych użytkowników, których potrzebuję do qmaila. Teraz pojawiają się w polu na ekranie logowania i zaśmiecają je, a ja muszę przewinąć, aby znaleźć mojego użytkownika. Jak mogę ukryć tych użytkowników przed polem logowania?
Ostatnio dodałem kilku nowych użytkowników, których potrzebuję do qmaila. Teraz pojawiają się w polu na ekranie logowania i zaśmiecają je, a ja muszę przewinąć, aby znaleźć mojego użytkownika. Jak mogę ukryć tych użytkowników przed polem logowania?
Odpowiedzi:
Edytuj plik /etc/gdm/gdm.schema znajdź sekcję, która obecnie wygląda następująco:
<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>
Aby wykluczyć użytkownika o nazwie qmail, na przykład dodaj qmail do domyślnej listy, aby sekcja wyglądała tak.
<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>
Zapobiegnie to pojawianiu się qmaila przez użytkownika w gdm greeter. Było do tego ładne narzędzie GUI, ale nie było go w Ubuntu od kilku ostatnich wydań.
Inną alternatywą jest ustawienie UID użytkownika na mniej niż 1000. Są one uważane za konta systemowe, które są również wykluczone w programie GDM.
/etc/gdm/gdm.schema
. Zamiast tego dodaj dwie linie [greeter]
Exclude=nobody,qmail-foo,qmail-bar
do /etc/gdm/custom.conf
. (Poza nobody
tym nazwy na domyślnej liście i tak nie pojawią się, ponieważ ich identyfikator użytkownika wynosi <1000.)
Ubuntu 12.04.04
, czy mógłbyś doradzić?
W nowszych wersjach GDM 3.X stare odpowiedzi nie działają, z wyjątkiem tego
. greeter
Ustawienie custom.conf
jest przestarzałe , tzn. Nie będzie już działać. Jedno łatwe obejście, jeśli chcesz uniknąć zmiany identyfikatora użytkownika:
Otwórz terminal i wprowadź (zamień user
na nazwę użytkownika, którą chcesz ukryć na ekranie logowania):
sudo nano /var/lib/AccountsService/users/user
Dodaj do pliku:
[User]
Language=
XSession=gnome
SystemAccount=true
Przełącz użytkownika lub wyloguj się, aby sprawdzić, czy user
nie ma go już na liście.
Hacky, ale możesz zmodyfikować identyfikator użytkownika, aby nie pojawiał się na liście:
sudo usermod -u 999 <username>
Działa to, ponieważ użytkownicy o identyfikatorze poniżej 1000 są uważani za użytkowników „systemowych” (tj. Nie ludzi).
Jedyny znany mi sposób to całkowite ukrycie listy:
sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
usermod -u
opcja jest interesująca: automatycznie zmienia identyfikator użytkownika w katalogu domowym i bufor buforowania poczty (jeśli istnieje), aby dopasować. Może to jednak spowodować utratę dostępu do plików, które posiadają poza katalogiem macierzystym.
Opracowując komentarz Gillesa do zaakceptowanej odpowiedzi, oto, co moim zdaniem, jest obecny sposób „najlepszych praktyk” (bezpieczny dla Gnome). Ta zmiana zostanie również odzwierciedlona w Gnome „Sesja apletu wskaźnika”.
Ta metoda jest sugerowana w dokumentacji na stronie GDM i chociaż zarówno witryna, jak i Gilles pokazują dodanie „nikt” do wykluczenia, chciałem upewnić się, że było jasne, że jest to rzeczywiście konieczne (pomimo tego, co strony lub dokumenty online wyraźnie oferują). Przetestowałem to na kilku systemach 10.10, aby zweryfikować powtarzalność.
Wszystko, co musimy zrobić, to dokonać edycji w jednym wierszu /etc/gdm/custom.conf
. Większość innych metod (wprowadzanie zmian do default.conf, gdm.conf itp.) Jest przestarzała.
Jeśli masz /etc/gdm/custom.conf
, edytuj ten plik. W przeciwnym razie skopiuj plik przykładowy:
sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf
W sekcji [Greeter] /etc/gdm/custom.conf
dodaj:
Exclude=user1,user2,nobody
Gdzie „użytkownik1” i „użytkownik2” to nazwy użytkowników lub wpisy plików passwd (np. Qmail, kałamarnica itp.), Których nie chcesz wyświetlać w „przeglądarce twarzy” GDM.
Uwaga : Jeśli w mojej wersji Gnome / GDM (2.30) nie ma wpisu „nikt” na liście Wyklucz, pojawi się fałszywy login użytkownika nobody
zamiast użytkownika 1 lub użytkownika 2.
Uwaga 2 : Brak wyświetlania kont o UID poniżej 1000 jest parametrem konfigurowalnym. Domyślnie MinimalUID
wartość jest ustawiona na 1000. Jeśli i tylko wtedy, gdy ustawienie domyślne IncludeAll=true
pozostanie na miejscu, a Include
dyrektywa nie zostanie zmieniona na niepustą wartość, program powitalny GDM skanuje plik passwd w poszukiwaniu wpisów o UID większym niż MinimalUID. Następnie wyświetlani są użytkownicy o UID powyżej MinimalUID, których nie ma na liście Wykluczeń.
Nie testowałem, czy ustawienie odwrotne, a mianowicie ustawienie Include=user1,user2
pozycji w pliku custom.conf będzie działać tak, jak przedstawiono. Powinien zastąpić dowolne IncludeAll
ustawienie i wyświetlać tylko wyraźnie wymienionych użytkowników.
W ten weekend napisałem skrypt (gdm-greeter). Działa dobrze na CentOS 6.2, zastanawiam się, czy będzie przydatny dla 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
Muszę się zgodzić, że najbardziej akceptowana tutaj odpowiedź jest bliska, ale nie martwa.
Właśnie wylizałem ten problem, a odpowiedzią dla mnie była zmiana następującego wpisu 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>
Skutkuje to tym, że cała lista użytkowników jest wyłączona, co jeśli właściwie interpretuję oryginalne pytanie, jest właśnie tym, co OP (gruszczy) zamierzał zrobić. Eliminuje to potrzebę tworzenia długiej linii wykluczeń, ponieważ wszystkie identyfikatory użytkowników niezależnie od numeru UID są wykluczane, niezależnie od zmiany tego ustawienia. Osobiście zastosowałem to ustawienie do 3 oddzielnych działających serwerów CentOS 6.2, do których czasami można uzyskać dostęp za pośrednictwem XDMCP (za pomocą xrdp> vnc-server> xinetd> gdm> gnome) przez RDP, co pozwala niektórym z naszych mniej doświadczonych administratorów Linuksa na pracę nad tymi systemy z minimalnym przeszkoleniem.
Wszystko to powiedziało, chociaż zgadzam się, że niedoświadczony sysadmin powinien od początku uczyć się pracy z konta osobistego (być może z dostępem do sudo), a nie jako root, jeśli masz doświadczenie w prawidłowej pracy z tym kontem, nie zaszkodzi w ten sposób. Po prostu upewnij się, że wiesz, co robisz wcześniej. W przypadku moich innych sysadminów dodałem obsługę CentrifyDC dla Active Directory do wszystkich tych systemów i skonfigurowałem systemy tak, aby identyfikatory AD-UserID mogły być używane do sesji pulpitu przy jednoczesnym zachowaniu uprawnień AD Security Group. Ale osobiście, odkąd zaprojektowałem wszystkie te serwery i korzystam z Linuksa od ponad 15 lat, nie myślę o używaniu roota do przyspieszenia. W rzeczywistości włączam rootowanie w systemach, w których „ zostały wyłączone tylko po to, abym mógł korzystać z tego konta i przejść do sedna z robieniem rzeczy. Najważniejsze jest, aby po prostu stworzyć nawyk tworzenia kopii zapasowej dowolnego pliku przed jego zmianą. Pozwoli to zabezpieczyć się przed większością nieszczęść i pozwoli przywrócić system, jeśli wykonasz edycję, która w innym przypadku spowodowałaby, że system stałby się niedostępny (wystarczy uruchomić dysk CD na żywo i naprawić to, co należy naprawić).
IMHO, wierzę, że mantra „nigdy nie loguj się jako root” jest naprawdę po to, by chronić sysadminów n00bie przed sobą. Ale jeśli osiągniesz poziom kompetencji z Linuksem do tego stopnia, że możesz zaprojektować system z dowolnego systemu operacyjnego Linux w bardzo krótkim czasie i będzie on działał za każdym razem, nie ma powodu, aby żyć według zasady „nigdy nie loguj się jako root” mantra, ponieważ do tego momentu jesteś gotowy do podjęcia odpowiedzialności związanej z korzystaniem z tego konta. Jest to szczególnie prawdziwe w środowiskach korzystających z CentrifyDC do obsługi AD, ponieważ „root” staje się lokalnym kontem sysadmin i (zazwyczaj) jest włączany automatycznie. Dlatego uważam, że najlepiej przejść do sedna i ustawić hasło konta root jako jedno z pierwszych zadań, które wykonuję obecnie przy każdym wdrożeniu. Pewnie, Mógłbym zrobić całe „logowanie jako mój własny identyfikator, a potem sudo w górę”, ale osobiście nie czuję potrzeby robienia tego w ten sposób. Twój własny przebieg może się różnić ...
Na przykład zmień:
# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash
# To
example:x:2001:2001:Example User,,,:/home/example:
Uruchomiłem ponownie menedżera ekranu i zauważyłem, że to działa.
sudo service lightdm restart
# (or gdm, mdm, ...)
Zidentyfikowanie tego jako przyczyny, dla której użytkownicy byli ukryci w oknie logowania menedżera wyświetlania, zajęło mi tygodnie. Oczywiste jest, że / var / lib / AccountService / users jest ignorowany przez MDM, a przypuszczalnie także GDM. Nie posunąłem się tak daleko, aby dodać Exclude=user1,user2
lub Include=user3
pod / [greeter]
w /etc/mdm/mdm.conf, ani nie utworzyć /etc/mdm/custom.conf, ponieważ inne okno ukrywało dodawanie użytkowników w useradd
porządku, podczas gdy użytkownicy dodane z adduser
zostały pokazane. Ustawienie powłoki logowania na / bin / false blokuje wszelkie logowanie do tego użytkownika, którego nadal chcę su. Ale to również ukrywa użytkownika na ekranie logowania, jeśli chcesz, aby ten użytkownik był po prostu niedostępny.
Exclude=foobar
w/etc/gdm/gdm.conf
pracach, próbowałeś?