Điều gì sẽ xảy ra nếu tôi tạo một tài khoản có tên là 'root'?


30

Nếu tôi tạo một tài khoản người dùng trong Ubuntu được gọi root, nó có tự động có quyền root không? Phá vỡ hệ thống? Gây ra một trục trặc trong ma trận? Chuyện gì sẽ xảy ra?


25
Đã có một tài khoản được gọi là root.
mikewhthing 8/10/2016

Câu trả lời:


46

Tên người dùng phải là duy nhất, vì vậy, như câu trả lời của Owen Hines đã đề cập , bạn sẽ không thể tạo người dùng này. Tuy nhiên, điểm mấu chốt ở đây là quyền hạn siêu người dùng (tất cả các quyền có thể) không được cấp bởi tên người dùng root, mà bởi UID.

Người dùng có UID 0 là siêu người dùng.

Vì vậy, nếu người dùng có UID 0 có một tên khác và bạn đã tạo một người dùng được gọi root, họ sẽ không có bất kỳ trạng thái đặc biệt nào.

Tôi giới thiệu bạn đến wiki thẻ !


Bạn có thể đổi tên root tài khoản hiện có và sau đó tạo root người dùng thông thường không?
emory

Như một lưu ý phụ, dường như có thể (mặc dù tôi chưa thử) để thay đổi tên người dùng uid 0 thành một tên khác, vì vậy siêu người dùng không được gọi root. Không phải là một ý tưởng tuyệt vời, nhưng có thể. Vì vậy, người ta có thể tạo một tài khoản siêu người dùng được gọi godbằng uid 0và một người dùng bình thường được gọi rootbằng uid 1000hoặc một số số khác.
Ian D. Scott

15

Nó sẽ không cho phép bạn vì đã có rootngười dùng.

Nhưng, như Florian Diesch đã nói trong các bình luận:

Một số công cụ sẽ khiếu nại nhưng bạn luôn có thể chỉnh sửa /etc/passwdetc/shadowthủ công để tạo người dùng thứ hai có tên root.


2
Và nếu bạn làm điều này, điều gì xảy ra chown root file?
fkraiem

1
@fkraiem, hmm .. câu hỏi hay, tôi không biết câu trả lời cho điều đó.
TheOdd

3
Điều gì đã xảy ra là cái đầu tiên trong tập tin sẽ thắng. Tôi không biết bây giờ.
Joshua

5

Đầu tiên, làm thế nào, như những người khác đã nêu, bạn thay đổi người dùng bằng UID 0 thành một thứ khác. Sau đó, bạn có thể tạo một người dùng bình thường với tên gốc và UID cao hơn 1000. Nó sẽ hoạt động "tốt". Tất cả các quyền và chức năng hệ thống cốt lõi sử dụng UID và không phải tên người dùng. Trên thực tế, đây là bước đầu tiên tốt trong việc làm cứng hệ thống Linux. (tốt hơn nhiều để vô hiệu hóa root, nhưng trước khi sudo chúng tôi thường làm điều này).

Bây giờ là những gì sẽ xảy ra.

Hầu hết thời gian không có gì. Tất cả các cuộc gọi hệ thống phải thực hiện với ủy quyền hoặc xác thực đều sử dụng UID (mà tôi biết). Và nó đã được như vậy trong một thời gian. Hệ thống của bạn sẽ tiếp tục chạy như bình thường. Các công cụ hệ thống sẽ phản ánh tên người dùng mới, nhưng vẫn tiếp tục hoạt động bình thường. Nói cách khác, "root" theo quy ước và không được đặt trong đá.

Điều đó nói rằng, tôi chắc chắn có một số công cụ và chương trình được viết kém. Các chương trình kiểm tra biến môi trường $ USER có thể hoạt động không chính xác. Thông thường đây là các kịch bản và các dự án nhỏ, nhưng bạn có thể dành thời gian theo dõi một cam kết tồi tệ đó, 6 năm trước trong fdisk khiến bạn phải đau đầu.

Đây là điều mà tôi đã từng làm mọi lúc. Đó là một bước dễ dàng và nằm trong quy tắc "tên người dùng không dự đoán được". Có nhiều cách tốt hơn để đạt được cùng một mục tiêu ngày hôm nay.


ý bạn là UID tôi nghĩ
Zanna

1

Như những người khác đã giải thích, đó là UID = 0 cung cấp cho người dùng "siêu năng lực", chứ không phải tên người dùng là "root". Vì vậy, nếu bạn bằng cách nào đó quản lý để tạo một người dùng khác gọi là "root" (sau khi đổi tên / xóa người dùng gốc) - trạng thái siêu của người dùng sẽ phụ thuộc vào UID mà bạn đã cung cấp.

Điều này cũng dẫn đến một ý tưởng thú vị khác: hoàn toàn có thể có nhiều người dùng có cùng UID (điều này làm cho họ về cơ bản là cùng một người dùng từ điểm cấp phép của hệ thống tệp nhưng cho phép có thư mục khác nhau, ví dụ như shell và home). Trên thực tế, một số hệ thống giống như UNIX có một tài khoản siêu người dùng khác gọi là toor (root backwards) cho phép có hai tài khoản siêu người dùng với các cài đặt khác nhau.


1

Cách tạo 'gốc' thứ 2:

Có, về lý thuyết, không được có hai người dùng có cùng tên người dùng hoặc cùng một ID. Và các tiện ích tiêu chuẩn là hoàn hảo và sẽ không tạo ra những người dùng như vậy cho bạn. Nhưng bạn luôn có thể chỉnh sửa / etc / passwd bằng tay.

Ví dụ, tôi đã làm:

$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'. 
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)

Như bạn thấy, chúng tôi đã root ngay bây giờ! Vâng, đó không phải là root thực sự (không phải uid = 0), nhưng đó là bốn chữ cái giống nhau. Ấn tượng và vô dụng.

Cách tạo 'root' thứ 2 tốt hơn:

Ngoài ra, bạn có thể làm sửa đổi khác. Để lại tên người dùng, (tên của bạn hoặc root2) nhưng thay đổi uid.

$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash

(xem, các trường UID và GID là số không) Bây giờ bạn có người dùng thông thường (không phải root), với tên người dùng gần như không đáng ngờ (hoặc tạo tên người dùng 'johndoe' để có hiệu quả tốt hơn), nhưng thực tế, người dùng này có siêu năng lực!

$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda

Command (m for help):

Như bạn thấy, người dùng thông thường không thể sử dụng fdisk trên / dev / sda, nhưng root2 có thể làm bất cứ điều gì!

Thủ thuật đơn giản này đôi khi được sử dụng sau khi hệ thống bị hack để cung cấp cửa sau. Ngay cả khi root thực sự sẽ thay đổi khóa / mật khẩu của mình, hacker vẫn sẽ có toàn quyền kiểm soát hệ thống thông qua người dùng khác với uid = 0.

Ma trận hoạt động như thế nào

Trên thực tế, không phải tên người dùng 'root', hay uid = 0 không phải là phép thuật. Đây chỉ là vấn đề của quy ước. Và nó thậm chí không phải lúc nào cũng đúng. (xem câu hỏi này: Tài khoản root luôn có UID / GID 0? ) Mã hạt nhân là huyền diệu. Trên thực tế, chính mã không gian người dùng - không thể làm bất cứ điều gì mà root có thể làm. Ngay cả khi chạy như root! Root điện nằm trong kernel. ví dụ: nếu bạn thực hiện "cat / etc / Shadow" (chỉ root thường có thể làm điều này), chương trình / bin / cat gọi hàm libc open () vẫn là mã không gian người dùng và hàm open () này thực hiện lệnh gọi hệ thống tới kernel. Sau đó, kernel tự quyết định làm gì. Ví dụ: kernel có thể cho phép một số thao tác nếu người dùng hiệu quả có id == 0.

Về lý thuyết, nếu bạn sẽ thay đổi một số mã trong kernel và xử lý người dùng 'dữ liệu www' khác nhau - một số thao tác có thể chỉ được phép cho người dùng 'dữ liệu www' (và thậm chí không được phép root).


0

Hầu hết các công cụ 'thân thiện với người dùng' sẽ kiểm tra điều này và sẽ không cho phép bạn tạo một tài khoản với tên người dùng đã được sử dụng.

Nếu bạn bỏ qua điều này và thêm thủ công tài khoản root thứ hai vào / etc / passwd và / etc / bóng, thì cái nào sẽ được sử dụng, tôi đoán sẽ phụ thuộc vào việc bạn đặt nó trước hay sau tài khoản gốc. Giống như tất cả các tài khoản người dùng trên một hệ thống unix, nó cũng sẽ chỉ có quyền truy cập siêu người dùng nếu UID của nó bằng 0, bất kể tên là gì.

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.