อันตรายของการสร้างผู้ใช้ปกติด้วย UID <500 คืออะไร สมมติว่า UID นั้นไม่ใช่ของ UID ที่มีอยู่ซ้ำสิ่งที่ผิดพลาด?
นี่ไม่ใช่สิ่งที่ฉันต้องการทำ แต่สิ่งที่ฉันได้เห็นและต้องการทราบว่าทำไมไม่ควรทำ ในตัวอย่างนี้มันอยู่ใน RHEL5
อันตรายของการสร้างผู้ใช้ปกติด้วย UID <500 คืออะไร สมมติว่า UID นั้นไม่ใช่ของ UID ที่มีอยู่ซ้ำสิ่งที่ผิดพลาด?
นี่ไม่ใช่สิ่งที่ฉันต้องการทำ แต่สิ่งที่ฉันได้เห็นและต้องการทราบว่าทำไมไม่ควรทำ ในตัวอย่างนี้มันอยู่ใน RHEL5
คำตอบ:
ฉันไม่เชื่อว่ามีความเสี่ยงโดยธรรมชาตินี่เป็นสิ่งที่ทำเพื่อสร้างการแยกระหว่างบัญชีระบบและบัญชีผู้ใช้ การฝึกฝนการใช้ตัวเลขต่ำกว่า 500 จากประสบการณ์ของฉันคือ Redhat-ism และไม่มีอะไรมากไปกว่านั้น
บน Solaris ฉันเห็นผู้ใช้ที่ได้รับหมายเลขเริ่มต้นที่ 100 เช่นกันเพียงปีต่อมาค้นพบว่าเมื่อรวมระบบแผนกขนาดเล็ก 2 ระบบเข้าด้วยกันทำให้เกิดฝันร้ายเพราะมีผู้ใช้หลายคนใน 2 แผนกที่มี UID เดียวกัน / GID ที่ได้รับมอบหมาย
นี่เป็นความเสี่ยงหลัก / ปวดหัวเมื่อกำหนด UID ออกมา เนื่องจาก UID คือสิ่งที่เขียนไปยัง inode ในที่สุดสำหรับผู้ใช้ที่ได้รับไฟล์ / ไดเรกทอรีคุณไม่ต้องการทีโอทีต้องออกจากถนนเพื่อทำการfind
ค้นหาไฟล์จำนวนมากที่ UID 1234 เป็นเจ้าของและต้องเปลี่ยนเป็น 5678 .
ดังนั้นการใส่ความคิดลงไปในการเลือก UIDs ผู้ดูแลระบบสามารถหลีกเลี่ยงอาการปวดหัวตามท้องถนน
การใช้ 500 และสูงกว่าเป็นเพียงความพยายามของ Redhat (และ Unixes อื่น ๆ ) เพื่อให้บัฟเฟอร์ตัวเองเพียงพอที่บัญชีระบบใด ๆ ที่อาจจำเป็นต้องสร้างขึ้นจะไม่ได้รับการผสมกับ UID ที่กำหนดให้กับผู้ใช้
อนึ่งตัวเลข 500 ถูกขับเคลื่อนโดยการตั้งค่านี้ในไฟล์ปรับแต่ง, /etc/login.defs
.
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 500
UID_MAX 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 500
GID_MAX 60000
คุณสามารถเปลี่ยนสิ่งนี้เป็นสิ่งที่คุณต้องการหากคุณต้องการแทนที่พฤติกรรมเริ่มต้นโดยuseradd
/ adduser
คำสั่ง
หากคุณดูที่useradd
หน้า man คุณจะสังเกตเห็นส่วนนี้ที่กล่าวถึงค่าเริ่มต้นของ GID แต่ความคิดเห็นนี้ก็สามารถใช้กับ UID ได้เช่นกัน:
สิ่งที่สกัดมา
-g, --gid GROUP
The group name or number of the user´s initial login group. The group name
must exist. A group number must refer to an already existing group.
If not specified, the behavior of useradd will depend on the USERGROUPS_ENAB
variable in /etc/login.defs. If this variable is set to yes
(or -U/--user-group is specified on the command line), a group will be
created for the user, with the same name as her loginname. If the variable
is set to no (or -N/--no-user-group is specified on the command line),
useradd will set the primary group of the new user to the value specified by
the GROUP variable in /etc/default/useradd, or 100 by default.
อีกสิ่งหนึ่งที่ควรสังเกตในuseradd
หน้าคนคือบิตนี้ในการสร้างบัญชีระบบ
สิ่งที่สกัดมา
-r, --system
Create a system account.
System users will be created with no aging information in /etc/shadow,
and their numeric identifiers are choosen in the SYS_UID_MIN-SYS_UID_MAX
range, defined in /etc/login.defs, instead of UID_MIN-UID_MAX (and their
GID counterparts for the creation of groups).
Note that useradd will not create a home directory for such an user,
regardless of the default setting in /etc/login.defs (CREATE_HOME). You
have to specify the -m options if you want a home directory for a system
account to be created.
มันเป็นวิธีการนี้ ( useradd -r ...
) ที่มักใช้ในการเขียนสคริปต์ซึ่งรวมอยู่ในตัวจัดการแพ็คเกจต่างๆเช่น RPM เมื่อมีการติดตั้งแพคเกจ การเขียนสคริปต์ด้วยวิธีนี้จะช่วยให้ระบบเลือก UID / GID ที่พร้อมใช้งานถัดไปบนระบบที่กำหนดโดยอัตโนมัติโดยไม่มีความเสี่ยงในการเหยียบ UID / GID ที่กำหนดให้กับผู้ใช้ระบบแล้ว
จากมุมมองของเคอร์เนลมีผู้ใช้พิเศษเพียงคนเดียวเท่านั้น: UID 0 การแบ่งช่วงของ UID ด้วยเหตุผลด้านการบริหารทำให้ชีวิตของคุณง่ายขึ้น ช่วงทั่วไปคือผู้ขายระบบท้องถิ่นทั่วโลก
ผู้ใช้ผู้ขายจะได้รับการติดตั้งระหว่างการติดตั้งระบบครั้งแรกและได้รับการจัดการโดยผู้จัดจำหน่ายแบบคงที่ ผู้ใช้ระบบถูกติดตั้งต่อเครื่องขึ้นอยู่กับแพคเกจที่ติดตั้ง ผู้ใช้ส่วนใหญ่เพิ่ม / ลบ utilites มีข้อ จำกัด ช่วงการจัดการเหล่านี้แยกต่างหาก ผู้ใช้ท้องถิ่นเป็นผู้ใช้ทั่วไปและได้รับมอบหมายต่อเครื่อง ผู้ใช้ทั่วโลกได้รับมอบหมายจากฐานข้อมูลกลาง แต่เป็นผู้ใช้ปกติ การใช้ช่วง UID จะป้องกันความขัดแย้งระหว่างกลุ่มต่าง ๆ เหล่านี้ ที่ cutoffs เหล่านี้สามารถแตกต่างกัน แต่มักจะกำหนดค่าได้
ไม่มีอันตรายโดยธรรมชาติในการทำเช่นนี้ หากคุณสร้างผู้ใช้ด้วย UID 499 พวกเขาจะไม่ได้รับสิทธิ์พิเศษเพิ่มเติม เหตุผลที่แนะนำไม่ให้เป็นเพราะ UID นั้นสงวนไว้สำหรับผู้ใช้ระบบ ปัญหาที่อาจพบในการสร้าง UID เช่นนี้คือเมื่อบริการของระบบบางอย่างคาดว่า UID จะพร้อมใช้งาน มันเป็นเหมือนการสร้างบริการใหม่ที่ทำงานบนพอร์ตที่รู้จักกันดี - ไม่มีปัญหา แต่อย่างใด แต่มันก็ไม่ใช่วิธีปฏิบัติที่ดีและอาจทำให้เกิดปัญหาต่อไปเมื่อคุณตั้งค่า sshd, ftpd ฯลฯ
ที่กล่าวว่าฉันเห็นหลายระบบที่ผู้ใช้สร้างด้วย UID <500 โดยไม่มีปัญหา อย่างไรก็ตามเมื่อฐานผู้ใช้เติบโตและขณะนี้มีผู้ใช้หลายพันคนมันอาจเป็นเรื่องยากที่จะแยกความแตกต่างระหว่างบัญชีผู้ใช้และบัญชีระบบ ตามกฎของการไม่มีโพสต์ <500 มันง่ายมาก ดังนั้นจึงเป็นวิธีที่ดีในการจัดระเบียบบัญชีเช่นกัน
ไม่มีอันตรายที่แท้จริง เคอร์เนลไม่สนใจเกี่ยวกับค่า ID ผู้ใช้ยกเว้น 0 เครื่องมือการดูแลระบบส่วนใหญ่ไม่สนใจเช่นกัน - ส่วนน้อยมากของระบบสร้างความแตกต่างระหว่างผู้ใช้ระบบและผู้ใช้งานมนุษย์
ผู้ใช้ระบบมักจะมีกลุ่มเฉพาะดังนั้นจึงไม่น่าจะสร้างบัญชีที่เป็นของกลุ่มมากกว่าที่ควร
การแจกแจงบางอย่างจะสำรองช่วง 1–499 (เรดแฮทและญาติ) หรือ 1–999 (เดเบียนและญาติ) สำหรับผู้ใช้ระบบรวมถึงผู้ใช้ที่จัดสรรเมื่อติดตั้งแพ็คเกจที่มีบริการระบบที่ต้องการผู้ใช้เฉพาะ การประชุมของ Debian คือช่วง 1-99 จะถูกจัดสรรแบบคงที่ (ดังนั้นการสร้างผู้ใช้ที่เป็นมนุษย์ในช่วงนั้นเป็นความคิดที่แย่มากเนื่องจากอาจขัดแย้งกับผู้ใช้ระบบ) ในขณะที่ช่วง 100–999 มีการจัดสรรแบบไดนามิก (ดังนั้นการสร้างผู้ใช้มนุษย์ ในช่วงนั้นไม่เป็นอันตรายเนื่องจากผู้ใช้ระบบใหม่จะเลือก ID ผู้ใช้ฟรี)
คุณอาจพบกับความไม่สะดวกเล็ก ๆ น้อย ๆ เช่นผู้จัดการการแสดงผลที่ไม่ให้บริการผู้ใช้ด้วย UID ต่ำกว่าเกณฑ์ในรายการของพวกเขา
อันตรายหลักสำหรับเครื่องจักรที่แยกได้คือคุณมีแนวโน้มที่จะสร้างความสับสนให้กับผู้ดูแลระบบของคุณ สำหรับเครื่องในเครือข่ายที่ใช้ ID ผู้ใช้ร่วมกันคุณอาจพบข้อขัดแย้งกับเครื่องอื่น ๆ ที่ผู้ใช้เหล่านี้มี ID ผู้ใช้เดียวกันกับผู้ใช้ระบบ ในเครือข่ายที่มี ID ผู้ใช้ที่ใช้ร่วมกันจะเป็นการดีที่สุดที่จะยึดช่วง 1000–65533 หรือแม้แต่ 10,000–65533 สำหรับผู้ใช้ที่เป็นมนุษย์