เปลี่ยน gid ของกลุ่มเฉพาะ


34

ฉันต้องการเปลี่ยนรหัสกลุ่มของกลุ่มเฉพาะ อาจมีวิธีแก้ไขปัญหาสำหรับการเปลี่ยน gid ของไฟล์หรือไดเรกทอรี แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ มีวิธีทำเช่นนั้นหรือไม่?

คำตอบ:


42

GID เป็นตัวระบุหลักของกลุ่ม เท่าที่ระบบมีความกังวล GID ที่แตกต่างกันคือกลุ่มที่แตกต่าง ดังนั้นในการเปลี่ยน GID คุณจะต้องแก้ไขสถานที่ทั้งหมดที่ใช้ GID

คุณควรหลีกเลี่ยงการใช้ GID อย่างมีนัยสำคัญและใช้ชื่อกลุ่มแทน คุณสามารถเปลี่ยนชื่อของกลุ่มที่มีคำสั่งเดียว (บน Linux: groupmod -n NEW_GROUP_NAME OLD_GROUP_NAME)

อย่างไรก็ตามหากคุณต้องการเปลี่ยน GID นี่คือวิธี:

  • ก่อนอื่นคุณอาจต้องออกจากระบบผู้ใช้ในกลุ่มและฆ่ากระบวนการที่มีกลุ่มนั้นเป็นกลุ่มที่มีประสิทธิภาพจริงหรือบันทึกไว้
  • เปลี่ยนรายการในฐานข้อมูลกลุ่ม บน Linux groupmod -g NEWGID GROUPNAMEรัน บนระบบอื่นให้ใช้เครื่องมือการดูแลระบบของระบบนั้นหรือvigrหากมีหรือแก้ไข/etc/groupได้
  • เปลี่ยนกลุ่มของไฟล์ทั้งหมดในระบบของคุณที่เป็นของกลุ่มเก่า

    find / -gid OLDGID ! -type l -exec chgrp NEWGID {} \;
    
  • chgrp ล้างธง suid และ sgid เรียกคืนเหล่านั้น

  • หากคุณมีที่เก็บถาวรใด ๆ ที่ใช้ GID เก่าให้สร้างขึ้นใหม่
  • หากคุณมีไฟล์กำหนดค่าหรือสคริปต์ที่อ้างอิง GID เก่าให้อัปเดต
  • รีสตาร์ทกระบวนการทั้งหมดที่ต้องใช้ GID ใหม่

2
ขอแนะนำให้ใช้แทนchgrp -h ... chgrp ...โดยไม่ต้อง-hที่เป้าหมายของ symlink เกี่ยวข้องใด ๆ ที่จะมีกลุ่มของการเปลี่ยนแปลง
Mark Plotnick

3
groupmodใช้ชื่อเป็นอาร์กิวเมนต์หลักสำหรับฉัน ...groupmod -g NEWGID GROUPNAME
แมตต์

29

วิธีที่ง่ายที่สุดคือการใช้ groupmod -g <NEW_GID> <groupname>

อีกวิธีคือแก้ไข/etc/groupโดยตรง เขตข้อมูลที่สามในแต่ละคอลัมน์คือ gid

หากกลุ่มที่ถูกเปลี่ยนเป็นกลุ่มหลักของผู้ใช้/etc/passwdจำเป็นต้องปรับเปลี่ยนเช่นกัน: usermod -g <NEW_GID> <username>.


สิ่งนี้จะส่งผลกระทบต่อ gid ของไฟล์ด้วยหรือไม่ ฉันหมายถึง gid ของไฟล์และ gid ของกลุ่มจะเปลี่ยนไปในเวลาเดียวกัน?
mibzer

1
ไม่สิ่งนี้จะเปลี่ยนเฉพาะ id ของกลุ่ม ไฟล์ / ไดเรกทอรีเก็บ (ตอนนี้ไม่มีชื่อ) gid และจำเป็นต้องเปลี่ยนแยกต่างหาก
jofel

โอเคขอบคุณ. ดังนั้นหากฉันต้องการเปลี่ยน gid (ไฟล์) ของพวกเขาเป็น gid ใหม่ฉันต้องรันคำสั่งอื่น นั่นถูกต้องใช่ไหม ? มันจะดีกว่าถ้ามีวิธีการเปลี่ยนทั้ง gid ของไฟล์ froup และ gid ของไฟล์ที่เกี่ยวข้องในเวลาเดียวกัน
mibzer

ฉันได้เพิ่มคำสั่งอื่นในคำตอบของฉัน ไม่มีปัญหาหากใช้ gid ชั่วคราวซึ่งไม่ได้อยู่ใน / etc / group ผู้ใช้ทุกคนในกลุ่มจะต้องเข้าสู่ระบบใหม่เพื่อให้มี gid ใหม่
jofel

0

find / path -group foo -print0 | xargs -0 chgrp bar


อย่างที่ฉันบอกว่าจะเปลี่ยน gid ของไฟล์ แต่นั่นไม่ใช่สิ่งที่ฉันหมายถึง ฉันต้องการเปลี่ยน gid ของกลุ่มไม่ใช่ไฟล์
mibzer

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