ฉันสามารถจัดเรียงไฟล์ / etc / group และ / etc / passwd ได้ไหม?


33

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

ฉันสามารถจัดเรียงไฟล์เหล่านี้ (เช่นตามตัวเลขหรือตัวอักษรตามชื่อ) โดยไม่มีผลเสียต่อระบบและ / หรือผู้จัดการแพ็คเกจ?

ฉันเดาว่ามันไม่สำคัญ แต่เพื่อให้แน่ใจว่าฉันต้องการได้รับความเห็นที่สอง อาจจะrootต้องเป็นบรรทัดที่ 1 หรือภายใน 1k บรรทัดแรกหรืออะไรก็ได้

/etc/*shadowเดียวกันจะไปสำหรับ


7
"การแก้ไขกลายเป็นเรื่องยุ่งยากเล็กน้อยเนื่องจากการขาดโครงสร้าง" ทำไมคุณจึงแก้ไขไฟล์เหล่านั้นด้วยมือ?
เควิน

การจัดเรียงไฟล์ช่วยในการแก้ไขอย่างไร เป็นเพราะคุณต้องการจัดกลุ่มบัญชีที่เกี่ยวข้องเข้าด้วยกันแล้วทำการเปลี่ยนแปลงที่คล้ายกันในช่วงของแถว แต่บัญชีที่เกี่ยวข้องจะอยู่ติดกันหากคุณจัดเรียงตาม uid หรือชื่อ
Barmar

@Barmar มันช่วยได้มากเนื่องจากบัญชีผู้ใช้ถูกจัดกลุ่มตามช่วงและแยกจากบัญชีระบบ (เมื่อเรียงลำดับตาม UID) viดังนั้นจึงเป็นเช่นง่ายต่อการจุดเส้นที่ถูกต้องในการตรวจสอบหรือการเปลี่ยนแปลงเมื่อมีการแก้ไขด้วย
Ned64

คำตอบ:


50

คุณควรทำเช่นนี้จริง ๆ แล้วตามบทความและการอ่านเอกสารคุณสามารถเรียงลำดับ/etc/passwdและ/etc/groupตาม UID / GID ด้วยpwck -sและgrpck -sตามลำดับ


3
@Menasheh สีของไซต์นี้ไม่ได้ทำให้โดดเด่นเท่าในเว็บไซต์อื่น ๆ แต่ "ตกลงทำสิ่งนี้" ในคำตอบนี้คือการเชื่อมโยงหลายมิติ
hvd

2
ตกลงดี แต่ ... โดยทั่วไปมีเหตุผลที่ถูกต้องในการแก้ไข / etc / passwd และไฟล์ที่คล้ายกันด้วยตนเอง? ถือว่าเป็นการดีกว่าหรือไม่ที่จะเข้าถึงสิ่งเหล่านี้ผ่านเครื่องมือที่ออกแบบมาเพื่อสร้างและแก้ไข
mickeyf_supports_Monica

@mickeyf ฉันเคยเห็นคนทำการแก้ไขด้วยตนเอง/etc/passwdเมื่อพวกเขาทำการเปลี่ยนแปลงแบบกลุ่มเช่นการเปลี่ยนฟิลด์ GECOS สำหรับผู้ใช้ทั้งหมดเนื่องจากการย้าย / การปรับโครงสร้าง (การเปลี่ยนแปลงห้องทั่วโลกหรือหมายเลขโทรศัพท์ ฯลฯ ) มันไม่ธรรมดาอีกต่อไป แต่มีเฉพาะ เหตุผลที่ครอบตัดเป็นครั้งคราว
ErikF

44

แม้ว่า ErikF จะถูกต้องว่าโดยทั่วไปควรจะเป็นไร แต่ฉันต้องการชี้ให้เห็นถึงปัญหาที่อาจเกิดขึ้น:

คุณได้รับอนุญาตให้แมปชื่อผู้ใช้ที่แตกต่างกับ UID เดียวกัน หากคุณใช้สิ่งนี้เครื่องมือที่แมป UID กลับไปที่ชื่อผู้ใช้โดยทั่วไปจะเลือกชื่อผู้ใช้แรกที่พบสำหรับ UID /etc/passwdนั้น การเรียงลำดับอาจทำให้ชื่อผู้ใช้อื่นปรากฏก่อน สำหรับวัตถุประสงค์ในการแสดงผล (เช่นls -lผลลัพธ์) ชื่อผู้ใช้ควรใช้งานได้ แต่เป็นไปได้ว่าคุณได้กำหนดค่าบางโปรแกรมให้รับคำขอจากชื่อผู้ใช้ A ซึ่งจะปฏิเสธคำขอเหล่านั้นหากเห็นว่ามาจากชื่อผู้ใช้ B แม้ว่า A และ B เป็นผู้ใช้เดียวกัน


ขอบคุณฉันรู้ว่าคุณสามารถเคยมีผู้ใช้ที่มี tcsh และ uid 0 ใน Solaris ไม่กี่ทศวรรษที่ผ่านมา อย่างไรก็ตามระบบ Linux จะไม่สร้างสถานการณ์นี้ด้วยตัวเอง - คุณจะต้องสร้างผู้ใช้ดังกล่าวด้วยตนเองเพื่อให้มีปัญหากับสถานการณ์นั้น
Ned64

2

การรูทที่บรรทัดแรกนั้นเป็น "มาตรฐาน" มานานแล้วและสะดวกมากถ้าคุณต้องแก้ไขเชลล์หรือลบรหัสผ่านเมื่อจัดการกับปัญหาหรือการกู้คืนระบบ

ในทำนองเดียวกันผมชอบที่จะมีภูต / utils ผู้ใช้ในผู้ใช้มาตรฐานกลางและในตอนท้ายของทั้งสองและpasswdshadow

hvd คำตอบนั้นดีมากเกี่ยวกับการรบกวนการสั่งซื้อของผู้ใช้โดยเฉพาะในระบบที่ผู้ใช้หลายคนดูแลด้วยมือ

หากคุณค่อนข้างจัดการเรียงไฟล์เช่นสำหรับผู้ใช้มาตรฐานมันจะมีเหตุผลมากกว่าการเปลี่ยนลำดับของผู้ใช้ทั้งหมด imo


1
หากคุณเรียงลำดับตัวเลขด้วย UID คุณควรได้รับคำสั่งซื้อที่คุณต้องการ รูทอยู่เสมอ0และ daemons จะมี
UID ไม่

@Barmar หากเรียงตาม UID และไม่ใช่ด้วยชื่อจริงขอบคุณที่จำได้
Rui F Ribeiro

0

นี่คือรหัสทุบตีที่ค่อนข้างมีขนดกเพื่อจัดเรียงไฟล์ shadow / gshadow ในทำนองเดียวกันอย่างปลอดภัย (ใช้vipw -s/ vigr -s) และ in-place จากบรรทัดคำสั่ง:

EDITOR="/usr/bin/vi -c \"1,\\\$!awk 'BEGIN {FS = \\\":\\\"} FNR==NR {x2[\\\$1] = \\\$0; next} \\\$1 in x2 {print x2[\\\$1]}' - /etc/passwd\" -c \"wq! \" >/dev/null 2>&1" vipw -s

EDITOR="/usr/bin/vi -c \"1,\\\$!awk 'BEGIN {FS = \\\":\\\"} FNR==NR {x2[\\\$1] = \\\$0; next} \\\$1 in x2 {print x2[\\\$1]}' - /etc/group\" -c \"wq! \" >/dev/null 2>&1" vigr -s

บันทึก:

  1. vi -cส่งคำสั่งไปยังโปรแกรมแก้ไข vim ซึ่งกำหนดให้เป็นเครื่องมือแก้ไขvipw/ vigrโดยEDITORตัวแปร
  2. รหัส awk จัดเรียงshadowตามpasswd(และgshadowตามgroup)
  3. แบ็กสแลชเป็นเพียงระดับการหลบหลีกหลายระดับที่จำเป็นต้องสอดคล้องกับระดับคำพูด
  4. คำสั่งที่สอง (-c \ "wq! \") บังคับให้เขียนและปิดไฟล์ที่เรียงลำดับ แรงเป็นสิ่งจำเป็นเนื่องจากเงา / gshadow มักจะเป็นโหมด 000 (เช่นไม่สามารถเขียนได้) สังเกตช่องว่างระหว่าง '!' และ '\' มีความจำเป็นเพื่อป้องกันการตีความโดยเชลล์ว่า '! \' ซึ่งอ้างอิงถึงเหตุการณ์ทุบตี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.