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?
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?
Câu trả lời:
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
root
khô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 admin
và 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 root
là 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).
root
và toor
, cả hai đều có UID 0.
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).
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.
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