Linux: ชื่อผู้ใช้กลุ่มและกลุ่ม


12

ไม่มีใครรู้ว่าทำไมคำสั่ง linux

    groups 

แสดงเอาท์พุทที่แตกต่างกว่า

    groups username 

ผู้ใช้ที่เข้าสู่ระบบเหมือนกับชื่อผู้ใช้พารามิเตอร์ ตัวอย่าง:

    thorsten@ubuntu:~/tmp$ groups
    thorsten adm dialout cdrom plugdev lpadmin admin sambashare
    thorsten@ubuntu:~/tmp$ groups thorsten
    thorsten : thorsten adm dialout cdrom plugdev nogroup lpadmin admin sambashare

1
มีคำถามซ้ำซ้อนมากมายที่ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มจากตรงไหน
user1686

คำตอบ:


12

เมื่อคุณเรียกใช้จะค้นหา1ผู้ใช้ที่ระบุในและ(แม้ว่าจะเป็น LDAP, NIS หรืออย่างอื่น2 ) และแสดงกลุ่มทั้งหมดที่คุณพบgroups username/etc/passwd/etc/group

ในทางกลับกันเมื่อคุณเรียกใช้groupsคำสั่งโดยไม่ขัดแย้งใด ๆ มันก็จะแสดงรายการทุกกลุ่มตัวเองเป็น3 - ซึ่งเป็นที่ไม่จำเป็น/etc/groupเช่นเดียวกับสิ่งที่ระบุไว้ใน (ดูคำอธิบายด้านล่าง) ในความเป็นจริงการค้นหาเท่านั้นที่ทำขึ้นเพื่อ/etc/groupแปล GID ให้เป็นชื่อกลุ่ม


แต่ละกระบวนการมีชุดของข้อมูลรับรองซึ่งมี (เหนือสิ่งอื่นใด) "รหัสกลุ่มจริง" (GID หลัก), "รหัสกลุ่มที่มีประสิทธิภาพ" (EGID) และรายการของรหัส "กลุ่มเสริม" (GID รอง) โดยค่าเริ่มต้นกระบวนการสืบทอดข้อมูลรับรองจากพาเรนต์ อย่างไรก็ตามกระบวนการที่ทำงานในฐานะรูท (UID 0) หรือมีCAP_SETUIDความสามารถได้รับอนุญาตให้ตั้งค่าข้อมูลประจำตัวโดยพลการ

โดยเฉพาะอย่างยิ่งเมื่อคุณเข้าสู่ระบบ Linux (ไม่ว่าจะเป็น tty, X11 หรือมากกว่า SSH) กระบวนการเข้าสู่ระบบ (/ bin / เข้าสู่ระบบ, gdm, sshd) จะค้นหาชื่อผู้ใช้ของคุณเพื่อกำหนด UID, GID หลักและ GID รอง . บนเครื่องส่วนบุคคลนี่หมายถึงการอ่านบรรทัดที่เหมาะสมจากpasswdและgroupไฟล์ (หรือ NIS, LDAP และอื่น ๆ )

ถัดไปกระบวนการเข้าสู่ระบบจะเปลี่ยน4เป็นข้อมูลรับรองเหล่านั้นก่อนเริ่มเซสชันของคุณและทุกขั้นตอนที่คุณเปิดใช้ในตอนนี้จะมี UID & GID ที่เหมือนกันแน่นอน - ระบบจะไม่ตรวจสอบ/etc/groupอีกต่อไป5และจะไม่ทำการแก้ไขใด ๆ

ด้วยวิธีนี้/usr/bin/groupsกระบวนการจะเป็นของกลุ่มเดียวกันกับที่คุณทำเมื่อคุณเข้าสู่ระบบไม่ใช่สิ่งที่ฐานข้อมูลบอกว่าคุณเป็น

หมายเหตุ:คำอธิบายข้างต้นใช้กับยูนิกซ์เกือบทั้งหมด ในตระกูล Windows NT (ยกเว้น UID และ GID ทั้งหมดเรียกว่า "SID" ไม่มี "กลุ่มหลัก" ข้อมูลรับรองจะเรียกว่า "กระบวนการโทเค็น" และCAP_SETUIDเป็นSeCreateTokenPrivilegeหรือSeTcbPrivilege ); และน่าจะเป็นระบบปฏิบัติการหลายผู้ใช้ส่วนใหญ่


1 getpwuid () และ getgrouplist () ใช้เพื่อค้นหากลุ่มผู้ใช้

2บน Linux, glibc ใช้/etc/nsswitch.confเพื่อกำหนดตำแหน่งที่จะค้นหาข้อมูลนี้

3 groupsใช้ getgid (), getegid () และ getgroups () เพื่อรับสิทธิของตัวเอง

4 setuid (), setgid (), initgroups () และที่เกี่ยวข้อง

5ข้อยกเว้นของหลักสูตรเป็นเครื่องมือต่างๆที่ใช้งานสูง ( setuid ) เช่นsu, sudo, sg, newgrp, pkexecและอื่น ๆ ซึ่งหมายความว่าsu $USERจะวางไข่เชลล์ด้วยรายการกลุ่มที่อัปเดต


3

groupsด้วยตนเองให้สมาชิกกลุ่มปัจจุบันของเจ้าของกระบวนการ สิ่งนี้อาจแตกต่างจากgroups <username>ถ้า groupdb มีการเปลี่ยนแปลงตั้งแต่กระบวนการเริ่มต้นหรือเจ้าของกระบวนการเปลี่ยนแปลง


groupsไม่ให้ปัจจุบันสมาชิก แต่สิ่งที่ถูก "ปัจจุบัน" ในขณะที่กระบวนการเข้าสู่ระบบ (/ sbin / เข้าสู่ระบบ GDM, sshd) initgroups()ที่เรียกว่า
user1686

1

เพียงรีสตาร์ทคอมพิวเตอร์และผู้ใช้ทั้งกลุ่มและกลุ่มควรให้ผลลัพธ์เดียวกัน

เหตุผลที่พวกเขาแตกต่างกันเพราะคุณเพิ่มตัวเองในกลุ่มใหม่ซึ่งคุณไม่ได้เป็นสมาชิกเมื่อคุณเริ่มคอมพิวเตอร์


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

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

0

เรียกใช้updatedbดูว่ามีการเปลี่ยนแปลงหรือไม่

สิ่งเดียวกันในเครื่อง OSX ของฉันเมื่อ groupdb ไม่ได้เปลี่ยนแปลง:

albert-hotspot:~ sami$ groups sami
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ groups
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.