ฉันจะลบผู้ใช้ออกจากกลุ่มได้อย่างไร


343

ฉันควรใช้คำสั่งใดเพื่อลบผู้ใช้ออกจากกลุ่มใน Debian

เมื่อเพิ่มผู้ใช้ในกลุ่มสามารถทำได้ด้วย:

usermod -a -G group user

อย่างไรก็ตามฉันไม่พบคำสั่งที่คล้ายกัน (ยอมรับกลุ่มและผู้ใช้เป็นอาร์กิวเมนต์) สำหรับการลบผู้ใช้ออกจากกลุ่ม สิ่งที่ฉันจะได้ใกล้ที่สุดคือ:

usermod -G all,existing,groups,except,for,group user

มีคำสั่งเช่นเดียวusermod OPTION group userกับ OPTION ตัวเลือกในการสร้างusermod(หรือโปรแกรมที่คล้ายกัน) เพื่อลบผู้ใช้ออกจากกลุ่มหรือไม่?


1
สำหรับผู้ใช้ Fedora ที่ลงเอยที่นี่ man usodod เปิดเผยในตัวเลือกความคิดเห็น -G ว่ารายชื่อกลุ่มปัจจุบันทั้งหมดต้องการที่จะถูกเก็บไว้เป็นวิธีการลบกลุ่ม ไม่มีตัวเลือก -R กับ Fedora; คุณต้องใช้แนวทางของ Lekensteyn ซึ่งเขาพยายามหลีกเลี่ยง
Stephen

คำตอบ:


404

คุณสามารถใช้gpasswd:

# gpasswd -d user group

จากนั้นกำหนดค่ากลุ่มใหม่จะถูกกำหนดในการเข้าสู่ระบบครั้งต่อไปอย่างน้อยใน Debian หากผู้ใช้เข้าสู่ระบบผลของคำสั่งจะไม่เห็นทันที


9
ขอบคุณมาก! gpasswd -a user groupสำหรับการเพิ่มผู้ใช้ไปยังกลุ่มดูเหมือนจะดีกว่าโดยเฉพาะอย่างยิ่งถ้าพิมพ์ผิดและ-aตัวเลือกที่ได้รับลดลง
Lekensteyn

1
ใช้งานไม่ได้สำหรับฉัน ฉันได้รับข้อความสองข้อความ: ก) ลบผู้ใช้ออกจากกลุ่ม b) gpasswd: ผู้ใช้ไม่ได้เป็นสมาชิกของกลุ่ม หลังจากนั้นเรียกใช้ "กลุ่มสมาชิก" ไม่แสดงการเปลี่ยนแปลง
geoidesic

1
@geoidesic คุณต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อดูผลกระทบ
Wasif Hossain

1
มีวิธีใดที่จะทำให้การเปลี่ยนแปลงมีผลโดยไม่ต้องลงชื่อเข้าใช้ซ้ำหรือไม่
Andy Fusniak

2
@geoidesic ฉันพบข้อผิดพลาดเหล่านี้ใน Centos 7 ฉันพบว่าคุณได้รับสิ่งนี้หากคุณพยายามลบผู้ใช้ออกจากกลุ่มเริ่มต้น ลองสลับกลุ่มเริ่มต้นด้วยusermod -g user userจากนั้นลองลบออก
PanPipes

175

บน Debian adduserแพ็กเกจประกอบด้วยdeluserโปรแกรมที่ลบผู้ใช้ออกจากกลุ่มหากคุณส่งทั้งคู่เป็นอาร์กิวเมนต์:

deluser user group

หากการกระจายของคุณไม่มีadduserคุณสามารถแก้ไข/etc/groupและ/etc/gshadowด้วยตนเอง

vigr
vigr -s

10
ผมไม่ทราบว่าของโปรแกรมเช่นและvigr vipwมีประโยชน์มากในกรณี manpages จะไกลเกินไป :)
Lekensteyn

3
อีกวิธีหนึ่งหลังจากแก้ไขการ/etc/groupเรียกใช้grpconvเพื่ออัปเดต/etc/gshadowแทนที่จะแก้ไข
Cyrille

sudo deluser jenkins admin/ usr / sbin / deluser: คุณไม่สามารถลบผู้ใช้ออกจากกลุ่มหลัก
Jonathan

@JonathanLeaders ผู้ใช้ทุกคนต้องอยู่ในกลุ่มอย่างน้อยหนึ่งกลุ่ม ใช้usermodหรือvipwเพื่อเปลี่ยนกลุ่มหลักของผู้ใช้ คำถามนี้เกี่ยวกับกลุ่มเสริม
Gilles

ดี นอกจากนี้ยังง่ายคำสั่งแทนadduser $user $group usermod -x -y -z -...
ygoe

65
usermod -G "" username

ลบกลุ่มรอง / เสริมทั้งหมดออกจากชื่อผู้ใช้และปล่อยให้พวกเขาเป็นสมาชิกของกลุ่มหลักเท่านั้น สิ่งนี้ทำงานใน Solaris 5.9


5
ทดสอบใน CentOS 6.4; โรงงาน
รวม

1
ทำงานได้ใน Ubuntu 12.04 เช่นกัน
รวม

และนี่เป็นวิธีที่ดีที่สุดในการบังคับให้กลุ่มที่สองเข้าในรายการกลุ่มใด ๆยกเว้นกลุ่มที่ไม่แสดงทั้งหมด
ปัญญาชน

ผ่านการทดสอบและทำงานใน CentOS 7 ขอบคุณ!
หากิน

14

นี่คือวิธี "โรงเรียนเก่า" ...

ระบบ * nix ส่วนใหญ่รักษาข้อมูลกลุ่มไว้ในไฟล์ข้อความธรรมดา/etc/groupโดยที่

  • แต่ละบรรทัดมีฟิลด์

    • ชื่อกลุ่ม
    • รหัสผ่าน
    • GID และ
    • USER_LIST

    คั่นด้วย:ตัวละคร

  • ฟิลด์ user_list เป็นรายการชื่อผู้ใช้คั่นด้วยเครื่องหมายจุลภาค

ตอนนี้สมมติว่าคุณต้องการลบผู้ใช้ที่ชื่อจากกลุ่มที่มีชื่อว่าthisuser thatgroupเริ่มต้นด้วยการสำรองข้อมูล/etc/groupจากนั้นใช้เครื่องมือแก้ไขการตั้งค่าของคุณด้วยสิทธิ์ su เพื่อแก้ไขไฟล์/etc/group และลบการthisuserอ้างอิงจากthatgroupรายการโฆษณาเช่น

บรรทัดดั้งเดิมคืออะไร:

thatgroup:x:1274:someuser,thisuser,anotheruser

หลังจากแก้ไขควรจะเหลือดังนี้:

thatgroup:x:1274:someuser,anotheruser

เช่นเดียวกับคำตอบอื่น ๆ ทั้งหมดสิ่งนี้จะไม่ส่งผลกระทบต่อเซสชันปัจจุบันของผู้ใช้ถ้ามี (เช่นถ้าผู้ใช้ล็อกอินในปัจจุบัน) การเปลี่ยนแปลงจะมีผลในครั้งต่อไปที่ผู้ใช้ลงชื่อเข้าใช้


1
vigrถูกกล่าวถึงเพื่อแก้ไข/etc/groupด้วยตนเอง หน้าคู่มือของฉันบอกว่าชื่อผู้ใช้จะถูกคั่นด้วยเครื่องหมายจุลภาคไม่ใช่โดยโคลอน ไม่จำเป็นต้องบูตเครื่องใหม่คุณเพียงแค่ลงชื่อเข้าใช้อีกครั้ง (หรือใช้newgrp)
Lekensteyn

เพื่อช่วยผู้ใช้ที่ไม่ใช่เดเบียนชนชายฝั่งเหล่านี้เพื่อหาเบาะแส ... นี่อาจเพียงพอสำหรับ Debian ตามคำถามของ OP แต่ถ้าคุณใช้สิ่งนี้สำหรับ * BSD OS คุณจะต้องแก้ไขไฟล์ธรรมดา ที่นี่ตามที่ระบุไว้จากนั้นออก pwd_mkdb -p /etc/master.passwd เพื่อนำรายการนั้นไปใช้จริง
danno

3

คุณสามารถใช้คำสั่งด้านล่างในการกระจาย SUSE (และเห็นได้ชัดว่าไม่มีคนอื่น )

usermod -R group  user_name

โดยที่groupกลุ่มที่คุณต้องการลบผู้ใช้ออกและuser_nameผู้ใช้ที่คุณต้องการลบออกจากกลุ่ม ตัวอย่างเช่น,

usermod -R root imnottheroot

1
แพคเกจใดให้ usermod ไบนารีของคุณ ฉันขอให้ตรวจสอบเวอร์ชั่นเนื่องจากของฉันจาก shadow-utils-4.1.4.3 ไม่ได้มีตัวเลือก -R
myroslav

3
แพคเกจ shadow 4.1.5.1-5 ของฉัน (Arch Linux) มี-Rตัวเลือก แต่นั่นหมายถึงอย่างอื่น ไม่ใช่ลินุกซ์ฉันเดา
Lekensteyn

3
ฉันไม่แน่ใจว่าสิ่งนี้จะได้ผล manpage บอกว่า-R: "-R, - root CHROOT_DIR ใช้การเปลี่ยนแปลงในไดเรกทอรี CHROOT_DIR และใช้ไฟล์การกำหนดค่าจากไดเรกทอรี CHROOT_DIR"
MikeKusold

2
สิ่งเดียวที่เกี่ยวข้องกับการจัดเรียงของผมสามารถหาได้นี้ manpage Oracle, แต่ที่ยังคงไม่ได้เกี่ยวกับสิ่งเดียวกันดังนั้นคำตอบนี้ควรอาจจะถูกลบออก
kyrias

sudo usermod -R admin jenkinsusermod: เส้นทาง chroot ที่ไม่ถูกต้อง 'admin'
Jonathan

1

พิจารณา:

  • ชื่อผู้ใช้: abc2
  • ชื่อกลุ่ม: newgroup11

  • ภารกิจ: การลบผู้ใช้abc2ออกจากกลุ่มnewgroup11

[root@home1 ~]# groups abc2
abc2 : abc2
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# groups abc2
abc2 : abc2 newgroup11
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# usermod -G abc2 abc2
[root@home1 ~]# groups abc2
abc2 : abc2

** กรุณาแก้ไขให้ฉันถ้าฉันผิด **


1
"ใช้งานได้" แต่เพียงเพราะคุณมีกลุ่มรองหนึ่งกลุ่ม จะทำให้คุณอยู่ในกลุ่มรองusermod -G newgroup11 abc2 newgroup11เนื่องจากกลุ่มหลักคือabc2คุณจะสิ้นสุดในทั้งสองกลุ่ม usermod -g abc2 abc2ผลในnewgroup11การถูกลบออกจากกลุ่มรองเพราะมันไม่ได้พูดถึงอีกต่อไป ดังนั้นสำหรับกลุ่มที่แตกต่างกันสามกลุ่มขึ้นไปวิธีนี้จะไม่ทำงาน ดูคำตอบอื่น ๆ ที่เกี่ยวข้องกับgpasswdคำสั่งที่ดีกว่า
Lekensteyn

1

คุณสามารถลบผู้ใช้ออกจากกลุ่มโดยดำเนินการคำสั่ง usermod โดยไม่ใช้ตัวเลือก -a ตัวอย่างโดยการดำเนินการ "usermod -G group1 ชื่อผู้ใช้" จะเพิ่มผู้ใช้ไปยังกลุ่ม 1 และจะลบออกจากกลุ่มอื่น ๆ ที่เป็น โปรดจำไว้ว่าคุณสามารถให้ผู้ใช้อยู่ในกลุ่มต่าง ๆ โดยแสดงรายชื่อกลุ่มคั่นด้วยเครื่องหมายจุลภาค


1
ข้อมูลนี้ถูกนำเสนอหลายครั้งแล้ว
สกอตต์

0

หากต้องการใช้ usermod ต่อไปใน distro (เช่น Fedora) ซึ่งไม่มีตัวเลือกการลบโดยที่ user = bob และ group = deletethisgroup คำสั่งจะเป็น:

usermod -G `cat /etc/group |  grep bob | grep -v deletethisgroup | cut -d ':' -f 1 | tr '\n' ',' | sed 's/,$//'` bob

ไพพ์ (1) รับรายการกลุ่มทั้งหมดที่ผู้ใช้เป็นเจ้าของ (2) นำสิ่งที่ต้องการลบออก (3) ส่งกลับคอลัมน์แรก (ชื่อกลุ่ม) แทนที่บรรทัดใหม่ด้วยเครื่องหมายจุลภาคและลบเครื่องหมายจุลภาคต่อท้าย

แน่นอนคุณสามารถใส่ทุกอย่างไว้ใน bash script ซึ่งจะทำให้ผู้ใช้และกลุ่มถูกลบเป็นพารามิเตอร์ awk อาจถูกใช้เพื่อย่นจุดจบ แต่ฉันต้องการยึดติดกับ grep, ตัด, tr และ sed


ตามนี้หน้าคน , gpasswd -d bob deletethisgroupสามารถใช้ได้เกินไป เหตุผลใดที่คุณไม่ได้ใช้มัน?
Lekensteyn

ไม่ใช่ทุกคนที่ต้องการตั้งค่ารหัสผ่านกลุ่ม ฉันแค่เสนอวิธีแก้ปัญหาโดยใช้คำสั่งที่อ้างอิงโดยคำถามใน distro เฉพาะ ใน Fedora / RHEL / Centos ด้วย gpasswd -d ผู้ใช้ที่ถูกลบจะยังสามารถเข้าร่วมกลุ่มได้หากเขาเข้าถึงรหัสผ่านได้ อันที่จริงมันเพิ่มการเข้าถึงกลุ่มเมื่อเทียบกับการไม่อนุญาต
สตีเฟ่น

ฉันเข้าใจว่ามีการตั้งชื่อยูทิลิตี้gpasswdเนื่องจากมีความเกี่ยวข้องอย่างใกล้ชิด/etc/passwdแต่แทนที่จะจัดการกลุ่ม ซึ่งแตกต่างจากpasswdคำสั่งธรรมดาที่เพิ่งควบคุมรหัสผ่านgpasswdนอกจากนี้ยังสามารถใช้ในการจัดการความเป็นสมาชิกของกลุ่ม ไม่จำเป็นต้องใช้รหัสผ่านกลุ่มหากคุณเป็นผู้ดูแลระบบหรือผู้ดูแลกลุ่ม
Lekensteyn

คุณอ่านคู่มือ gpasswd แล้วหรือยัง? สำหรับ Fedora / RHEL / CentOS หากคุณอ่านคู่มือจะระบุว่าคำสั่ง "ใช้เพื่อจัดการ / etc / group และ / etc / gshadow" จริง ๆ แล้วมันไม่มีผลกับ / etc / passwd ด้วยตนเองยังระบุว่า "รหัสผ่านของกลุ่มเป็นปัญหาด้านความปลอดภัยโดยเนื้อแท้เนื่องจากมีมากกว่าหนึ่งคนที่ได้รับอนุญาตให้รู้รหัสผ่าน" มันไม่ได้จัดการการเป็นสมาชิกของกลุ่มจริง ๆ มันจะเปิดกลุ่มถึงผู้ใช้ด้วยรหัสผ่านใด ๆ ไม่จำเป็นต้องใช้รหัสผ่านกลุ่มหากคุณเป็นสมาชิกของกลุ่มอยู่แล้ว
Stephen

ที่เกี่ยวข้องอย่างใกล้ชิดในความหมายของการตั้งชื่อและวัตถุประสงค์ที่คล้ายกันฉันไม่ได้หมายความว่าไฟล์ / etc / passwd นั้นถูกจัดการโดย gpasswd โปรดทราบว่า "หน้าคน" ในความคิดเห็นแรกของฉันชี้ไปที่หน้าคู่มือ gpasswd สำหรับ Fedora 13 การใช้gpasswd $groupคุณสามารถตั้งรหัสผ่านกลุ่มซึ่งทำให้เกิดปัญหาด้านความปลอดภัยที่คุณกล่าวถึง อย่างไรก็ตามคุณไม่สามารถมีรหัสผ่านและใช้gpasswd -d $user $groupเพื่อลบผู้ใช้ตามที่อธิบายไว้ในความคิดเห็นแรกและคำตอบที่ได้รับการยอมรับ โปรดทราบว่าคำสั่งนี้จะไม่พร้อมท์ให้ใส่รหัสผ่านกลุ่มหรือแก้ไขหรือต้องการรหัสผ่าน
Lekensteyn

0

สมมติว่าชื่อผู้ใช้ = studentและgroupname = researchดังนั้นเมื่อต้องการลบstudentผู้ใช้ออกจากresearchกลุ่มจำเป็นต้องทำดังต่อไปนี้:

gpasswd -d student research

ทำไมต้องทำบางสิ่งบางอย่างที่นี่เมื่อ 6 ปีก่อน? มันถูกทำเครื่องหมายเป็นคำตอบที่ยอมรับได้!
Betlista


-1

ในการลบผู้ใช้ออกจากกลุ่ม gpasswd เป็นยูทิลิตี้ที่ดีที่สุดสำหรับ IMO นี้

ตัวอย่างคำสั่ง:

sudo gpasswd -d group user

* ข้อมูลความช่วยเหลือ *

Usage: gpasswd [option] GROUP

Options:
  -a, --add USER                add USER to GROUP
  -d, --delete USER             remove USER from GROUP
  -h, --help                    display this help message and exit
  -Q, --root CHROOT_DIR         directory to chroot into
  -r, --delete-password         remove the GROUP's password
  -R, --restrict                restrict access to GROUP to its members
  -M, --members USER,...        set the list of members of GROUP
  -A, --administrators ADMIN,...
                                set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.

1
อาร์กิวเมนต์กลุ่มและผู้ใช้ถูกสลับ นอกจากนี้นี่คือสิ่งที่คำตอบที่ได้รับการยอมรับนำเสนอโพสต์นี้ไม่เป็นประโยชน์จริง ๆ ?
Lekensteyn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.