Làm thế nào để cấu hình pkexec?


32

Đọc những câu hỏi và câu trả lời:

đã mang đến cho tôi một cái khác sẽ tạo ra vấn đề cho người dùng mới của lệnh đó:

  • Làm thế nào để cấu hình pkexecđể sử dụng dễ dàng?

Ví dụ khi làm như sau:

(Mở tệp trong thiết bị đầu cuối)

pkexec nano /etc/mysql/my.cnf  

(Mở tệp trong GUI)

pkexec gedit /etc/mysql/my.cnf  

Cái cuối cùng nhận được lỗi sau:

 pkexec must be setuid root

Bây giờ điều này mang lại cho tôi các câu hỏi sau đây:

  1. Làm thế nào để cấu hình pkexecđể tránh nhận được điều này? Tương tự như cách sudo/ gksuhành xử khi làm điều tương tự (họ chỉ yêu cầu mật khẩu).

  2. Nếu có thể, làm thế nào để yêu cầu nó không yêu cầu mật khẩu sau lần đầu tiên áp dụng nó cho một lệnh (hoặc bao gồm lệnh đầu tiên nếu có thể định cấu hình)?

  3. Lưu tập tin cấu hình ở đâu nếu chưa có?

  4. Có ứng dụng GUI để định cấu hình pkexecsử dụng (Bộ chính sách) không?


1
Trong leiu của Ubuntu chăm sóc doanh nghiệp về vấn đề này trong 13.04, đây là những gì tôi làm cho gedit & nautilus. Hoạt động tốt ở đây nhưng sẽ không đăng dưới dạng câu trả lời vì đó chỉ là giải pháp của tôi cho đến khi Ubuntu quan tâm. ubuntuforums.org/ từ
doug

Hmm, không thể thêm nhận xét - vì vậy phải sử dụng câu trả lời ... Sử dụng: alias pkexec = 'pkexec env HIỂN THỊ = $ HIỂN THỊ XAUTHORITY = $ XAUTHORITY' Có nghĩa là gui đăng nhập trả về đường dẫn của env cuối cùng bị xử tử. Có cách nào để sắp xếp việc sử dụng "env HIỂN THỊ = $ HIỂN THỊ XAUTHORITY = $ XAUTHORITY" để pkexec gui trả lại đường dẫn đến lệnh cuối cùng được thực thi không? Xem pic tại đây: hộp thoại autkit auth

Câu trả lời:


39

Làm cách nào để định cấu hình pkexecđể tránh gặp lỗi khi chạy các ứng dụng GUI?

Tôi tìm thấy hai cách có thể:

  1. Như bạn có thể thấy, sử dụng như sau:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    sẽ không nhận được bất kỳ lỗi nào. Và điều này là bình thường vì man pkexecrất rõ ràng trong vấn đề này:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    Kết quả là bạn có thể tạo một bí danh ( vĩnh viễn ) (đây là cách đơn giản nhất):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Hoặc, (một lần nữa) như man pkexecnói:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    bạn có thể tạo một tệp chính sách mới /usr/share/polkit-1/actionsđược đặt tên com.ubuntu.pkexec.gedit.policybằng mã xml sau bên trong nơi điều quan trọng nhất là đặt thành org.freedesktop.policykit.exec.allow_guigiá trị không trống:

    <?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="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

Làm thế nào để nói với nó để không yêu cầu mật khẩu sau lần đầu tiên áp dụng nó vào một lệnh?

Đối với ba thẻ thiết lập: allow_any, allow_inactiveallow_activetừ các tập tin chính sách, các tùy chọn sau:

  • không : Người dùng không được phép thực hiện hành động. Do đó không cần xác thực.
  • Vâng : Người dùng được ủy quyền để thực hiện hành động mà không cần bất kỳ xác thực nào.
  • tự động : Yêu cầu xác thực nhưng người dùng không cần phải là người dùng quản trị.
  • auth_admin : xác thực là người dùng quản trị.
  • auth_elf_keep : Giống như auth_elf nhưng, nhưsudo , ủy quyền kéo dài một vài phút.
  • auth_admin_keep : Giống như auth_admin nhưng, như sudo, ủy quyền kéo dài một vài phút.

     Nguồn: Polkit - Cấu trúc - Hành động

Vì vậy, nếu bạn sử dụng tùy chọn auth_admin_keep (hoặc, như áp dụng, auth_elf_keep ),pkexec sẽ không yêu cầu nhập lại mật khẩu một thời gian (theo mặc định thời gian này được đặt thành 5 phút khi tôi kiểm tra). Nhược điểm ở đây là điều này chỉ áp dụng cho một - cùng - lệnh / ứng dụng và hợp lệ cho tất cả người dùng (trừ khi nó được ghi đè trong cấu hình sau này).

Lưu tập tin cấu hình ở đâu nếu chưa có?

Các tệp cấu hình hoặc định nghĩa polkit có thể được chia thành hai loại:

  • Các hành động được định nghĩa trong các tệp .policy XML nằm trong /usr/share/polkit-1/actions. Mỗi hành động có một tập các quyền mặc định được đính kèm (ví dụ: bạn cần xác định là quản trị viên để sử dụng hành động GParted). Mặc định có thể được ghi đè nhưng chỉnh sửa tệp hành động KHÔNG phải là cách chính xác. Tên của tệp chính sách này phải có định dạng này:

    com.ubuntu.pkexec.app_name.policy
  • Quy tắc ủy quyền được xác định trong tệp JavaScript .rules. Chúng được tìm thấy ở hai nơi: các gói của bên thứ 3 có thể sử dụng /usr/share/polkit-1/rules.d(mặc dù rất ít nếu có) và /etc/polkit-1/rules.ddành cho cấu hình cục bộ. Các tệp .rules chỉ định một tập hợp con của người dùng, tham khảo một (hoặc nhiều) hành động được chỉ định trong tệp hành động và xác định những hạn chế nào những hành động này có thể được thực hiện bởi những người dùng đó. Ví dụ: một tệp quy tắc có thể ghi đè yêu cầu mặc định cho tất cả người dùng để xác thực là quản trị viên khi sử dụng GParted, xác định rằng một số người dùng cụ thể không cần. Hoặc không được phép sử dụng GParted.

     Nguồn: Polkit - Cấu trúc

Có một ứng dụng GUI để cấu hình pkexecsử dụng?

Từ những gì tôi biết, cho đến bây giờ (18.01.2014) không tồn tại một cái gì đó như thế này. Nếu trong tương lai tôi sẽ tìm thấy thứ gì đó, tôi cũng sẽ không quên cập nhật câu trả lời này.


4
Thật là một câu trả lời đẹp !! Cảm ơn bạn rất nhiều. Bây giờ tôi đã hiểu tại sao tôi không thể chạy doublecmdvới ROOT PRIVELEGES, vì tôi cần xuất môi trường với DISPLAY & XAUTHORITY!! Chỉ cần một câu hỏi nhỏ: Có sự khác biệt nào trong chính sách viết hay chỉ chạy một chương trình với lệnh như pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdmọi lúc?
Ilia Rostovtsev

@IliaRostovtsev này tôi đang nghĩ, sẽ pkexectrở nên không an toàn như gksudothể chạy qua bí danh như vậy? có thể, thay vì bí danh, nó có thể là một tập lệnh có quyền root, có thể an toàn hơn không?
Sức mạnh Bảo Bình

@AquariusPower Theo cách bạn thấy nó có thể trở nên không an toàn? Tất nhiên bạn có thể thử, nhưng tôi không chắc. Vấn đề phát sinh khi bạn cần sử dụng GUI (X Server) chạy dưới 'bạn' và một chương trình GUI khác cần được chạy dưới quyền root. Chơi xung quanh và hậu kỳ xin vui lòng, trong trường hợp bạn tìm thấy một cái gì đó.
Ilia Rostovtsev

@ radu-rădeanu Trên Utopic auth_admin_keepdường như không hoạt động. Nếu tôi bắt đầu synap từ gui (tương đương với pkexec synaptic) nó sẽ hỏi mật khẩu cho mỗi lần. Bất cứ ý tưởng tại sao?
Khurshid Alam


0

Ngoài câu trả lời của Radu: Tôi sẽ không sử dụng bí danh pkexec, nhưng gksudo .

Tại sao? Bạn không cần phải viết lại kịch bản của bạn.

Tôi sử dụng cấu hình sau:

  • mở một thiết bị đầu cuối
  • cd /usr/local/bin
  • sudo gedit gksudo (tạo tập tin mới gọi là "gksudo"
  • viết nội dung sau:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (đừng quên $@ở cuối. Đây là để chuyển hướng tất cả các tham số)

  • lưu và đóng

  • làm cho tập tin thực thi: chmod 755 gksudo
  • Bây giờ bạn nên có một lệnh gksudo đầy đủ chức năng có sẵn trên hệ thống của bạn - vĩnh viễn.

Vì lý do tài liệu, tôi sẽ viết, những gì tôi đã thử và không thực hiện được:

  • bí danh pkexec = 'pkexec env [...]'
  • bí danh gksudo = 'pkexec [...]'
    • Không cố định và chỉ ở trong một thiết bị đầu cuối duy nhất
  • thêm bí danh vào ~/.bash_aliases
    • Hoạt động nếu bạn lần đầu tiên mở một thiết bị đầu cuối. Không hoạt động, nếu bạn nhân đôi tập lệnh
  • Tạo một liên kết đến pkexec với các tham số ( ln -s pkexec [...])
    • Sau khi google nhanh, có vẻ như linux không hỗ trợ các tham số trong liên kết
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.