Đầu tiên, làm rõ:
Nó đòi hỏi phải có đặc quyền root để thay đổi quyền cho một tập tin.
Từ man 2 chmod, chúng ta có thể thấy rằng lệnh gọi hệ thống chmod () sẽ trả về EPERM (lỗi quyền) nếu:
UID hiệu quả không phù hợp với chủ sở hữu của tệp và quy trình này không có đặc quyền (Linux: nó không có khả năng CAP_FOWNER).
Điều này thường có nghĩa là bạn hoặc là cần phải là chủ sở hữu của tập tin hoặc người dùng root. Nhưng chúng ta có thể thấy rằng tình hình trong Linux có thể phức tạp hơn một chút.
Vì vậy, có bất kỳ mối quan hệ giữa root và kernel?
Như văn bản bạn đã trích dẫn đã chỉ ra, kernel có trách nhiệm kiểm tra xem UID của quá trình thực hiện cuộc gọi hệ thống (nghĩa là người dùng đang chạy như vậy) có được phép thực hiện những gì nó yêu cầu không. Do đó, siêu năng lực của root xuất phát từ thực tế là kernel đã được lập trình để luôn cho phép một hoạt động được yêu cầu bởi người dùng root (UID = 0).
Trong trường hợp của Linux, hầu hết các quyền kiểm tra khác nhau xảy ra đều kiểm tra xem UID đã cho có khả năng cần thiết hay không . Hệ thống khả năng cho phép kiểm soát chi tiết hơn đối với những người được phép làm những gì.
Tuy nhiên, để duy trì ý nghĩa UNIX truyền thống của người dùng "root", một quy trình được thực hiện với UID bằng 0 có tất cả các khả năng.
Lưu ý rằng trong khi các quy trình chạy dưới dạng UID = 0 có các đặc quyền siêu người dùng, chúng vẫn phải thực hiện các yêu cầu của kernel thông qua giao diện gọi hệ thống.
Do đó, một quá trình không gian người dùng, ngay cả khi chạy bằng root, vẫn bị giới hạn ở những gì nó có thể làm khi nó đang chạy trong " chế độ người dùng " và hạt nhân đang chạy trong " chế độ kernel ", thực sự là các chế độ hoạt động riêng biệt cho CPU. Trong chế độ kernel, một tiến trình có thể truy cập bất kỳ bộ nhớ hoặc đưa ra bất kỳ lệnh nào. Trong chế độ người dùng (trên CPU x86 thực tế có một số chế độ được bảo vệ khác nhau), một quá trình chỉ có thể truy cập vào bộ nhớ của chính nó và chỉ có thể đưa ra một số hướng dẫn. Do đó, một quá trình không gian người dùng đang chạy như root vẫn chỉ có quyền truy cập vào các tính năng chế độ kernel mà kernel tiếp xúc với nó.