Làm thế nào để ID người dùng thực sự và hiệu quả làm việc?


13

Khi một người dùng bình thường muốn thay đổi tệp passwd, người dùng sẽ được setuid cấp quyền truy cập hiệu quả cho người dùng. Người dùng tạm thời root và có thể chỉnh sửa passwd.

Tuy nhiên, bạn chỉ có thể chỉnh sửa mật khẩu của mình, còn không phải ai khác? Tuy nhiên, quyền truy cập người dùng hiệu quả của bạn là root. Vậy tại sao bạn không được phép thay đổi mật khẩu khác bên cạnh mật khẩu của mình?

Khi bạn chạy một chương trình với setuid, điều đó thực sự có nghĩa là gì khi người dùng hiệu quả là root, nhưng id người dùng thực sự vẫn là tên của bạn?

Câu trả lời:


13

Bạn không thể thay đổi mật khẩu khác vì chương trình sẽ không cho phép bạn. Chương trình có quyền hệ thống để thay đổi bất kỳ mật khẩu nào nó muốn, bởi vì nó đang chạy root, nhưng chương trình được thiết kế riêng để không cung cấp cho người dùng bất kỳ cách nào để có được mật khẩu sử dụng các quyền đó.

Nó không hoàn toàn là người dùng tạm thời trở thành root, đó là chương trình đáng tin cậy chạy với quyền root. Rõ ràng, chỉ những chương trình được thiết kế đặc biệt để hạn chế người dùng chỉ làm những gì họ được phép làm mới có thể được thực hiện một cách an toàn.


Vì vậy, trong trường hợp tôi mở shell, đặt uid thành 0 (sử dụng setreuid), để uid hiệu quả sẽ được root nhưng uid thực vẫn là tôi. Vì tôi không nghĩ cái vỏ đặc biệt có thứ gì đó được chế tạo để ngăn tôi, điều đó có nghĩa là tôi có quyền truy cập vào toàn bộ hệ thống phải không?
starcorn

Tôi tự hỏi trong bối cảnh của kỹ thuật tấn công stack stack. Trường hợp tin tặc độc hại mở ra một lớp vỏ với cấp độ siêu người dùng.
starcorn

@starcron: Vâng. Trong thực tế, các cuộc tấn công có thể được thể hiện bằng cách hiển thị cách sử dụng cuộc tấn công đó để tạo ra một vỏ gốc setuid.
David Schwartz

2

Bạn chỉ được phép thay đổi mật khẩu của mình khi có id người dùng gốc hiệu quả vì tại thời điểm thay đổi mật khẩu, id người dùng thực được kiểm tra không phải là id người dùng hiệu quả. Bạn chỉ có thể thay đổi id người dùng hiệu quả chứ không phải id người dùng thực.
Chỉ người dùng root mới có thể thay đổi id người dùng thực để chạy chương trình với tư cách là người dùng không có đặc quyền. Id người dùng thực không thể thay đổi vì nó được đặt tại thời điểm bắt đầu phiên.
Đó là lý do tại sao chỉ có thể thay đổi mật khẩu của bạn vì id người dùng thực sự không bị thay đổi (vì nó vẫn không phải là mật khẩu của bạn).


0

Một hack ban đầu trong Unix là tạo một liên kết tượng trưng cho tập lệnh shell setuid và gọi liên kết -i. Điều này dẫn đến việc tập lệnh được gọi như là sh -ithay vì thực thi tập lệnh được gọi -inhư dự định sẽ khởi chạy một lớp vỏ tương tác, sau đó cung cấp toàn bộ sức mạnh. ID người dùng hiệu quả có thể được sử dụng để sửa đổi passwdtệp cho bất kỳ người dùng hoặc root chính nó. Cách tốt nhất để bảo vệ chống lại điều này là sử dụng SELinux để ngăn các tập lệnh hoặc chương trình tin cậy sửa đổi bên ngoài khu vực mà Selinux cho phép chúng chạy.

Một kỹ thuật khác là có một bit bất biến trên các tệp quan trọng mà một bộ không thể được sửa đổi ngay cả bởi người dùng root (ngoài chế độ một người dùng)

Với quyền root, bạn có thể mời người dùng đăng nhập vào hệ thống của mình mà không cần mật khẩu và xuất hiện như bất kỳ người dùng nào nhưng các quy trình đặc quyền thông thường rất cố gắng để ngăn chặn điều này xảy ra.

Nếu bạn sử dụng một số hệ thống lưu trữ mạng, người dùng root sẽ được coi là không có ai trong không gian tệp đó thay vì root cho phép các máy tính không tin cậy tham gia vào một mạng đáng tin cậy như khuôn viên trường đại học.


0

Bạn chỉ được phép thay đổi mật khẩu của mình, vì chương trình đặt mật khẩu, mặc dù nó có khả năng làm bất cứ điều gì, được lập trình để chỉ thay đổi mật khẩu. Nó sẽ kiểm tra id người dùng thực, để quyết định thay đổi mật khẩu nào.

Vì bạn không thể thay đổi id người dùng thực của mình, ngay cả khi gọi chương trình set-uid, chương trình có thể sử dụng nó để thực hiện bảo mật. Hệ điều hành từ bỏ bảo mật cho chương trình root uid đã đặt.

Lưu ý: chương trình gốc uid đã đặt cũng có thể thay đổi id người dùng thực (nhưng điều này không được sử dụng trong trường hợp sử dụng này).

Cảnh báo: thiết lập root uid được coi là có hại (ít hơn nhiều so với lý tưởng). Chúng ta nên sử dụng các khả năng trong những ngày này (xem Các cách khác nhau để đặt quyền truy cập tệp v.v. trên gnu / linuxhttp://man7.org/linux/man-pages/man7/capabilities.7.html )

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.