2012-04-11 27 views
10

Tôi đang xây dựng tiện ích mở rộng vỏ Gnome và tôi muốn có thể thực hiện một số điều có đặc quyền leo thang. Vì vậy, tôi nghĩ rằng tôi cần phải sử dụng "bộ chính sách", nhưng tôi không biết làm thế nào để làm đi về việc này.Leo thang đặc quyền vỏ Gnome

Vì vậy, nói tôi muốn làm một cái gì đó giống như ifconfig eth0 down hoặc ifconfig eth0 up

tôi có thể chạy từ nhà ga: pkexec ifconfig eth0 down và nó sẽ nhắc nhập mật khẩu và sau đó làm điều đó.

Nhưng, tôi phải làm điều đó từ bên trong tiện ích mở rộng như thế nào?

Tôi khá chắc chắn rằng nó có liên quan đến việc tạo một tệp trong/usr/share/polkit-1/actions, nhưng tôi không thể tìm thấy bất kỳ thứ gì trên internet hoặc cách khác.

Tôi muốn có thể thiết lập để không cần nhập mật khẩu và tiện ích chỉ có thể chạy lệnh nhất định bất cứ khi nào.

Tôi biết rằng thực sự là một ý tưởng tồi khi cho phép bất kỳ lệnh nào được chạy. Đó không phải là những gì tôi yêu cầu, tôi muốn có thể chỉ cần chạy một chương trình/lệnh đơn.

EDIT: Tôi không chắc chắn, nhưng tôi nghĩ rằng có thể không thể không cần phải nhập mật khẩu. Tôi chỉ biết rằng sudo không yêu cầu mật khẩu trong một thời gian sau lần đầu tiên, vì vậy tôi muốn có chức năng tương tự. Không chắc chắn những gì có thể.

+0

Điều này nói chung sẽ không hoạt động tốt, bởi vì phần mở rộng của trình bao (trong JavaScript) sẽ chạy trong cùng một quá trình với chính shell, do đó nó sẽ hiển thị Tất cả các loại bảo mật "rò rỉ ..." - Đặt cược an toàn, trên thực tế, có thể sử dụng 'pkexec' hoặc cách ly bit" không an toàn "của mã đặc quyền trong một tiến trình riêng biệt ... PS: Việc nhắc lại mật khẩu bằng' sudo' et al là một thiết lập bảo mật toàn hệ thống; mặc định thường là nhắc lại sau một (dài) trong khi – BRFennPocock

+0

@BRPocock có sử dụng 'pkexec' là những gì tôi muốn làm. Làm thế nào tôi có thể làm điều đó từ bên trong phần mở rộng? – Jay

Trả lời

2

Đó là một thời gian dài kể từ khi tôi đã không làm việc với PolicyKit, nhưng từ những gì tôi nhớ, bạn phải thực sự để tạo ra một tập tin trong hành động/thư mục, với nội dung như sau:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE policyconfig PUBLIC 
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" 
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> 
<policyconfig> 

    <action id="org.freedesktop.policykit.pkexec.run-ifconfig"> 
    <description>Configure network</description> 
    <message>Authentication is required to set ifconfig parameters</message> 
    <defaults> 
     <allow_any>no</allow_any> 
     <allow_inactive>no</allow_inactive> 
     <allow_active>...</allow_active> 
    </defaults> 
    <annotate key="org.freedesktop.policykit.exec.path">/sbin/ifconfig</annotate> 
    </action> 

</policyconfig> 

Bạn phải thay đổi giá trị trong:

<allow_active>...</allow_active> 

Giá trị bạn muốn. Lựa chọn một giá trị:

  • "không" sẽ từ chối truy cập
  • "yes" sẽ mặc nhiên cho phép truy cập
  • "auth_user" yêu cầu xác thực người dùng
  • "auth_admin" requires authentication admin.
  • "auth_user_keep" và "auth_admin_keep" hoạt động tương tự nhưng vẫn giữ lại xác thực trong vài phút sau đó.
  • Cộng với một số giá trị khác, xem here.

Thay đổi giá trị của khóa allow_active thành "có" nên dừng yêu cầu xác thực.

Sau đó, bạn cần điều chỉnh tệp hành động theo nhu cầu của bạn và gọi nó.

Hugo,

1

Tôi gặp phải vấn đề tương tự khi thử và triển khai bộ chọn để điều chỉnh. Đây là những gì tôi nghĩ ra.

Khi người khác trả lời, bạn có thể cần viết tệp chính sách (tôi đã sử dụng "auth_admin"). Tôi đã đặt nó trong "/ usr/share/polkit-1/actions/tuned-adm."Tôi không nghĩ rằng tôi có thể phân phối thông qua mô hình mở rộng, vì vậy tôi sẽ phải hỏi ngược dòng để bao gồm nó.

Tiếp theo, tôi đã sử dụng lệnh pkexec và lệnh của mình để nhận" popup sudo "và nhận nó làm việc

const GLib = imports.gi.GLib; 
const Util = imports.misc.util; 
this.pkexec_path = GLib.find_program_in_path('pkexec'); 
this.tunedadm_path = GLib.find_program_in_path('tuned-adm'); 
let result = Util.trySpawnCommandLine(this.pkexec_path + " " + this.tunedadm_path + " list") 

kicker thực sự ở đây là tôi đã sử dụng một vài phương pháp khác để chạy các dòng lệnh và họ sẽ bị khóa gnome-shell tôi thấy đoạn code ở đây:... https://github.com/nodefourtytwo/gnome-shell-extension-cpu-freq/blob/master/extension.js được đặc biệt tiện dụng

Các vấn đề liên quan