Tài khoản root luôn có UID / GID 0?


50

Trên tất cả các hệ thống Linux mà tôi đã quản lý, tài khoản root có GID và UID bằng 0. Điều này có được đảm bảo không, hoặc có khả năng hệ thống sẽ cấp cho một ID khác không?


3
ID 0 có tất cả các quyền. Tên thực tế (hoặc tên -multipl-) có thể khác nhau. Ví dụ: máy chủ của tôi có hai người dùng 0 uid. Một cái gọi là 'root', một cái gọi là 'toor'.
Hennes

Câu trả lời:


80

Thực tế có hai phần cho câu hỏi của bạn.

Tài khoản superuser luôn có uid / gid 0/0 trên Linux?

Đúng. Như được chỉ ra bởi Giàu Homolka trong một bình luận , có mã trong kernel mà rõ ràng kiểm tra cho uid 0 khi cần phải kiểm tra cho người dùng root, có nghĩa là gốc luôn có ít nhất uid 0.

Có phải tên của tài khoản người dùng với uid 0 luôn rootkhông?

Số root chỉ là một tên, được liệt kê trong / etc / passwd hoặc một số cửa hàng xác thực khác. Bạn cũng có thể gọi tài khoản adminvà hệ điều hành sẽ không quan tâm, nhưng một số ứng dụng có thể không hoàn toàn thích vì họ hy vọng sẽ tồn tại một tài khoản đặc quyền có tên root. Gọi tài khoản uid 0 trên * nix rootlà một quy ước được tổ chức rất mạnh mẽ, nhưng hệ thống không yêu cầu (mặc dù có thể được yêu cầu bởi một số phần mềm người dùng, có thể bao gồm các tiện ích quản trị hệ thống).

Cũng đáng lưu ý rằng, như Simon Richter đã chỉ ra , trên BSD thường tồn tại một tài khoản uid 0 thứ hai , theo quy ước có tên toor(đó là "gốc" đánh vần ngược, và cũng xuất hiện theo sau root trong danh sách được sắp xếp theo thứ tự abc). Ví dụ, FreeBSD sử dụng nó để cung cấp cho người dùng root một cài đặt shell tùy chỉnh, để lại cho người dùng root một shell mặc định được đảm bảo tồn tại trên phân vùng gốc của hệ thống (hữu ích cho mục đích khôi phục).


15
Có mã trong kernel để kiểm tra root, uid == 0. Vâng, đó là mã cứng và vĩnh viễn.
Rich Homolka

1
BSD thường có roottoor, cả hai đều có UID 0.
Simon Richter

@SimonRichter Trong trường hợp đó tồn tại một tài khoản siêu người dùng có tên root, do đó, không có vấn đề gì miễn là các thư viện cửa hàng xác thực không bị nhầm lẫn ở hai người dùng có cùng UID (trong trường hợp đó, BSD sẽ không làm điều đó cách, hoặc các thư viện sẽ được sửa chữa).
một CVn

Có mã trong kernel sử dụng UID = 0 làm đại diện cho root và lưu trữ trong các biến có tên "root_uid", nhưng tôi không tìm thấy gì (6 năm sau) mà thực sự phụ thuộc vào người dùng được đặt tên là "root". Dù UID có ở / etc / passwd hay không, cuối cùng, sẽ có các quy trình được khởi chạy w / UID = 0. :)
dannysauer

15

1) quản trị viên luôn là uid == 0. Điều này được mã hóa trong kernel. Nó sẽ mất một số mã hóa trong kernel để thay đổi điều này. Không có nhiều điểm cho vấn đề này, vì vậy nó không được thực hiện. Ví dụ, nó sẽ không nhất quán với các unix khác chia sẻ cùng một NFS chẳng hạn.

2) uid 0 không nhất thiết phải ánh xạ tới root. Ví dụ tốt nhất là FreeBSD. Nó có hai tài khoản uid == 0, sự khác biệt là vỏ. root có shell / bin / sh, đây là một shell đơn giản, hữu ích khi đĩa của bạn xấu và bạn cần fsck / usr. toor sử dụng tcsh, hữu ích hơn nhiều trong các tình huống không khẩn cấp, vì nó có những thứ như lịch sử, v.v.

Một ví dụ khác, cá nhân hơn; một công việc tôi đã có khi họ có tài khoản gốc (ví dụ uid = 0) trên NIS. Mật khẩu, trống! Bởi vì sysadmin mới không thể nhớ mật khẩu gốc trên máy. Tôi đã hét lên về điều này vì những lý do rõ ràng (mật khẩu NIS theo định nghĩa không thể che giấu sự trống rỗng của chúng). Tôi không hài lòng về tài khoản này.

Và nó thực sự không phải là hệ thống cung cấp cho uid 0 là root, chính là bạn. Bạn thay đổi tệp này bằng cách sử dụng các tệp passwd hoặc các thư mục đặt tên khác (NIS, ldap) nhưng nó không được biên dịch. Mặc dù bạn nên có ít nhất một tài khoản uid 0 trong / etc / passwd, vì bạn có thể không có mạng khi bạn thực sự cần nó .

Vì vậy, root luôn là uid 0, nhưng uid 0 không nhất thiết phải luôn là root.


1
Ôi, nỗi đau khi chỉ chọn một câu trả lời được chấp nhận ...
Tanaki

5
@Tanaki Nói chung, "chấp nhận" câu trả lời giúp bạn trả lời câu hỏi của bạn nhiều nhất và nêu lên tất cả các câu trả lời bạn thấy hữu ích. Không có gì nói rằng bạn phải chấp nhận câu trả lời được bình chọn cao nhất hoặc bằng văn bản đầu tiên.
một CVn

1

Vâng, đối với các hệ thống sử dụng máy chủ nonStop, ROOT_UID không phải là 0 mà là 65535.

Người dùng và nhóm OSS Môi trường OSS không cung cấp tên người dùng và ID người dùng mặc định UNIX phổ biến trừ khi chúng được quản trị viên trang web tạo rõ ràng. Tuy nhiên, tên người dùng OSS và ID người dùng tương đương vẫn tồn tại. Ví dụ: các đặc quyền thường được liên kết với gốc tên người dùng UNIX và ID người dùng 0 tồn tại cho ID người dùng OSS (UID) là 65535 (siêu ID), đó là SUPER.SUPER và bí danh của người dùng.

Xem https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf

Trong coreutils, bạn có thể tìm thấy tệp tiêu đề 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.