답변:
/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 도구가 있었지만 지난 몇 가지 릴리스에서는 우분투에 없었습니다.
다른 대안은 사용자의 UID를 1000 미만으로 설정하는 것입니다.이 계정은 GDM 인사말에서 제외 된 시스템 계정으로 간주됩니다.
/etc/gdm/gdm.schema
. 대신에 두 줄 [greeter]
Exclude=nobody,qmail-foo,qmail-bar
을 추가하십시오 /etc/gdm/custom.conf
. (을 제외 nobody
하고 기본 목록의 이름은 uid가 <1000이므로 어쨌든 표시되지 않습니다.)
Ubuntu 12.04.04
조언이 있습니까?
새로운 GDM의 3.X의 경우, 기존 답변이 하나를 제외하고, 작동하지 않습니다 의 설정 입니다 쓸모 가 더 이상 작동하지 않습니다 즉. 사용자의 UID를 변경하지 않으려는 경우 한 가지 쉬운 해결 방법 :greeter
custom.conf
터미널을 열고 다음을 입력하십시오 ( 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-safe) 방법이라고 생각합니다. 이 변경 사항은 Gnome "Indicator Applet Session"에도 반영됩니다.
이 방법은 GDM 웹 사이트 의 문서에서 제안 된 방법이며 사이트와 Gilles 모두 제외에 "아무도 없음"을 추가했지만 실제로 이것이 필요하다는 것을 분명히하고 싶었습니다 (맨 페이지가 무엇인지에도 불구하고) 또는 온라인 문서는 명시 적으로 제공합니다). 반복성을 확인하기 위해 두 개의 10.10 시스템에서 이것을 테스트했습니다.
우리가해야 할 일은 한 줄로 편집하는 것 /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, 오징어 등)입니다.
참고 : 내 Gnome / GDM (2.30) 버전에서 제외 항목에 "아무도 없음"이 없으면 사용자 로그인 사용자 nobody
가 사용자 1 또는 사용자 2 대신 표시됩니다.
NB # 2 : UID가 1000 미만인 계정의 비 표시는 구성 가능한 매개 변수입니다. 기본적으로 MinimalUID
값은 1000으로 설정됩니다. 기본 설정 IncludeAll=true
이 그대로 유지되고 Include
지시문이 비어 있지 않은 값으로 변경되지 않은 경우에만 GDM greeter는 UID가 MinimalUID보다 큰 항목에 대해 암호 파일을 스캔합니다. 그런 다음 제외 목록에없는 UID 이상의 MinimalUID를 가진 사용자가 표시됩니다.
리버스 설정, 즉 Include=user1,user2
custom.conf에 항목 을 설정하면 제시된대로 작동 하는지 테스트하지 않았습니다 . IncludeAll
설정을 무시하고 명시 적으로 나열된 사용자 만 표시해야합니다.
이번 주말에 스크립트 (gdm-greeter)를 작성했습니다. CentOS 6.2에서 잘 작동합니다. 우분투에 유용할까요?
#!/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 번호에 관계없이 모든 userID가 제외되므로 긴 제외 행을 작성하지 않아도됩니다. RDP를 통해 XDMCP를 통해 (xrdp> vnc-server> xinetd> gdm> gnome을 사용하여) 가끔 액세스하는 3 개의 별도 CentOS 6.2 서버에이 설정을 개인적으로 적용하여 경험이 적은 Linux 관리자가 최소한의 훈련으로 시스템.
나는 경험이없는 sysadmin이 처음부터 루트가 아닌 개인 계정 (수도 액세스 가능)에서 배우는 법을 배워야한다는 데 동의하지만, 해당 계정으로 올바르게 작업 한 경험이 있다면 아무런 해가 없습니다 이 과정에서. 미리 무엇을하고 있는지 확인하십시오. 다른 sysadmins의 경우 Active Directory 지원을위한 CentrifyDC를 이러한 모든 시스템에 추가하고 사용자의 AD 보안 그룹 권한을 유지하면서 데스크톱 세션에 AD-UserID를 사용할 수 있도록 시스템을 구성했습니다. 그러나 개인적으로, 나는이 모든 서버를 설계하고 현재 15 년 이상 Linux를 사용해 왔기 때문에 루트를 사용하여 속도를 높이는 것은 아무 것도 생각하지 않습니다. 사실, 나는 그것이있는 시스템에서 루트를 활성화하는 경향이 있습니다. 그 계정을 사용하고 일을 끝내면서 추격을자를 수 있도록 비활성화되었습니다. 실제로 중요한 것은 파일을 변경하기 전에 파일의 백업 복사본을 만드는 습관을 만드는 것입니다. 이렇게하면 대부분의 실수를 방지 할 수 있으며 시스템을 액세스 할 수 없게하는 편집을 수행 할 경우 시스템을 복구 할 수 있습니다 (라이브 CD로 부팅하고 수정해야 할 사항을 수정하기 만하면 됨).
IMHO, 나는 'never login as root'라는 만트라가 실제로 n00bie 시스템 관리자를 보호하기 위해 존재한다고 생각합니다. 그러나 Linux OS에서 시스템을 매우 짧은 시간 안에 엔지니어링 할 수있는 수준까지 Linux와의 역량 수준에 도달하고 매번 작동한다면 '루트로 로그인하지 마십시오'라는 이유가 없습니다. 그 시점까지는 해당 계정을 사용하는 데 따른 책임을 처리 할 준비가 되었기 때문에 만트라가 있습니다. 'root'는 로컬 sysadmin 계정이되며 일반적으로 자동으로 활성화되므로 AD 지원을 위해 CentrifyDC를 사용하는 환경에서 특히 그렇습니다. 따라서 추적을 줄이고 루트 계정 암호 설정을 요즘 배포에서 수행하는 첫 번째 작업 중 하나로 만드는 것이 가장 좋습니다. 확실한, 나는 '내 자신의 ID로 로그인 한 다음 sudo up'을 할 수는 있지만 개인적으로 그렇게 할 필요는 없다고 생각합니다. 자신의 마일리지는 다를 수 있습니다 ...
예를 들어, 다음을 변경하십시오.
# 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
작품, 당신이 그것을 시도?