Làm thế nào để gnome khởi động lại mà không có quyền root?


8

Tôi đang đọc cuốn sách phát triển nhân Linux , trong chương 5 "Thực hiện cuộc gọi hệ thống" trang 77 nói

Ví dụ: có khả năng (CAP_SYS_NICE) kiểm tra xem người gọi có khả năng sửa đổi các giá trị đẹp của các quy trình khác hay không. Theo mặc định, siêu người dùng sở hữu tất cả các khả năng và nonroot không sở hữu. Ví dụ, đây là cuộc gọi hệ thống khởi động lại (). Lưu ý cách bước đầu tiên của nó là đảm bảo rằng quy trình gọi có CAP_SYS_REBOOT. Nếu một câu lệnh có điều kiện bị xóa, bất kỳ quá trình nào cũng có thể khởi động lại hệ thống.

Tuy nhiên, trong Debian Sid của tôi, tôi có thể khởi động lại máy bằng cách sử dụng gnome hoặc bằng cách thực thi / sbin / khởi động lại mà không cần sudo hoặc su. Sao có thể như thế được?

Có lẽ với systemctl?

ls -l /sbin/reboot 
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl

EDIT: Nhóm người dùng của tôi

[damian@xvz:~]$ groups 
damian sudo wireshark bumblebee

EDIT 2: quyền systemctl

[damian@xvz:~]$ ls -l /bin/systemctl 
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl

Có lẽ là vậy systemctl . Điều gì ls -l /bin/systemctlnói với bạn?
G-Man nói 'Phục hồi Monica'

Câu trả lời:


12

Điều này được thực hiện thông qua một trình quản lý ủy quyền được gọi là polkit:

polkit cung cấp API ủy quyền dự định sẽ được sử dụng bởi các chương trình đặc quyền (Dịch vụ cung cấp dịch vụ dành cho các chương trình không được ưu tiên

Với systemdpolkitngười dùng với phiên không từ xa có thể ban hành các lệnh liên quan đến nguồn điện. Bạn có thể liệt kê tất cả các polkithành động đã đăng ký và nhận thông tin chi tiết về bất kỳ hành động nào trong số chúng pkaction(được gọi mà không có đối số, nó sẽ liệt kê tất cả các id hành động).
Trong trường hợp cụ thể này, id hành động là org.freedesktop.login1.rebootnhư vậy nếu bạn chạy:

pkaction --action-id org.freedesktop.login1.reboot --verbose

đầu ra phải giống như:

org.freedesktop.login1.reboot:
  description:       Reboot the system
  message:           Authentication is required for rebooting the system.
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:              
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   yes

Ở đây, active: yescó nghĩa là người dùng trong phiên hoạt động được ủy quyền để khởi động lại hệ thống (chi tiết về ủy quyền ngầm trên polkittrang). Bạn có thể kiểm tra xem phiên của bạn có hoạt động với:

logincl show-session $ XDG_SESSION_ID --property = Hoạt động
Active=yes

1
điều đó có nghĩa là bất kỳ chương trình nào tôi chạy đều có thể khởi động lại máy mà không cần sự cho phép của tôi?
osdamv

1
@osdamv - giống như bất kỳ chương trình nào bạn chạy, rm -rfngười dùng của bạn có thể gửi tệp ...
don_crissti

3
@osdamv Lưu ý rằng bạn có thể chạy tất cả các chương trình mà bạn không tin tưởng sử dụng sudo --user=jimmymà người dùng jimmykhông không có quyền thực thi lệnh polkit ...
Bakuriu

Làm thế nào để tôi thực sự chạy pkaction này?
Geremia

@Geremia - Tôi không hiểu câu hỏi.
don_crissti
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.