ในทุกระบบ Linux ที่ฉันจัดการบัญชีรูทมี GID และ UID เป็น 0 รับประกันได้หรือเป็นไปได้ว่าระบบจะให้รูท ID อื่นหรือไม่
ในทุกระบบ Linux ที่ฉันจัดการบัญชีรูทมี GID และ UID เป็น 0 รับประกันได้หรือเป็นไปได้ว่าระบบจะให้รูท ID อื่นหรือไม่
คำตอบ:
คำถามของคุณมีสองส่วน
บัญชี superuser มี uid / gid 0/0 เสมอบน Linux หรือไม่
ใช่. ตามที่ชี้ให้เห็นโดยRich Homolkaในความคิดเห็นมีรหัสในเคอร์เนลที่ตรวจสอบ uid 0 อย่างชัดเจนเมื่อต้องการตรวจสอบผู้ใช้รูตซึ่งหมายความว่ารูทนั้นจะมีuid 0 เป็นอย่างน้อย
ชื่อบัญชีผู้ใช้ที่มี uid 0 เสมอ
root
หรือไม่
ไม่ root
เป็นเพียงชื่อที่แสดงใน / etc / passwd หรือที่เก็บการตรวจสอบความถูกต้องอื่น ๆ คุณก็เช่นกันสามารถเรียกบัญชีadmin
และระบบปฏิบัติการของตัวเองจะไม่สนใจ root
แต่การใช้งานบางคนอาจจะไม่มากเหมือนมันเพราะพวกเขาคาดหวังว่าจะมีชีวิตอยู่ได้รับการยกเว้นบัญชีชื่อ การเรียกใช้บัญชี uid 0 บน a * nix root
เป็นข้อตกลงที่จัดขึ้นอย่างยิ่งยวด แต่ไม่จำเป็นต้องใช้กับระบบ
นอกจากนี้ยังเป็นที่น่าสังเกตว่าในขณะที่ออกมาชี้โดยไซมอนริกเตอร์บน BSDs มักจะมีอยู่สอง uid 0 บัญชีโดยการประชุมชื่อtoor
(ซึ่งก็คือ "ราก" สะกดกลับหลังและยัง lexically มาหลังจากที่ root
ในรายการเรียงตามตัวอักษร) ตัวอย่างเช่นFreeBSD ใช้เพื่อจัดเตรียมการตั้งค่าเชลล์ให้ผู้ใช้รูทกำหนดให้ผู้ใช้รูทใช้เชลล์เริ่มต้นซึ่งรับประกันว่าจะมีอยู่บนพาร์ติชันรูทของระบบ (มีประโยชน์สำหรับการกู้คืน)
root
และtoor
ทั้งสองมี UID 0
root
ดังนั้นจึงไม่มีปัญหาตราบใดที่ห้องสมุดร้านรับรองความถูกต้องไม่สับสนกับผู้ใช้สองคนที่มี UID เดียวกัน (ในกรณีที่ BSD จะไม่ทำเช่นนั้น วิธีหรือไลบรารีจะได้รับการแก้ไข)
1) ผู้ดูแลระบบอยู่เสมอ uid == 0 นี่คือรหัสในเคอร์เนล มันต้องใช้การเข้ารหัสในเคอร์เนลเพื่อเปลี่ยนแปลงสิ่งนี้ มีจุดไม่มากในเรื่องนี้ดังนั้นจึงไม่ได้ทำ ตัวอย่างเช่นมันจะไม่สอดคล้องกันสำหรับยูนิกซ์อื่น ๆ ที่แบ่งปัน NFS เดียวกันเช่น
2) uid 0 ไม่จำเป็นต้องจับคู่กับ root ตัวอย่างที่ดีที่สุดคือ FreeBSD มันมีสอง uid == 0 บัญชีความแตกต่างเป็นเปลือก รูทมีเชลล์ / bin / sh ซึ่งเป็นเชลล์แบบง่าย ๆ มีประโยชน์สำหรับเมื่อดิสก์ของคุณไม่ดีและคุณต้องการ fsck / usr toor ใช้ tcsh ซึ่งมีประโยชน์มากกว่าในสถานการณ์ที่ไม่ฉุกเฉินเนื่องจากมีสิ่งต่าง ๆ เช่นประวัติศาสตร์ ฯลฯ
อีกตัวอย่างส่วนตัวมากขึ้น; งานหนึ่งที่ฉันมีที่พวกเขามีรูต equiv (เช่น uid = 0) บัญชีผ่าน NIS รหัสผ่านว่างเปล่า! เพราะดูแลระบบใหม่ไม่สามารถจำรหัสผ่านรูทของเครื่องได้ ฉันตะโกนเกี่ยวกับเรื่องนี้ด้วยเหตุผลที่ชัดเจน (รหัสผ่าน NIS ตามคำนิยามไม่สามารถซ่อนความว่างเปล่าของพวกเขาได้) ฉันไม่มีความสุขเกี่ยวกับบัญชีนี้
และมันไม่ใช่ระบบที่ให้ uid 0 เป็น root แต่เป็นคุณ คุณเปลี่ยนไฟล์ของฉันโดยใช้ไฟล์ passwd หรือไดเร็กตอรี่การตั้งชื่ออื่น ๆ (NIS, ldap) แต่มันไม่ได้ถูกคอมไพล์แม้ว่าคุณควรมี uid 0 บัญชีอย่างน้อยหนึ่งบัญชีใน / etc / passwd เนื่องจากคุณอาจไม่มีเครือข่าย .
ดังนั้น root จะเป็น uid 0 เสมอ แต่ uid 0 ไม่จำเป็นต้องเป็น root เสมอ
สำหรับระบบที่ใช้เซิร์ฟเวอร์ nonStop ROOT_UID ไม่ใช่ 0 แต่ 65535
ผู้ใช้และกลุ่ม OSS สภาพแวดล้อม OSS ไม่ได้ให้ชื่อผู้ใช้และ ID ผู้ใช้ที่เป็นค่าเริ่มต้นทั่วไปของ UNIX เว้นแต่พวกเขาจะถูกสร้างโดยผู้ดูแลระบบไซต์อย่างชัดเจน อย่างไรก็ตามชื่อผู้ใช้ OSS และ ID ผู้ใช้ที่เทียบเท่าจะมีอยู่ ตัวอย่างเช่นสิทธิ์ตามปกติที่เชื่อมโยงกับรูทชื่อผู้ใช้ UNIX และ ID ผู้ใช้ 0 มีอยู่สำหรับ ID ผู้ใช้ OSS (UID) 65535 (รหัสซุปเปอร์) ซึ่งเป็นผู้ใช้ SUPER.SUPER และชื่อแทน
ดูhttps://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf
ใน coreutils คุณสามารถค้นหาไฟล์ส่วนหัว root-uid.h:
/* The user ID that always has appropriate privileges in the POSIX sense.
Copyright 2012-2016 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Written by Paul Eggert. */
#ifndef ROOT_UID_H_
#define ROOT_UID_H_
/* The user ID that always has appropriate privileges in the POSIX sense. */
#ifdef __TANDEM
# define ROOT_UID 65535
#else
# define ROOT_UID 0
#endif
#endif