Tôi cần một tương đương với gksu trong 18.04


23

Tôi đã đọc rất nhiều chủ đề về việc gksu bị xóa khỏi nhiều hương vị Linux, bao gồm cả Ubuntu 18.04. Nhiều người nói rằng gksu là một điều kinh tởm và không người dùng nào cần phải sử dụng bất cứ thứ gì như vậy. Tôi có 2 ví dụ, theo như tôi biết, tôi phải có một cái gì đó cho phép tôi chạy bằng root (không chỉ để chỉnh sửa tập tin).

Đầu tiên, tôi có nhu cầu khởi động mysql chỉ sau khi thư mục được mã hóa được mở trên lệnh (GUI). Điều này có nghĩa là có một tập lệnh được chạy bởi hệ thống mã hóa khởi động dịch vụ mysql. Điều đó phải được thực hiện với quyền root, vì vậy tôi sử dụng gksu trong tập lệnh khởi động đó yêu cầu tôi nhập mật khẩu. Làm thế nào khác tôi có thể bắt đầu một dịch vụ từ một hệ thống GUI?

Tôi cũng chạy sao lưu hệ thống Ubuntu với quyền root, nếu không, nhiều tệp hệ thống không thể được sao lưu. Vì vậy, tập tin máy tính để bàn sử dụng gksu để bắt đầu sao lưu.

pkexec có vẻ phức tạp, cần tập tin chính sách. Đó có phải là sự thay thế duy nhất, và nếu vậy, tại sao nó lại an toàn hơn?

Các câu trả lời khác cho các câu hỏi tương tự dường như không giải quyết các vấn đề riêng lẻ mà mọi người hiện có rằng gksu không còn nữa (hoặc khó tìm hơn ...). Tôi nghĩ những câu hỏi như vậy từ những người dùng không có chuyên môn sẽ được hưởng lợi từ những câu trả lời chi tiết hơn. Bây giờ tôi có một số, và vì vậy muốn trả lời câu hỏi của riêng tôi.


pkexeclàm việc cho bạn thay vì gksu?
Thomas Ward

@karel đồng ý, mặc dù bài đăng đó không nêu rõ 'sự thay thế' pkexec. (bạn phải săn lùng nó)
Thomas Ward

2
Bạn cũng có thể thử sử dụng sudo -H GUI-programvà nếu Wayland có liên kết này, điều đó có thể hữu ích, ... có cách giải quyết, nếu bạn có một công cụ GUI, hoạt động tốt cho bạn và cần có quyền nâng cao.
sudodus

3
Đây là một chủ đề gây tranh cãi nhưng, trong một vỏ hạt, chạy các ứng dụng đồ họa như root là một rủi ro bảo mật. Mặc dù bạn và nhiều người khác có thể không đồng ý với điều này, nhưng việc chạy các ứng dụng đồ họa dưới dạng root không được khuyến khích bởi Ubuntu và nhiều bản phát hành. Ubuntu đang trong quá trình viết các giải pháp thay thế, pkexec và các chính sách khác. Bạn có thể gửi báo cáo lỗi và các nhà phát triển sẽ làm việc trên một giải pháp cho các chương trình mà họ cảm thấy nên làm như vậy, chẳng hạn như trình quản lý gói. Điều này rất phức tạp vì nó liên quan đến X và Wayland. Thay thế sử dụng các ứng dụng không đồ họa hoặc viết của riêng bạn. Mã hóa không yêu cầu gui
Panther

Tôi sử dụng gnome-encfs-manager, cung cấp gui để gắn các thư mục được mã hóa. Nó cung cấp cho một kịch bản được chạy khi ổ đĩa được gắn kết. Trong kịch bản đó, tôi cần bắt đầu mysql. Làm thế nào khác tôi có thể làm điều này? Đối với wayland, việc không cho phép guis synap hay gparted là vô lý theo quan điểm của một người dùng máy tính để bàn gia đình thông thường. Chúng là vô giá. Các hệ thống có thể an toàn đến mức không ai muốn sử dụng chúng - có sự cân bằng và trong trường hợp cụ thể này (wayland), người dùng phải đúng.
dán

Câu trả lời:



8

Tôi biết có câu trả lời cho vấn đề này ở nơi khác, nhưng tôi chưa tìm thấy câu trả lời nào rõ ràng và đơn giản để tôi giải quyết vấn đề này. Vì vậy, tôi đã đào xung quanh ở nhiều nơi và nghĩ ra điều này. Tôi vẫn không hiểu tại sao cộng đồng Linux quyết định tạo ra cuộc sống khó khăn cho những người dùng máy tính để bàn đơn giản của chúng tôi (và tôi đã cố gắng hiểu nhiều lời giải thích), nhưng đó là cuộc sống. Tôi sử dụng GUI cho mọi thứ, chỉ sử dụng cửa sổ đầu cuối khi cần thiết. Theo như tôi có thể nói với các giải pháp bằng cách sử dụng các tùy chọn sudo thì đừng giúp điều này. Vì vậy, tôi có .desktopcác tập tin và tập lệnh thực hiện tất cả các công việc tôi sử dụng thường xuyên.

Có hai giải pháp cơ bản.

1. Cài đặt lại gksu

Giải pháp này có thể hoặc không thể kéo dài. Kỹ thuật viên chống gksu có thể tìm cách ngăn chặn nó. Nhưng trong lúc này, hãy tải xuống 2 .debtệp từ libgksu (x64)gksu (x64) . Cài đặt libgksu2 và sau đó gksu bằng gdebi hoặc bất kỳ công cụ cài đặt nào bạn muốn sử dụng. Điều này làm việc cho tôi.

2. Sử dụng pkexec

Là một giải pháp lâu dài (hy vọng), tôi đã xoay sở để khiến pkexec hoạt động cho các công cụ tôi cần.

  1. Để bắt đầu một dịch vụ từ một kịch bản. Nó chỉ ra rằng không cần gksu hoặc pkexec. Chỉ cần start service xyzvà nó sẽ yêu cầu mật khẩu của bạn.

  2. Để chỉnh sửa tệp gốc hoặc để mở nautilus dưới quyền root, hãy xem Cách chạy Gedit và Nautilus dưới dạng root với pkexec Thay vì gksu - Web Upd8 . Điều này cung cấp hai tệp 'polkit' cho pkexec, cho phép bạn sử dụng tập lệnh chứa pkexec geditđể chỉnh sửa tệp gốc và tương tự cho nautilus. Các hướng dẫn là tất cả trên trang web đó. Tôi hiện đang sử dụng 'filemanager-hành động' để cung cấp các hành động nhấp chuột phải để chạy gedit hoặc nautilus với quyền root.

  3. Tôi chạy deja-dup là root để sao lưu hệ thống lõi. Tôi làm điều này không thường xuyên, ngoại trừ /home(vì /hometôi thường xuyên sao lưu không cần quyền truy cập root). Để làm việc này, tôi lấy một bản sao của tệp được sử dụng ở bước 2 cho gedit và chỉnh sửa nó cho deja-dup. Tôi không thực sự hiểu nội dung, nhưng nó hoạt động, cả để sao lưu và khôi phục tệp, sử dụng pkexec backuptrong tập lệnh được khởi tạo từ tệp .desktop. Tôi đã thêm tệp mới này để /usr/share/polkit-1/actionschứa:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD polkit Policy Configuration 1.0//EN" "http://www.freedesktop.org/software/polkit/policyconfig-1.dtd">
    
    <policyconfig>
      <icon_name>deja-dup</icon_name>
    
      <action id="org.gnome.DejaDup">
        <description gettext-domain="deja-dup">Backup</description>
        <message gettext-domain="deja-dup">Privileges are required to backup system files</message>
        <defaults>
        <allow_any>no</allow_any>
        <allow_inactive>auth_admin</allow_inactive>
        <allow_active>auth_admin</allow_active>
         </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/deja-dup</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

    Lưu ý rằng có một tệp deja-dup khác trong thư mục này, nó tuyên bố sẽ giúp khôi phục các tệp, nhưng tôi không thể làm cho nó hoạt động được. Tập tin mới này cần phải có một tên duy nhất, chẳng hạn như org.gnome.DejaDupNew.policy.

Tôi, bây giờ, chạy mà không có gksu. Tôi sẽ cố gắng tiếp tục trên mạng


Lệnh bắt đầu sao lưu là pkexec deja-dupcho tôi, sau khi thêm tệp như bạn mô tả. Hộp thoại cho phép tôi chọn cài đặt trước, rất tuyệt.
wbloos

Đặt một tệp chính sách /usr/share/polkit-1/actionsthực sự là cách để tạo một trình khởi chạy máy tính để bàn với các pkexecquyền nâng cao . Đây là một ví dụ khác .
Serge Stroobandt

4

Nautilus Admin ( nautilus-admin ) là một tiện ích mở rộng Python đơn giản cho trình quản lý tệp Nautilus có thêm một số hành động quản trị vào menu chuột phải:

  • Mở với tư cách Quản trị viên: mở thư mục trong cửa sổ Nautilus mới chạy với quyền quản trị viên (root).
  • Chỉnh sửa là Quản trị viên: mở tệp trong cửa sổ Gedit chạy với quyền quản trị viên (root).

Để cài đặt Nautilus Admin trong tất cả các phiên bản Ubuntu được hỗ trợ hiện tại, hãy mở terminal và gõ:

sudo apt install nautilus-admin

Tôi đã thử nghiệm tất cả các lựa chọn thay thế cho gksu trong 18.04 cho các ứng dụng khác ngoài Tệp và Gedit, và ứng dụng có vẻ hoạt động ổn định nhất là:

sudo -H appname &> / dev / null

pkexeclà sự thay thế tốt nhất cho gksu khi nó hoạt động vì nó cung cấp bảo mật cao hơn, nhưng nó không nhất quán trên các ứng dụng khác nhau (ví dụ: nó không hoạt động với Gedit) và có thể gây ra sự cố với một số ứng dụng. sudo -ikhó quản lý một cách không cần thiết vì nó nâng cao đặc quyền của bạn để root trong một khoảng thời gian dài khi bạn chỉ cần root để chạy một lệnh duy nhất.


3

Tôi sử dụng một tập lệnh được gọi là sgeditkế thừa sở thích của người dùng cho phông chữ, tab và tiện ích mở rộng. Nó sử dụng sudo -H geditthay vì gksu geditcho sự ổn định trong môi trường GUI. Nó nhắc nhập mật khẩu.

Đã sudokế thừa geditcài đặt tài khoản người dùng của bạn

sgedit 80 cột bên phải slide.gif

Trong ví dụ này, cài đặt người dùng cho tên phông chữ, kích thước phông chữ, dừng tab, chuyển đổi tab thành khoảng trắng, tô sáng cột 80 và thanh trượt hình thu nhỏ bên phải đã được kế thừa bởi sudo.

Với thông thường, sudo -H geditbạn không thể thực hiện hoặc lưu các cài đặt cấu hình này. Với tập lệnh bên dưới, sgeditcác cài đặt được kế thừa từ tài khoản người dùng của bạn.

Kịch bản này cũng giải quyết các vấn đề " gksulà xấu và không được cài đặt theo mặc định" và " pkexeckhó thiết lập".


Lý lịch

Tôi đã bị cằn nhằn bởi cùng một vấn đề trong nhiều năm. Dự án cuối tuần này là để viết sgeditkịch bản:

  • Gọi bằng sgedit filename1 filename2...
  • Cài đặt gedit của người dùng cho các điểm dừng tab, phông chữ, ngắt dòng, v.v.
  • Nâng cao để sudo -Hbảo vệ quyền sở hữu tập tin trong khi có quyền hạn root.
  • Yêu cầu mật khẩu nếu sudo cuối cùng đã hết thời gian.
  • Nhận cài đặt gedit của sudo
  • So sánh sự khác biệt giữa cài đặt người dùng và sudo gedit
  • Chỉ chạy gsettings settrên sự khác biệt (giảm 174 setlệnh xuống còn hàng tá hoặc ít hơn. Lần tới, nó có thể chỉ chạy một hoặc hai thay đổi nhưng thường không thay đổi.
  • Gọi gedit như một tác vụ nền sao cho dấu nhắc thiết bị đầu cuối xuất hiện lại ngay lập tức.

Kịch bản Bash sgedit

#!/bin/bash

# NAME: sgedit
# PATH: /mnt/e/bin
# DESC: Run gedit as sudo using $USER preferences
# DATE: June 17, 2018.

# Must not prefix with sudo when calling script
if [[ $(id -u) == 0 ]]; then
    zenity --error --text "You cannot call this script using sudo. Aborting."
    exit 99
fi

# Get user preferences before elevating to sudo
gsettings list-recursively | grep -i gedit | grep -v history |
    grep -v docinfo |
    grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings

sudoFunc () {
    # Must be running as sudo
    if [[ $(id -u) != 0 ]]; then
        zenity --error --text "Sudo password authentication failed. Aborting."
        exit 99
    fi

    # Get sudo's gedit preferences
    gsettings list-recursively | grep -i gedit | grep -v history |
        grep -v docinfo |
        grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings.root
    diff /tmp/gedit.gsettings.root /tmp/gedit.gsettings | grep '>' > /tmp/gedit.gsettings.diff
    sed -i 's/>/gsettings set/g; s/uint32 //g' /tmp/gedit.gsettings.diff
    chmod +x /tmp/gedit.gsettings.diff
    bash -x /tmp/gedit.gsettings.diff  # Display override setting to terminal
    nohup gedit $@ &>/dev/null &
}

FUNC=$(declare -f sudoFunc)
sudo -H bash -c "$FUNC; sudoFunc $*;"

Dịch vụ dọn phòng

Sao chép tập lệnh bash ở trên vào một tệp mới được gọi là sgedit. Tôi khuyên bạn nên đặt nó trong $HOME/binthư mục của bạn , tức là /home/YOURNAME/bin. Bạn có thể phải tạo thư mục đầu tiên.

Đánh dấu tệp là tệp thực thi bằng cách sử dụng:

chmod a+x ~/sgedit

Lưu ý ~là một phím tắt cho /home/YOURNAME.


0

Ubuntu 18.04: Một số chương trình cài đặt và các chương trình khác cần gksudo hoặc gksu để có cùng tên. Để thực hiện những công việc này:

Cài đặt phiên bản gnome của ssh-askpass. Nếu không có điều này, hộp thoại mật khẩu có thể bị ẩn đằng sau một cửa sổ khác:

sudo apt-get install ssh-askpass-gnome

Tạo tập tin mới my-gksudo.sh:

sudo -H gedit /etc/profile.d/my-gksudo.sh

nội dung tập tin:

export SUDO_ASKPASS=/usr/bin/ssh-askpass

Tạo tập tin mới gksudo và gksu với nội dung giống hệt nhau:

sudo -H gedit /usr/bin/gksudo

sudo -H gedit /usr/bin/gksu

nội dung tập tin cho cả hai:

sudo -A $@

Làm cho gksudo và gksu thực thi:

sudo chmod +x /usr/bin/gksudo

sudo chmod +x /usr/bin/gksu

Khởi động lại máy tính.

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.