Người dùng truy cập vào các hành động này được kiểm soát bởi polkit. Cụ thể, chúng tương ứng với các hành động sau:
org.freedesktop.consolekit.system.stop
org.freedesktop.consolekit.system.restart
org.freedesktop.upower.suspend
org.freedesktop.upower.hibernate
Tất cả các hành động này được cho phép theo mặc định cho người dùng cục bộ đang hoạt động (mặc dù consolekit
hạn chế thêm hai quyền đầu tiên chỉ hoạt động khi có một người dùng đăng nhập vào hệ thống).
Nếu bạn muốn tắt các hành động này, hãy tạo một tệp /etc/polkit-1/50-local.d/disable-shutdown.pkla
có chứa một cái gì đó như:
[Disable shutdown/whatever]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart;org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate
ResultAny=no
ResultInactive=no
ResultActive=no
Điều này sẽ ngăn chặn những hành động hoàn thành. Thông tin thêm về các tệp chính sách này có thể được tìm thấy bằng cách chạy man pklocalauthority
.
Nếu bạn đang cố gắng hạn chế root
, điều này sẽ chỉ là một bất tiện nhỏ. Theo định nghĩa, root
là một tài khoản không bị hạn chế theo hệ thống kiểm soát truy cập tùy ý UNIX truyền thống. Nếu bạn không thể tin tưởng người dùng mà bạn đã cấp root
quyền truy cập đầy đủ , thì bạn đã gặp vấn đề lớn hơn là họ chỉ tắt hệ thống.
Lưu ý rằng trong các phiên bản Ubuntu sau này, ai đó đã quyết định phá vỡ tính tương thích. Như đã trả lời trong Làm thế nào để tắt tắt / khởi động lại từ lightdm trong 14.04? hành động dường như đã thay đổi thành " org.freedesktop . login1 .reboot" (và tương tự).
Ví dụ: trong 14.04 thêm các dòng sau đây là /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla
công trình:
[Disable lightdm PowerMgmt]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no
Ngoài ra, lưu ý rằng phương thức này chỉ chặn các lệnh khởi động lại / etc được phát ra từ GUI. Để chặn các lệnh khởi động lại / etc từ dòng lệnh, người ta có thể sử dụng molly-Guard - như được giải thích trong Vô hiệu hóa lệnh tắt cho tất cả người dùng, thậm chí cả hậu quả gốc?
shutdown
vàpm-suspend
từ/sbin/
và/bin/