ฉันเพิ่มผู้ใช้ในกลุ่ม แต่สิทธิ์กลุ่มในไฟล์ยังคงไม่มีผล


17

ฉันเปลี่ยนการอนุญาตของไฟล์ ( chmod g+w testfile) และการอนุญาตทำงานls -l testfile:

-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile

ฉันเพิ่มผู้ใช้ในกลุ่มนั้น (" / etc / group " มีuser1:x:1000:user2บรรทัด) แต่ไม่สามารถแก้ไขไฟล์นั้นเป็น user2 ทำไมเป็นเช่นนี้


ดูเพิ่มเติมที่: unix.stackexchange.com/questions/18796/…
Stéphane Gimenez

คำตอบ:


28

user2 ต้องออกจากระบบและกลับมาใช้การอนุญาตกลุ่มทำงานในลักษณะนี้:

  • เมื่อคุณเข้าสู่กระบวนการของคุณได้รับจะมีสมาชิกของกลุ่มในกลุ่มหลักของคุณกล่าวถึงในบวกทุกกลุ่มที่ผู้ใช้ของคุณถูกกล่าวถึงใน/etc/passwd /etc/group(เพิ่มเติมแม่นยำpw_gidในสนามgetpw(your_uid)รวมทุกกลุ่มซึ่งผู้ใช้ของคุณเป็นสมาชิกอย่างชัดเจน . นอกเหนือ/etc/passwdและ/etc/groupข้อมูลที่อาจมาจากชนิดอื่น ๆ ของฐานข้อมูลของผู้ใช้เช่น NIS หรือ LDAP.) กลุ่มหลักจะกลายเป็นกระบวนการID กลุ่มที่มีประสิทธิภาพและกลุ่มอื่น ๆ กลายเป็นของรหัสกลุ่มเสริม
  • เมื่อกระบวนการดำเนินการที่ต้องเป็นสมาชิกในกลุ่มใดกลุ่มหนึ่งเช่นการเข้าถึงไฟล์กลุ่มนั้นจะต้องเป็นรหัสกลุ่มที่มีประสิทธิภาพหรือหนึ่งในรหัสกลุ่มเสริมของกระบวนการ

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

ภายใต้ประทุนกระบวนการจะสูญเสียสิทธิพิเศษ (ID ผู้ใช้ ID กลุ่มความสามารถ) เท่านั้น เคอร์เนลเริ่มต้นinitกระบวนการ (กระบวนการแรกหลังจากบู๊ต) ที่รันในฐานะรูทและในที่สุดทุกกระบวนการจะสืบทอดจากกระบวนการนั้นในที่สุด loginกระบวนการ (หรือsshdหรือเป็นส่วนหนึ่งของผู้จัดการเดสก์ทอปของคุณที่บันทึกอยู่ใน) จะยังคงทำงานเป็นราก ส่วนหนึ่งของงานคือการปล่อยสิทธิ์รูทและเปลี่ยนไปใช้ผู้ใช้และกลุ่มที่เหมาะสม

มีข้อยกเว้นหนึ่งเดียว: รันsetuid หรือ setgidโปรแกรม โปรแกรมนั้นได้รับการอนุญาตเพิ่มเติม: สามารถเลือกที่จะดำเนินการภายใต้ชุดย่อยต่าง ๆ ของการเป็นสมาชิกของกระบวนการหลักรวมทั้งการเป็นสมาชิกเพิ่มเติมในผู้ใช้หรือกลุ่มที่เป็นเจ้าของไฟล์ปฏิบัติการ setxid โดยเฉพาะอย่างยิ่งโปรแกรมรูทของ setuid มีสิทธิ์ใช้งานรูทซึ่งสามารถทำทุกอย่างได้²; นี่เป็นวิธีที่โปรแกรมชอบsuและsudoสามารถทำงานของพวกเขาได้

¹ มีบางครั้งกระบวนการที่ไม่ได้มาจาก init (initrd, udev) แต่หลักการเหมือนกัน: เริ่มต้นเป็นรูทและเสียสิทธิ์เมื่อเวลาผ่านไป
² ยกเว้นเฟรมเวิร์กความปลอดภัยหลายระดับเช่น SELinux


1
โปรดทราบว่าหากคุณใช้ GUI บนเดสก์ท็อปเพียงแค่ออกจากระบบและกลับสู่หน้าต่างเทอร์มินัลจะไม่รีเซ็ตการเป็นสมาชิกกลุ่ม ฉันมีปัญหานี้และฉันต้องออกจากระบบเซสชัน GUI ด้วย: þ
user394

3
@ user394 การออกจากระบบและกลับเข้าสู่ระบบจะรีเซ็ตความเป็นสมาชิกกลุ่ม หากคุณเพียงปิดหน้าต่างเทอร์มินัลคุณจะไม่ออกจากระบบ
Gilles 'หยุดชั่วร้าย'

10

คุณอาจต้องออกจากระบบ user2 และกลับเข้ามาใหม่ (หรือลอง ssh'ing เพื่อสร้างเซสชันการล็อกอินใหม่) ตรวจสอบผลลัพธ์ของid --groupsเพื่อแสดงรหัสกลุ่มตัวเลขสำหรับผู้ใช้


1

sudo su $(whoami)

เป็นวิธีการแก้ปัญหาเดียวกันเป็นหลักssh localhostแต่ใช้งานได้โดยไม่ต้องติดตั้งเซิร์ฟเวอร์ ssh

ตราบใดที่คุณมีรูต แต่ถ้าคุณเพิ่งเพิ่มกลุ่มใหม่ & การอนุญาตที่ถูกเปลี่ยนคุณน่าจะทำได้


แม้ว่านี่จะเป็นคำตอบที่มีข้อมูลน้อยกว่าคำตอบที่ได้รับการยอมรับ แต่บางครั้งคุณต้องการที่จะรู้วิธีสร้างนาฬิกาและบางครั้งคุณก็อยากรู้ว่าเวลาเท่าไร คำตอบนี้ช่วยให้ฉันมีเคล็ดลับที่สามารถทำงานได้จนกว่าฉันจะออกจากระบบและกลับมาอีกครั้งขอบคุณ
Benjamin Staton

0

มีกรณีเมื่อออกจากระบบของผู้ใช้ไม่ได้ช่วย - ถ้าคุณใช้คำสั่ง ssh ControlMaster สำหรับโฮสต์ หากคุณเพิ่มบัญชีของคุณในกลุ่มให้ออกจากระบบและเข้าสู่ระบบอีกครั้งภายในการเชื่อมต่อ ControlMaster เดียวกันเซสชันจะยังคงแสดงให้คุณเห็นว่าไม่มีสมาชิกใหม่ คุณจะต้องบังคับให้ทำลายการเชื่อมต่อของ Master ด้วย

ssh -O exit hostname

ก่อนที่จะเข้าสู่ระบบอีกครั้ง

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