Làm thế nào để cấu hình pkexec để không yêu cầu mật khẩu?


12

Tôi có một ứng dụng GUI cần gọi một daemon (được viết bằng Python) với các đặc quyền siêu người dùng. Tôi muốn làm điều này mà không cần nhắc người dùng nhập mật khẩu.

Vì daemon là một tập lệnh, tôi không thể đặt bit SUID trực tiếp. Tôi có thể viết một trình bao bọc C cho việc này, nhưng tôi không muốn phát minh lại bánh xe, đặc biệt là khi lỗi của tôi có thể dẫn đến bảo mật hệ thống bị xâm phạm nghiêm trọng.

Những gì tôi thường làm trong tình huống này là thêm một dòng trong /etc/sudoersđó cho phép người dùng thực thi daemon với quyền root mà không cần mật khẩu, sử dụng chỉ thị NOPASSWD. Điều này hoạt động tốt từ dòng lệnh. Tuy nhiên, khi tôi làm điều này từ GUI, một pkexechộp thoại bật lên hỏi mật khẩu của người dùng. Có vẻ như trên Ubuntu, các cuộc gọi đến sudotừ GUI bằng cách nào đó đang bị chặn bởi pkexec.

Có một cách sạch sẽ xung quanh này? Tôi thực sự không phải đối phó với những rắc rối của một kịch bản setuid.


Về ứng dụng nào bạn nói?
Radu Rădeanu

Bất kỳ ứng dụng GUI. Khi một ứng dụng GUI cố chạy sudo somecommand, hộp thoại bật lên là pkexechộp thoại mật khẩu, bất kể có chính sách sudoers nào cho phép thực thi chương trình hay không.
Chinmay Kanchi

Câu trả lời:


14

Thật không đúng khi nói rằng: "Dường như trên Ubuntu, các cuộc gọi đến sudotừ GUI bằng cách nào đó đã bị chặn bởi pkexec" . pkexeckhông có nhiều điểm chung với sudo. Ngược lại sudo, pkexeckhông cấp quyền root cho toàn bộ quá trình, mà cho phép mức độ kiểm soát tốt hơn của chính sách hệ thống tập trung.

Bây giờ, nếu bạn muốn chạy một ứng dụng GUI mà không bị yêu cầu bởi mật khẩu pkexec, điều này không khó thực hiện. Hãy lấy ví dụ GParted . Khi bạn mở nó, bạn sẽ thấy cửa sổ hộp thoại sau hỏi bạn bằng mật khẩu:

xác thực gparted

Nhấp vào Chi tiết và cửa sổ hộp thoại sẽ trông giống như sau:

xác thực gparted - chi tiết

Từ đây, tất cả những gì bạn phải làm là mở tệp bằng cách sử dụng lệnh sau:/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

và thay đổi các dòng sau:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

với những điều sau đây:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

Lưu file và đóng nó lại. Tiếp theo, khi bạn mở GParted, bạn sẽ không được yêu cầu nhập mật khẩu nữa.


Vâng, pkexec thực sự chặn các cuộc gọi đến sudo. Hãy để tôi xem nếu tôi có thể xây dựng một ví dụ tối thiểu về hành vi này.
Chinmay Kanchi

Tôi không thể sao chép điều này trong một ứng dụng đơn giản, nó chỉ có thể xảy ra trong một số tình huống rất cụ thể và tôi không có thời gian để theo dõi lỗi. Tôi sẽ chấp nhận câu trả lời của bạn. Chúc mừng.
Chinmay Kanchi

@ChinmayKanchi Hãy rõ ràng hơn. Tôi sẽ lấy ví dụ một lần nữa gparted. Khi bạn chạy từ thiết bị đầu cuối sudo gparted, bạn chạy /usr/sbin/gpartedtệp với quyền root. Khi bạn bắt đầu gpartedtừ GUI, trên thực tế, bạn bắt đầu gparted-pkexec(bạn có thể xác minh /usr/share/applications/gparted.desktoptệp bên trong này ), /usr/bin/gparted-pkexecđó là một tập lệnh shell có mục đích là để chạy lệnh sau: pkexec "/usr/sbin/gparted"tương đương với pkexec gparted. Vì vậy, không có gì để làm với sudo. Và lệnh này bạn nên sử dụng trong terminal, không sudo gparted.
Radu Rădeanu

1
@ChinmayKanchi sudochỉ nên được sử dụng cho các ứng dụng shell, không phải ứng dụng GUI. Xem man sudoman pkexectrong ý nghĩa này.
Radu Rădeanu

Vâng, tôi nhận thức được cả hai điểm của bạn. Tình huống của tôi là tôi có một ứng dụng GUI (do tôi viết) cố gắng khởi chạy chương trình shell (daemon, cũng do tôi viết) bằng sudo. Vì một số lý do, làm điều này dẫn đến việc pkexec được gọi thay vì sudo, điều đó có nghĩa là mọi chính sách sudo mà tôi đã tạo cho trình nền đều bị bỏ qua.
Chinmay Kanchi
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.