ฉันเพิ่งเพิ่มผู้ใช้ใหม่หลายคนที่ฉันต้องการสำหรับ qmail ตอนนี้พวกเขาปรากฏในกล่องในหน้าจอเข้าสู่ระบบและถ่วงและฉันต้องเลื่อนเพื่อค้นหาผู้ใช้ของฉัน ฉันจะซ่อนผู้ใช้เหล่านั้นจากกล่องเข้าสู่ระบบได้อย่างไร
ฉันเพิ่งเพิ่มผู้ใช้ใหม่หลายคนที่ฉันต้องการสำหรับ 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>
ที่จะหยุดผู้ใช้ qmail ปรากฏใน gdm greeter เคยมีเครื่องมือ GUI ที่ดีในการทำเช่นนี้ แต่ไม่ได้อยู่ใน Ubuntu สำหรับรุ่นล่าสุด
อีกทางเลือกหนึ่งคือการตั้งค่า UID ของผู้ใช้ให้ต่ำกว่า 1,000 รายการซึ่งถือว่าเป็นบัญชีระบบที่ไม่รวมอยู่ใน GDM greeter เช่นกัน
/etc/gdm/gdm.schema
อันที่จริงผมไม่คิดว่าคุณควรแก้ไข แทนที่จะเพิ่มสองบรรทัดที่จะ[greeter]
Exclude=nobody,qmail-foo,qmail-bar
/etc/gdm/custom.conf
(นอกเหนือจากnobody
ชื่อในรายการเริ่มต้นจะไม่ปรากฏขึ้นเพราะ uid ของพวกเขาคือ <1,000.)
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>
สิ่งนี้ทำงานได้เนื่องจากผู้ใช้ที่มี ID ต่ำกว่า 1,000 ถือว่าเป็นผู้ใช้ "ระบบ" (เช่นไม่ใช่มนุษย์)
วิธีเดียวที่ฉันรู้ก็คือการซ่อนรายการทั้งหมด:
sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'
usermod -u
ตัวเลือกที่น่าสนใจ: มันจะเปลี่ยน UID ในไดเรกทอรีบ้านและระวิงอีเมล (ถ้ามี) เพื่อให้ตรงกับ อย่างไรก็ตามมันอาจทำลายการเข้าถึงไฟล์ใด ๆ ที่พวกเขาเป็นเจ้าของนอกไดเรกทอรีหลักของพวกเขา
อธิบายอย่างละเอียดเกี่ยวกับความคิดเห็นของGillesต่อคำตอบที่ยอมรับได้นี่คือสิ่งที่ฉันเชื่อว่าเป็นวิธี "ปฏิบัติที่ดีที่สุด" ในปัจจุบัน (Gnome-safe) วิธีทำสิ่งนี้ การเปลี่ยนแปลงนี้จะปรากฏใน Gnome "ตัวบ่งชี้แอปเพล็ตเซสชัน"
วิธีนี้เป็นวิธีที่แนะนำในเอกสารที่เว็บไซต์ GDMและแม้ว่าทั้งเว็บไซต์และ Gilles จะแสดงการเพิ่ม "ไม่มีใคร" ลงในการยกเว้นฉันต้องการให้แน่ใจว่าชัดเจนว่านี่เป็นสิ่งจำเป็นจริง ๆ (แม้จะเป็น manpages หรือเอกสารออนไลน์ให้อย่างชัดเจน) ฉันได้ทำการทดสอบกับสองระบบ 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" เป็นชื่อผู้ใช้หรือรายการไฟล์ passwd (เช่น qmail, squid และอื่น ๆ ) ที่คุณไม่ต้องการแสดงใน GDM "face browser"
หมายเหตุ : ภายใต้รุ่น Gnome / GDM (2.30) ของฉันหากคุณไม่มี "ไม่มีใคร" อยู่ในรายการยกเว้นคุณจะมีผู้ใช้เข้าสู่ระบบปลอมnobody
ปรากฏขึ้นแทน user1 หรือ user2
หมายเหตุ # 2 : การไม่แสดงบัญชีที่มี UID ต่ำกว่า 1,000 รายการเป็นพารามิเตอร์ที่กำหนดค่าได้ โดยค่าเริ่มต้นMinimalUID
ค่าจะถูกตั้งไว้ที่ 1,000 ถ้าหากการตั้งค่าเริ่มต้นIncludeAll=true
ถูกทิ้งไว้และInclude
คำสั่งจะไม่เปลี่ยนเป็นค่าที่ไม่ว่างเปล่า GDM greeter สแกนไฟล์ passwd สำหรับรายการที่มี UID มากกว่า MinimalUID ผู้ใช้ที่มี UID ข้างต้น MinimalUID ที่ไม่ได้อยู่ในรายการยกเว้นจะปรากฏขึ้น
ฉันยังไม่ได้ทดสอบว่าการตั้งค่าย้อนกลับคือการตั้งค่า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) ตั้งใจจะทำ สิ่งนี้ช่วยลดความจำเป็นในการสร้างการแยกบรรทัดที่ยาวเนื่องจาก userID ทั้งหมดที่ไม่คำนึงถึงหมายเลข UID จะถูกแยกออกโดยไม่คำนึงถึงเมื่อมีการเปลี่ยนแปลงการตั้งค่านี้ ฉันได้ใช้การตั้งค่านี้เป็นการส่วนตัวกับเซิร์ฟเวอร์ CentOS 6.2 3 แห่งในที่ทำงานซึ่งเข้าถึงได้เป็นครั้งคราวผ่าน XDMCP (โดยใช้ xrdp> vnc-server> xinetd> gdm> gnome) ผ่าน RDP ซึ่งช่วยให้ผู้ดูแลระบบ Linux ที่มีประสบการณ์น้อยของเรา ระบบที่มีการฝึกอบรมน้อยที่สุด
จากที่กล่าวมาทั้งหมดในขณะที่ฉันยอมรับว่าระบบดูแลระบบที่ไม่มีประสบการณ์ควรเรียนรู้ตั้งแต่เริ่มต้นเพื่อทำงานจากบัญชีส่วนตัว (อาจเข้าถึง sudo) แทนที่จะเป็นรูทหากคุณมีประสบการณ์ในการทำงานกับบัญชีนั้นอย่างถูกต้องจะไม่มีอันตรายใด ๆ ในการทำเช่นนั้น. เพียงให้แน่ใจว่าคุณรู้ว่าสิ่งที่คุณทำก่อนมือ ในกรณีของ sysadmins อื่น ๆ ฉันได้เพิ่ม CentrifyDC สำหรับ Active Directory ให้กับระบบเหล่านี้ทั้งหมดและกำหนดค่าระบบเพื่อให้ AD-UserID สามารถใช้สำหรับเซสชันเดสก์ทอปในขณะที่รักษาสิทธิ์ AD Security Group ของผู้ใช้ แต่โดยส่วนตัวเนื่องจากฉันออกแบบเซิร์ฟเวอร์ทั้งหมดเหล่านี้และใช้ Linux มานานกว่า 15 ปีแล้วฉันจึงไม่คิดว่าจะใช้รูทเพื่อเร่งความเร็วสิ่งต่าง ๆ ในความเป็นจริงฉันมักจะเปิดใช้งานรูทบนระบบที่มัน ' ถูกปิดการใช้งานเพื่อให้ฉันสามารถใช้บัญชีนั้นและตัดการไล่ล่าด้วยการทำสิ่งต่าง ๆ ให้สำเร็จ สิ่งที่สำคัญจริง ๆ ก็คือการสร้างนิสัยในการสร้างสำเนาสำรองของไฟล์ใด ๆ ก่อนที่จะทำการเปลี่ยนแปลง สิ่งนี้จะปลอดภัยจากอุบัติเหตุส่วนใหญ่และช่วยให้คุณสามารถกู้คืนระบบได้หากคุณทำการแก้ไขที่อาจทำให้ระบบไม่สามารถเข้าถึงได้ (เพียงแค่บูตเข้าสู่ซีดีสดและแก้ไขสิ่งที่ต้องแก้ไข)
IMHO ฉันเชื่อว่ามนต์ของ 'ไม่เคยเข้าสู่ระบบในฐานะที่เป็นราก' จริงๆมีเพียงเพื่อป้องกัน nysbie sysadmins จากตัวเอง แต่ถ้าคุณมีความสามารถในระดับสูงด้วย Linux จนถึงจุดที่คุณสามารถสร้างระบบจากระบบปฏิบัติการ Linux ใด ๆ ในระยะเวลาอันสั้นและทำงานได้ทุกครั้งดังนั้นจึงไม่มีเหตุผลที่จะมีชีวิตอยู่โดย มนต์เพราะ ณ จุดนี้คุณพร้อมที่จะจัดการกับความรับผิดชอบที่มาพร้อมกับการใช้บัญชีนั้น นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งในสภาพแวดล้อมที่ใช้ CentrifyDC สำหรับการสนับสนุนโฆษณาเนื่องจาก 'รูท' กลายเป็นบัญชีดูแลระบบท้องถิ่นและเปิดใช้งาน (โดยปกติ) โดยอัตโนมัติ ดังนั้นฉันคิดว่ามันดีที่สุดที่จะตัดการไล่ล่าและทำการตั้งค่ารหัสผ่านของบัญชีรูทเป็นหนึ่งในภารกิจแรกที่ฉันทำในการปรับใช้ใด ๆ ในปัจจุบัน แน่นอนว่า ฉันสามารถ 'เข้าสู่ระบบเป็น 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, ...)
ฉันใช้เวลาหลายสัปดาห์ในการระบุว่าสิ่งนี้เป็นสาเหตุที่ทำให้ผู้ใช้ถูกซ่อนใน greeter ล็อกอินของผู้จัดการการแสดงผล เป็นที่ชัดเจนว่า MDM ถูกละเว้นโดย / var / lib / AccountService / users และ 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
งานมีคุณพยายามมันได้หรือไม่