บัญชีรูทมี UID / GID 0 เสมอหรือไม่


50

ในทุกระบบ Linux ที่ฉันจัดการบัญชีรูทมี GID และ UID เป็น 0 รับประกันได้หรือเป็นไปได้ว่าระบบจะให้รูท ID อื่นหรือไม่


3
ID 0 มีสิทธิ์ทั้งหมด ชื่อจริง (หรือชื่อ -multiple-) อาจแตกต่างกัน เช่นเซิร์ฟเวอร์ของฉันมีผู้ใช้ 0 คนสองคน หนึ่งเรียกว่า 'รูต' หนึ่งเรียกว่า 'toor'
Hennes

คำตอบ:


80

คำถามของคุณมีสองส่วน

บัญชี 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 ใช้เพื่อจัดเตรียมการตั้งค่าเชลล์ให้ผู้ใช้รูทกำหนดให้ผู้ใช้รูทใช้เชลล์เริ่มต้นซึ่งรับประกันว่าจะมีอยู่บนพาร์ติชันรูทของระบบ (มีประโยชน์สำหรับการกู้คืน)


15
มีรหัสอยู่ในเคอร์เนลเพื่อตรวจสอบรูท uid == 0 ใช่มันเป็นรหัสที่ยากและถาวร
คนรวย Homolka

1
BSD มักจะมีrootและtoorทั้งสองมี UID 0
Simon Richter

@SimonRichter ซึ่งในกรณีนี้มีบัญชี superuser ที่มีชื่อrootดังนั้นจึงไม่มีปัญหาตราบใดที่ห้องสมุดร้านรับรองความถูกต้องไม่สับสนกับผู้ใช้สองคนที่มี UID เดียวกัน (ในกรณีที่ BSD จะไม่ทำเช่นนั้น วิธีหรือไลบรารีจะได้รับการแก้ไข)
CVn

มีรหัสในเคอร์เนลที่ใช้ UID = 0 เป็นตัวแทนของรูทและเก็บไว้ในตัวแปรที่ชื่อว่า "root_uid" แต่ฉันไม่พบสิ่งใด (6 ปีต่อมา) ซึ่งขึ้นอยู่กับผู้ใช้ที่ชื่อ "รูท" ไม่ว่าจะเป็น UID ที่อยู่ใน / etc / passwd หรือไม่นั้นจะมีกระบวนการเปิดตัวในที่สุด w / UID = 0 :)
dannysauer

15

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 เสมอ


1
OOF ความเจ็บปวดของการเลือกเพียงหนึ่งคำตอบที่ยอมรับ ...
Tanaki

5
@ ทานากิโดยทั่วไป "ยอมรับ" คำตอบที่ช่วยให้คุณตอบคำถามของคุณได้มากที่สุดและยกเลิกคำตอบทั้งหมดที่คุณคิดว่ามีประโยชน์ ไม่มีอะไรจะพูดว่าคุณต้องยอมรับคำตอบที่ได้รับการโหวตสูงสุดหรือเป็นลายลักษณ์อักษรครั้งแรก
CVn

1

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