Làm thế nào bạn có thể biết nếu thực hiện một chương trình yêu cầu root?


10

Tôi hiểu rằng đây là một chút cơ bản và có lẽ là một câu hỏi ngớ ngẩn, nhưng tôi không thể tìm thấy câu trả lời.

Tôi hiểu rằng mọi tập tin đều có "Executable"bit.

Tôi giả định rằng các chương trình yêu cầu root, thuộc sở hữu của rootngười dùng và rootnhóm sẽ không có Executablebit Othervà điều đó sẽ ngăn người dùng không root thực thi những chương trình đó. Nhưng trong /bin/sbinthư mục tôi thấy rằng tất cả các tệp có quyền như-rwxr-xr-x

Vì vậy, những gì thực sự xác định nếu người dùng cần phải có quyền root để thực hiện một cái gì đó?


1
Theo mặc định, bạn hoặc bất kỳ người dùng nào cũng có thể thực hiện bất kỳ chương trình nào từ /binhoặc /sbinthư mục. Vấn đề là một số chương trình đang chạy khác nhau tùy thuộc vào người dùng nào chạy chúng.
Radu Rădeanu

Câu trả lời:


13

Đôi khi, đó là trong mã. Ví dụ: giữa chừng hwclock.c, bạn sẽ tìm thấy:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

sẽ thay đổi hành vi của chương trình nếu bạn root hoặc không.

Trong hầu hết các trường hợp khác, nó ẩn; ủy thác cho kernel. Ví dụ, nếu chương trình gọi cuộc gọi hệ thống cho phép bạn khởi động lại hệ thống, nó sẽ chỉ hoạt động nếu bạn đã root. Nếu bạn không root, bạn sẽ gặp lỗi "quyền bị từ chối" mà ứng dụng (nếu được viết tốt) chỉ đơn giản là báo cáo cho bạn. Hoặc bạn đang cố xóa một tập tin; nếu bạn có quyền trên tệp để làm điều đó, nó sẽ thành công; nếu không, nó phụ thuộc vào việc bạn có root hay không --- khi rmgọi unlink()kernel sẽ kiểm tra quyền.

Vì vậy, về nguyên tắc, bạn không thể nói chỉ nhìn vào sự cho phép của tệp thực thi nếu chương trình có yêu cầu quyền root hay không. Rất nhiều chương trình sẽ yêu cầu chúng chỉ cho một số hoạt động, vì vậy sẽ rất khó để làm một cái gì đó như thế. Trường hợp của hwclockmột (ai cũng có thể đọc đồng hồ nhưng chỉ root có thể thiết lập nó), nhưng có hàng trăm trong số họ ( kill, rm, cat...)

Sau đó là thế giới liên quan và thú vị của các chương trình setuid ...


Vì vậy, về cơ bản hạt nhân là "phụ trách của nó"? Nếu chương trình thực hiện cuộc gọi hệ thống, kernel xác định xem người dùng đang chạy chương trình có phải root hay không và thực thi nó?
Trưởng khoa

2
Về cơ bản, có. Chương trình có thể thực hiện các kiểm tra bổ sung, nhưng kiểm tra quyền là ở cấp độ kernel. Các chương trình gốc Setuid là ngoại lệ; họ luôn chạy bằng root nên họ cần tự kiểm tra quyền (và là một phông chữ đẹp về lỗi bảo mật ...)
Rmano
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.