Làm thế nào để cung cấp đặc quyền tắt máy cho người dùng?


9

Tôi đang sử dụng Ubuntu 11.04. Tôi muốn chạy một kịch bản kiểm tra một quy trình đang chạy và tắt hệ thống khi quá trình đó kết thúc. Để làm điều này, người dùng yêu cầu truy cập tắt máy để tập lệnh có thể được thực thi mà không yêu cầu mật khẩu.

Tôi đã tham khảo trang này và thêm văn bản trong tập tin sudoers của tôi. Tuy nhiên, nó vẫn hỏi tôi mật khẩu bất cứ khi nào tôi thực thi sudo shutdown -h now. Ngoài ra, tôi gặp lỗi khi yêu cầu quyền root, khi tôi thực hiện tắt máy mà không có sudo.

Tập tin sudoers của tôi trông giống như thế này.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
myusername    ALL = NOPASSWD: SHUTDOWN

Làm cách nào tôi có thể cấp quyền cho người dùng thực thi lệnh tắt máy mà không cần phải nhập mật khẩu theo cách thủ công?

Cảm ơn.


1
Bạn có thể gửi sudoerstập tin thực sự và toàn bộ của bạn , xin vui lòng?
enzotib

Câu trả lời:


6

Bạn có thể tắt hoặc khởi động lại bằng HAL hoặc ConsoleKit sẽ không yêu cầu bạn nhập tên người dùng / mật khẩu:

HAL (phiên bản Ubuntu cũ hơn):

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

ConsoleKit (phiên bản Ubuntu mới hơn, đã thử nghiệm trên Ubuntu 11.04):

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

7

Tôi đã làm nó như trong câu trả lời này , làm việc hoàn hảo cho tôi. Có lẽ cách tiếp cận của bạn bỏ lỡ visudomột phần?

Mở một dòng lệnh và gõ:

sudo visudo 

Trong Tệp mở ra, thêm dòng sau vào cuối:

yourusername ALL=NOPASSWD: /sbin/halt

Sau đó thoát khỏi trình chỉnh sửa và bảo vệ nó (CTRL + x).

Bây giờ bạn có thể tắt máy tính của mình khỏi dòng lệnh, ví dụ sau khi bạn tải xuống một cái gì đó:

wget UrlOfTheFileYouWantToDownload ; sudo halt

1

Cách đây một thời gian, tôi đã làm điều này bằng cách đặt suid (Đặt ID người dùng). Điều này làm cho chương trình thực thi với tư cách là chủ sở hữu của tệp chứ không phải người dùng đang chạy nó. Vì tắt máy được sở hữu bởi root nên điều này cho phép bạn tắt mà không cần sudo.

chmod u+s /sbin/shutdown

Có những ý nghĩa bảo mật mặc dù sau đó bất cứ ai cũng có thể chạy tắt máy. http://en.wikipedia.org/wiki/setuid


Nói chung, không nên sửa đổi các tệp hoặc siêu dữ liệu của các tệp, được cài đặt từ các gói, trừ các tệp cấu hình trong /etc.
enzotib

Hừm ... đúng rồi! Nhưng cách chính thức sau đó là gì? Chơi với polkit? Cũng không đẹp lắm ...
turbo

sudoTheo tôi, đó là cách đúng đắn, nhưng thật không may, người dùng không cho cơ hội xem sudoerstệp của nó và có gì sai với nó.
enzotib

Đây là điều duy nhất làm việc cho tôi.
Mark Stewart

0

Có vẻ như bạn muốn chạy tập lệnh gốc. Nếu bạn muốn chạy một kịch bản chờ đợi một cái gì đó kết thúc và sau đó tắt nguồn máy tính của bạn, thì bạn chỉ cần chạy tập lệnh với sudo. Điều đó sẽ hỏi mật khẩu của bạn khi bạn chạy tập lệnh, nhưng sau đó tập lệnh tự do tắt hệ thống mà không cần bất kỳ sự can thiệp nào nữa.

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.