Sự khác biệt giữa người dùng sudo và người dùng root [đã đóng]


21

Các /etc/sudoersdanh sách tập tin mà người dùng có thể làm những gì với sudolệnh

Người dùng root tạo và sửa đổi /etc/sudoerstập tin.

Khái niệm này là khó khăn cho tôi để hiểu.

Nếu tất cả người dùng có quyền riêng tư sudo thuộc về sudoersnhóm, thì tất cả họ có thể trở thành root bằng cách đưa ra sudo sulệnh.

Vậy thì ai là người dùng root thực sự và làm thế nào để anh ta kiểm soát quyền hạn của người dùng trong nhóm sudoers?

Xin vui lòng giải thích cho tôi.


4
Tôi nghĩ bạn cần mở rộng về phần khó hiểu.
garethTheRed

người dùng root là ai Câu hỏi này rất khó để tôi hiểu. Bởi vì người dùng humn chỉ có thể tin vào nhóm sudoers
rancho

@rancho cập nhật câu hỏi, xin vui lòng
peterph


Câu trả lời đơn giản cho câu hỏi cơ bản của bạn (dựa trên nhận xét về câu trả lời): Đúng là sự khác biệt giữa rootquyền truy cập và sudoquyền trở nên không liên quan NẾU bạn cho phép sudo suđược chạy. Tuy nhiên, bạn không phải cho phép điều đó. Bạn chỉ có thể cho phép một nhóm lệnh cụ thể, ví dụ: chỉ cấp sudoquyền truy cập sysadmin cho các lệnh sao lưu cụ thể.
tự đại diện

Câu trả lời:


29

Tóm tắt điều hành: "root" là tên thật của tài khoản quản trị viên. "sudo" là một lệnh cho phép người dùng thông thường thực hiện các tác vụ quản trị. "Sudo" không phải là người dùng.


Câu trả lời dài:

"root" (còn gọi là "superuser") là tên của tài khoản quản trị viên hệ thống. Nguồn gốc của cái tên hơi cổ xưa, nhưng điều đó không thành vấn đề.

Người dùng root có id người dùng 0 và trên danh nghĩa có đặc quyền không giới hạn. Root có thể truy cập bất kỳ tệp nào, chạy bất kỳ chương trình nào, thực hiện bất kỳ cuộc gọi hệ thống nào và sửa đổi bất kỳ cài đặt nào. (Nhưng xem bên dưới¹).

Trước khi phát minh ra lệnh "sudo", nếu bạn muốn thực hiện các tác vụ quản trị, bạn phải đăng nhập bằng root, bằng cách nào đó nhận được dấu nhắc đăng nhập bằng cách nào đó hoặc bằng sulệnh ("su" viết tắt cho người dùng thay thế.))

Đó là một chút rắc rối và cũng không cho phép bạn cung cấp cho người dùng quyền quản trị một phần. Vì vậy, lệnh "sudo" (viết tắt của "người dùng thay thế") đã được phát minh.

Lệnh "sudo" cho phép bạn thực thi các lệnh với đặc quyền siêu người dùng miễn là id người dùng của bạn nằm trong tệp sudoers, cung cấp cho bạn ủy quyền cần thiết.

Vì vậy, ví dụ sudo vi /etc/hostssẽ cho phép bạn chỉnh sửa tệp máy chủ như thể bạn đang chạy bằng root. Bạn thậm chí không cần mật khẩu root, chỉ cần mật khẩu đăng nhập của riêng bạn.

Và tất nhiên, sudo susẽ cho phép bạn đơn giản trở thành root. Kết quả giống như khi bạn đã đăng nhập bằng root hoặc thực thi sulệnh, ngoại trừ việc bạn không cần biết mật khẩu gốc nhưng bạn cần phải có trong tệp sudoers.

Tệp sudoers xác định ai có thể sử dụng lệnh sudo và họ có thể làm gì với nó.

Tệp sudoers là thứ cung cấp cho bạn nhiều quản trị viên⁴. Thực tế, quản trị viên của bạn đã root, cộng với tất cả mọi người được liệt kê trong tệp sudoers. Không có tệp sudoers, quản trị viên duy nhất là root.

Trên thực tế, trong các tổ chức nơi người khác quản lý máy tính của bạn cho bạn, việc bạn không biết mật khẩu gốc của máy tính của mình là điều khá phổ biến - miễn là bạn đang ở trong tệp sudoers, điều đó không thành vấn đề.

Tại một công ty tôi làm việc, với một trang trại máy chủ ginormous, chỉ có một số rất rất ít người biết mật khẩu gốc. Thay vào đó, có một cơ sở dữ liệu về những người được phép làm việc trên máy chủ nào. Một quy trình tự động sẽ thêm bạn vào các tệp sudoers của những máy chủ mà bạn được ủy quyền truy cập và xóa bạn khi ủy quyền của bạn hết hạn.


Một điều nữa: các phiên bản Unix hiện đại giờ đây có thể hạn chế ngay cả những gì người dùng root có thể làm.

Trong SELinux (Linux được tăng cường bảo mật), thực sự có một danh sách kiểm soát truy cập để xác định chương trình nào có thể làm gì và thậm chí root không thể vượt qua những hạn chế đó.

Trong hệ thống Bảo vệ toàn vẹn hệ thống (SIP) của Apple (còn gọi là "rootless"), một số tệp và thư mục nhất định bị khóa để chỉ các ứng dụng trong danh sách trắng thích hợp mới có thể truy cập chúng.

Các hệ thống này tồn tại để bảo vệ một hệ thống khỏi trường hợp người dùng độc hại quản lý để có quyền truy cập root. (Hoặc trong một số trường hợp, để ngăn người dùng bẻ khóa các thiết bị nhúng của họ.) Vì những lý do rõ ràng, rất khó để vượt qua những hạn chế này, ngay cả với quyền truy cập root.

² Dấu nhắc "đăng nhập:" là một phần cổ xưa khác của lịch sử Unix, có từ khi tất cả chúng ta sử dụng các thiết bị đầu cuối ascii trên các dòng nối tiếp, thay vì các hệ thống cửa sổ. Bạn vẫn có thể nhận được lời nhắc "đăng nhập:" bằng cách nhập loginbất kỳ cửa sổ đầu cuối nào hoặc bằng cách mở kết nối ssh (hoặc telnet hoặc rsh) với máy tính của bạn từ nơi khác. Bạn có thể đăng nhập như một người dùng khác từ đó nếu bạn muốn. (Và nếu máy tính của bạn có cổng nối tiếp, bạn vẫn có thể định cấu hình để cho phép đăng nhập vào chúng.)

Cũng có thể các chương trình riêng lẻ được cấp quyền truy cập root. Các chương trình này có thể làm bất cứ điều gì mà người dùng có quyền truy cập root có thể làm, ngay cả khi được chạy bởi người dùng thông thường. Chúng thường được giới hạn trong các nhiệm vụ cụ thể. Ví dụ, chương trình crontab có quyền root để nó có thể chỉnh sửa các bảng cron. Rõ ràng, "sudo" có quyền root để nó có thể làm những gì nó làm.

Tôi sẽ đề cập đến một điểm nữa mà tôi đã nhấn mạnh trước đó. Tôi đã sử dụng "quản trị viên" và "root" thay thế cho nhau, nhưng có những loại quản trị viên khác. Chúng thường được gọi là "tài khoản vai trò", nghĩa là những tài khoản này không thuộc về con người thực tế, mà thay vào đó tồn tại để thực hiện một số vai trò cụ thể trên hệ thống. Nếu bạn xem /etc/passwdtệp trên hệ thống của mình, bạn sẽ tìm thấy hàng chục và hàng chục tài khoản như vậy.

Ví dụ: nếu mysql được cài đặt trên hệ thống của bạn, sẽ có người dùng "mysql" và tất cả các tệp cơ sở dữ liệu, tệp cấu hình, v.v ... tất cả sẽ thuộc quyền sở hữu của người dùng đó. Chỉ người dùng đó mới có quyền cần thiết để truy cập các tệp và chạy máy chủ mysql. Theo một nghĩa nào đó, người dùng đó sẽ là một tài khoản quản trị viên, nhưng chỉ dành cho mysql.

Nếu bạn cần thực hiện các tác vụ quản trị cơ sở dữ liệu, bạn sẽ trở thành "mysql" bằng su mysqllệnh hoặc sử dụng sudonơi tệp sudoers cung cấp cho bạn đặc quyền mysql cho các lệnh cụ thể đó.


1
Các tập tin sudoers là những gì cung cấp cho bạn nhiều quản trị viên. Thực tế, quản trị viên của bạn đã root, cộng với tất cả mọi người được liệt kê trong tệp sudoers. Không có tệp sudoers, quản trị viên duy nhất là root.
Edward Falk

1
"Trong SELinux (Linux được tăng cường bảo mật), thực sự có một danh sách kiểm soát truy cập để xác định ai có thể làm gì và thậm chí root không thể vượt qua những hạn chế đó." - nếu ngay cả root không thể vượt qua những hạn chế đó thì ai sẽ tạo ra những hạn chế đó ngay từ đầu?
rancho

1
Để làm rõ điều này: "Thực tế, quản trị viên của bạn đã root, cộng với tất cả mọi người được liệt kê trong tệp sudoers." mục nhập sudoers không có nghĩa là truy cập đầy đủ gốc hoặc thậm chí cấp gốc; Tôi có thể cấp cho Sven khả năng khởi động lại một tác nhân giám sát chạy dưới dạng đơn vị.
Jeff Schaller

1
The "sudo" command lets you execute commands with superuser privileges as long as your user id is in the sudoers file [..]. Trên máy của tôi (Solus OS 3), điều này là sai. Tên người dùng của tôi không có trong tập tin sudoers. và tôi vẫn có thể làm được sudo.
Martin Andersson

2
Câu trả lời cũ và đây là pedantry, nhưng sulà viết tắt của "người dùng thay thế"; sudodo đó là "người dùng thay thế làm". Bạn có thể sử dụng suđể đăng nhập như một người dùng khác, không chỉ root. Và bạn có thể sử dụng sudođể thực thi các lệnh như một người dùng khác.
josaphatv
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.