Cho phép tắt máy Linux


8

Giả sử bạn cài đặt một môi trường máy tính để bàn, giả sử ubfox hoặc debian. Bạn có thể tắt hệ thống bằng cách nhấp vào nút ở đâu đó trên menu hệ thống như một người dùng bình thường. Bạn không cần phải chuyển sang superuser để thực hiện điều đó.

Tuy nhiên, trong cùng một môi trường máy tính để bàn, nếu tôi mở một thiết bị đầu cuối (giả sử là thiết bị đầu cuối gnome) như một người dùng bình thường và gõ

shutdown -h now

Tôi sẽ được nhắc nhở bởi

shutdown: need to be root

Cách duy nhất để tắt máy là chuẩn bị lệnh bằng sudo.

Bất cứ ai có thể giải thích tại sao điều này là như vậy?

Cảm ơn KC


Câu trả lời:


8

Câu hỏi được đặt ra bởi K.Chen là: tại sao tôi cần các đặc quyền sudo khi tôi làm điều đó từ CLI, ahile Tôi không cần các đặc quyền đó khi tôi làm điều đó từ GUI.

Phần đầu tiên của câu trả lời là những người thiết kế Môi trường máy tính để bàn, như Gnome, KDE, Xfce, Mate, Cinnamon, ... cố gắng đơn giản hóa công việc của người dùng của họ và họ định cấu hình tắt và khởi động lại mà không yêu cầu thông tin xác thực. Điều này, tình cờ, ngụ ý rằng phải có một chuỗi tắt máy không liên quan đến tắt chương trình, không yêu cầu đặc quyền sudo (không có cách nào khác).

Tôi không biết chi tiết cách mỗi DE thực hiện nó, nhưng tôi biết rằng có một cách nhẹ nhàng để đưa xuống hoặc khởi động lại / tắt / ngủ đông hệ thống của bạn, không yêu cầu quyền root. Bạn có thể tìm thấy bài viết gốc trong bài đăng trên Diễn đàn Arch Linux . Về bản chất, nó có nghĩa là ban hành các lệnh hese:

tạm dừng lại

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

khởi động lại

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

đình chỉ

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

ngủ đông

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

Tôi đoán là các nút GUI sử dụng khoảng các lệnh này. Để chắc chắn một người nên xem mã, nhưng tôi tin rằng đây là một vụ cá cược an toàn.


1
Nếu ai đó đăng nhập từ xa vào một máy cũng có môi trường máy tính để bàn đang chạy, người đó có thể đưa ra các lệnh này và tắt máy / khởi động lại / tạm dừng / ngủ đông thành công không?
gerrit

Có một khía cạnh độc hại cho câu hỏi này, tôi tin rằng một số quyết định nên được thực hiện.
MariusMatutiae

1
Tại sao độc hại? Nếu nó có thể bị lạm dụng, sysops nên biết và sau đó biết cách bảo vệ chống lại nó.
gerrit

Tôi không nói rằng bạn là độc hại, nhưng việc sử dụng độc hại có thể được tạo ra từ thông tin này. Tôi đã hối hận vì đã chia sẻ nó ... Có lẽ tôi nên làm như @Matteo
MariusMatutiae

5

Lý do đằng sau quyết định thiết kế này không phải là kỹ thuật (bạn có thể có một shutdownlệnh không đặc quyền hoặc yêu cầu mật khẩu trong GUI).

  • Khi sử dụng một môi trường máy tính để bàn của người dùng được cho là để có quyền truy cập vật lý vào máy. Sau đó, tốt hơn là cho phép tắt máy sạch hơn là để người dùng nhấn nút nguồn hoặc rút dây nguồn.

  • Khi sử dụng shell, người dùng có thể là người dùng từ xa và để tránh tắt máy từ xa, nhiều đặc quyền được yêu cầu.

Đây không phải là quy tắc mà chỉ là mặc định dựa trên các giả định: bạn có thể có một người dùng cục bộ trong một vỏ và một người dùng từ xa với môi trường máy tính để bàn. Nếu bạn muốn chọn hành vi mặc định, bạn có thể cấu hình hệ thống của mình cho phù hợp.


Tôi thấy quan điểm của bạn, @Matteo. Nhưng như MariusMatutiae đã nói, dưới mui xe DE phải gọi một số chương trình khác ngoài "tắt máy" để tắt máy mà không có đặc quyền siêu người dùng. Bạn có manh mối gì không?
K.Chen

1

Sudo (superuser do) cho phép quản trị viên hệ thống cung cấp cho một số người dùng (hoặc nhóm người dùng) khả năng chạy một số (hoặc tất cả) lệnh dưới dạng root trong khi ghi nhật ký tất cả các lệnh và đối số. lệnh shutdown -h hoặc lệnh init 0 có thể được sử dụng để tắt máy. Nhưng cả hai lệnh đều yêu cầu quyền root để thực thi.

Lệnh định vị trong / sbin phải có đặc quyền gốc để thực thi nó. Để tìm vị trí của lệnh tắt máy,

loại mà tắt máy trong thiết bị đầu cuối.

Hy vọng bây giờ nghi ngờ của bạn là rõ ràng :)

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.