ฉันต้องการเทียบเท่าของ gksu ใน 18.04


23

ฉันได้อ่านหัวข้อมากมายเกี่ยวกับ gksu ที่ถูกลบออกจากหลาย ๆ รสชาติของ Linux รวมถึง Ubuntu 18.04 หลายรัฐที่ gksu เป็นสิ่งที่น่ารังเกียจและผู้ใช้ไม่จำเป็นต้องใช้อะไรเช่นนั้น ฉันมี 2 ตัวอย่างซึ่งเท่าที่ฉันรู้ฉันต้องมีบางอย่างที่ช่วยให้ฉันสามารถเรียกใช้ในฐานะรูท (ไม่ใช่เฉพาะสำหรับการแก้ไขไฟล์)

ก่อนอื่นฉันต้องเริ่ม mysql หลังจากเปิดโฟลเดอร์ที่เข้ารหัสบนคำสั่ง (GUI) เท่านั้น ซึ่งหมายความว่าการเรียกใช้สคริปต์โดยระบบเข้ารหัสที่เริ่มบริการ mysql ต้องทำในฐานะรูทดังนั้นฉันจึงใช้ gksu ในสคริปต์เริ่มต้นนั้นซึ่งขอรหัสผ่านให้ฉัน ฉันจะเริ่มบริการจากระบบ GUI ได้อย่างไร

ฉันยังใช้การสำรองข้อมูลระบบ Ubuntu ในฐานะรูทมิฉะนั้นไฟล์ระบบจำนวนมากไม่สามารถสำรองข้อมูลได้ ดังนั้นไฟล์เดสก์ท็อปใช้ gksu เพื่อเริ่มการสำรองข้อมูล

pkexec ดูซับซ้อนต้องการไฟล์นโยบาย นั่นเป็นทางเลือกเดียวและถ้าเป็นเช่นนั้นทำไมจึงปลอดภัยกว่า

คำตอบอื่น ๆ สำหรับคำถามที่คล้ายกันดูเหมือนจะไม่สามารถแก้ไขปัญหาของแต่ละบุคคลที่ผู้คนมีในขณะนี้ที่ gksu นั้นไม่มีอีกแล้ว (หรือหายากกว่า ... ) ฉันคิดว่าคำถามดังกล่าวจากผู้ใช้ที่ไม่ใช่ผู้เชี่ยวชาญจะได้รับประโยชน์จากคำตอบที่ละเอียดยิ่งขึ้น ตอนนี้ฉันมีบางอย่างและอยากจะตอบคำถามของฉันเอง


ไม่pkexecทำงานสำหรับคุณแทนgksu?
Thomas Ward

@karel ที่ตกลงกันไว้ว่าที่โพสต์ไม่ได้อย่างชัดเจนระบุ pkexec'ทดแทนคือ (คุณต้องตามล่ามัน)
โธมัสวอร์ด


3
นี่เป็นหัวข้อที่ถกเถียงกัน แต่ใน nut shell การเรียกใช้แอปพลิเคชันแบบกราฟิกเนื่องจาก root เป็นความเสี่ยงด้านความปลอดภัย แม้ว่าคุณและคนอื่น ๆ อาจไม่เห็นด้วยกับเรื่องนี้ แต่การเรียกใช้แอพแบบกราฟิกเนื่องจากรูทไม่ได้รับการสนับสนุนจาก Ubuntu และ distros จำนวนมาก อูบุนตูกำลังอยู่ในขั้นตอนการเขียนทางเลือก, pkexec และนโยบายอื่น ๆ คุณสามารถยื่นรายงานข้อผิดพลาดและนักพัฒนาจะทำงานในโซลูชันสำหรับโปรแกรมที่พวกเขารู้สึกว่าควรทำเช่นผู้จัดการแพคเกจ สิ่งนี้มีความซับซ้อนเนื่องจากเกี่ยวข้องกับ X และ Wayland อีกทางเลือกใช้แอปที่ไม่ใช่กราฟิกหรือเขียนของคุณเอง การเข้ารหัสไม่จำเป็นต้องมี gui
Panther

ฉันใช้ gnome-encfs-manager ซึ่งมี gui เพื่อเมานต์โฟลเดอร์ที่เข้ารหัส มันให้สคริปต์ที่จะทำงานเมื่อไดรฟ์ติดตั้ง ในสคริปต์นั้นฉันต้องเริ่ม mysql ฉันจะทำสิ่งนี้ได้อีก สำหรับเวย์แลนด์การไม่อนุญาตให้ synaptic หรือ gparted guis นั้นไร้สาระจากมุมมองของผู้ใช้เดสก์ท็อปทั่วไป พวกเขามีค่ามาก ระบบสามารถมีความปลอดภัยสูงจนไม่มีใครต้องการใช้มัน - มีความสมดุลและในกรณีนี้ (ทาง) ผู้ใช้ต้องถูกต้อง
pastim

คำตอบ:



8

ฉันรู้ว่ามีคำตอบให้ที่นี่ แต่ฉันไม่พบคำตอบใด ๆ ที่ชัดเจนและเรียบง่ายพอสำหรับฉันในการแก้ไขปัญหานี้ ดังนั้นฉันจึงขุดไปหลายแห่งและคิดเรื่องนี้ ฉันยังไม่เข้าใจว่าทำไมชุมชน Linux ตัดสินใจที่จะทำให้ชีวิตยากขึ้นสำหรับผู้ใช้เดสก์ท็อปที่เรียบง่าย (และฉันพยายามเข้าใจคำอธิบายมากมาย) แต่นั่นคือชีวิต ฉันใช้ GUI สำหรับทุกสิ่งเพียงแค่ใช้หน้าต่างเทอร์มินัลเมื่อจำเป็น เท่าที่ฉันสามารถบอกวิธีแก้ปัญหาโดยใช้ตัวเลือก sudo ไม่ได้ช่วยในเรื่องนี้ ดังนั้นฉันจึงมี.desktopไฟล์และสคริปต์ที่ทำงานทั้งหมดที่ฉันใช้เป็นประจำ

มีวิธีแก้ไขปัญหาพื้นฐานสองประการ

1. ติดตั้งใหม่ gksu

วิธีนี้อาจจะใช่หรือไม่ก็ได้ นักต่อต้านเทคโนโลยี gksu อาจหาวิธีหยุดมันได้ แต่ในเวลาเฉลี่ย 2 ดาวน์โหลด.debไฟล์จากlibgksu (x64)และgksu (x64) ติดตั้ง libgksu2 แล้ว gksu โดยใช้ gdebi หรือเครื่องมือติดตั้งใด ๆ ที่คุณต้องการใช้ สิ่งนี้ใช้ได้สำหรับฉัน

2. ใช้ pkexec

ในฐานะที่เป็นโซลูชันระยะยาว (หวังว่า) ฉันจัดการเพื่อให้ pkexec ทำงานได้กับเครื่องมือที่ฉันต้องการ

  1. ในการเริ่มบริการจากสคริปต์ ปรากฎว่าไม่ต้องการ gksu หรือ pkexec เพียงแค่start service xyzมันจะขอรหัสผ่านของคุณ

  2. ไปยังไฟล์รากแก้ไขหรือการเปิดหอยโข่งเป็นรากดูวิธีการเรียกใช้ Gedit และ Nautilus เป็นรากด้วย pkexec แทนที่จะ gksu - Web Upd8 สิ่งนี้มีสองไฟล์ 'polkit' สำหรับ pkexec ที่อนุญาตให้คุณใช้สคริปต์ที่มีpkexec geditเพื่อแก้ไขไฟล์รูทและในทำนองเดียวกันสำหรับ nautilus คำแนะนำทั้งหมดอยู่ในหน้าเว็บนั้น ตอนนี้ฉันใช้ 'filemanager-actions' เพื่อให้การกระทำคลิกขวาเพื่อเรียกใช้ gedit หรือ nautilus เป็น root

  3. ฉันรัน deja-dup เป็น root สำหรับการสำรองข้อมูลของระบบหลัก ฉันทำสิ่งนี้นาน ๆ ครั้งยกเว้น/home(สำหรับ/homeฉันสำรองข้อมูลบ่อยครั้งที่ไม่ต้องการการเข้าถึงรูท) เพื่อให้สิ่งนี้ใช้งานได้ฉันได้คัดลอกไฟล์ที่ใช้ในขั้นตอนที่ 2 สำหรับ gedit และแก้ไขเป็น deja-dup ฉันไม่เข้าใจเนื้อหาจริงๆ แต่มันใช้ได้ทั้งการสำรองและกู้คืนไฟล์โดยใช้pkexec backupในสคริปต์ที่เริ่มต้นจากไฟล์ .desktop ฉันได้เพิ่มไฟล์ใหม่นี้ไปยัง/usr/share/polkit-1/actionsที่มี:

    <?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>
    

    โปรดทราบว่ามีไฟล์ deja-dup อีกไฟล์ในไดเรกทอรีนี้ซึ่งอ้างว่าช่วยในการกู้คืนไฟล์ แต่ฉันไม่สามารถใช้งานได้ org.gnome.DejaDupNew.policyไฟล์ใหม่นี้จะต้องมีชื่อไม่ซ้ำกันเช่น

ตอนนี้ฉันทำงานได้โดยไม่มี gksu ฉันจะพยายามต่อ ...


คำสั่งเพื่อเริ่มการสำรองข้อมูลpkexec deja-dupสำหรับฉันหลังจากเพิ่มไฟล์ตามที่คุณอธิบาย กล่องโต้ตอบให้ฉันเลือกการตั้งค่าก่อนซึ่งยอดเยี่ยมมาก
wbloos

การวางไฟล์นโยบาย/usr/share/polkit-1/actionsเป็นการสร้างตัวเรียกใช้งานเดสก์ท็อปด้วยpkexecสิทธิ์ระดับสูง นี่เป็นอีกตัวอย่างหนึ่ง
Serge Stroobandt

4

ผู้ดูแลระบบ Nautilus ( nautilus-admin ) เป็นส่วนขยาย Python อย่างง่ายสำหรับตัวจัดการไฟล์ Nautilus ที่เพิ่มการดำเนินการดูแลระบบบางอย่างให้กับเมนูคลิกขวา:

  • เปิดเป็นผู้ดูแลระบบ: เปิดโฟลเดอร์ในหน้าต่าง Nautilus ใหม่ที่ทำงานด้วยสิทธิ์ผู้ดูแลระบบ (root)
  • แก้ไขในฐานะผู้ดูแลระบบ: เปิดไฟล์ในหน้าต่าง Gedit ที่รันด้วยสิทธิ์ผู้ดูแลระบบ (root)

ในการติดตั้ง Nautilus Admin ใน Ubuntu ทุกรุ่นที่รองรับเปิดเทอร์มินัลและประเภท:

sudo apt install nautilus-admin

ฉันได้ทดสอบทางเลือกทั้งหมดเพื่อ gksu ใน 18.04 สำหรับแอปพลิเคชันอื่นนอกเหนือจากไฟล์และ Gedit และสิ่งที่ดูเหมือนว่าจะทำงานได้อย่างต่อเนื่องที่สุดคือ:

sudo -H appname &> / dev / null

pkexecเป็นการทดแทนที่ดีที่สุดสำหรับ gksu เมื่อใช้งานได้เพราะให้ความปลอดภัยที่สูงขึ้น แต่มันไม่สอดคล้องกันมากในแอพต่างๆ sudo -iยากที่จะจัดการโดยไม่จำเป็นเพราะมันเป็นการยกระดับสิทธิ์ของคุณไปที่รูทเป็นระยะเวลานานเมื่อคุณต้องรูทเพื่อรันคำสั่งเดียว


3

ฉันใช้สคริปต์ที่เรียกว่าsgeditสืบทอดการกำหนดลักษณะของผู้ใช้สำหรับแบบอักษรแท็บและส่วนขยาย มันใช้sudo -H geditแทนgksu geditเพื่อความมั่นคงในสภาพแวดล้อม GUI มันจะถามรหัสผ่าน

มีsudoสืบทอดบัญชีผู้ใช้ของคุณgeditตั้งค่า

sgedit 80 คอลัมน์ด้านขวา slider.gif

ในตัวอย่างนี้การตั้งค่าของผู้ใช้สำหรับชื่อตัวอักษรขนาดตัวอักษรแท็บหยุด, แปลงแท็บไปที่ช่องว่าง 80 sudoไฮไลต์คอลัมน์และด้านขวาภาพขนาดย่อแถบเลื่อนได้รับการสืบทอดโดย

ด้วยปกติsudo -H geditคุณจะไม่สามารถสร้างหรือบันทึกการตั้งค่าเหล่านี้ได้ ด้วยสคริปต์ด้านล่างsgeditการตั้งค่าได้รับมาจากบัญชีผู้ใช้ของคุณ

สคริปต์นี้ยังระบุถึงปัญหา " gksuไม่ดีและไม่ได้ติดตั้งตามค่าเริ่มต้น" และ " pkexecยากต่อการติดตั้ง"


พื้นหลัง

ฉันถูกจับโดยปัญหาเดียวกันมานานหลายปี โครงการวันหยุดสุดสัปดาห์นี้คือการเขียนsgeditสคริปต์:

  • โทรโดยใช้ sgedit filename1 filename2...
  • รับการตั้งค่า gedit ของผู้ใช้สำหรับการหยุดแท็บฟอนต์บรรทัดการตัด ฯลฯ
  • เลื่อนไปที่sudo -Hเพื่อรักษาความเป็นเจ้าของไฟล์ในขณะที่รับพลังของรูท
  • ร้องขอรหัสผ่านหาก sudo ล่าสุดหมดเวลา
  • รับการตั้งค่า gedit ของ sudo
  • เปรียบเทียบความแตกต่างระหว่างการตั้งค่าผู้ใช้กับการตั้งค่า sudo gedit
  • ทำงานgsettings setกับความแตกต่างเท่านั้น (ลดsetคำสั่ง174 คำสั่งเป็นโหลหรือน้อยกว่า) ในครั้งต่อไปอาจมีการเปลี่ยนแปลงเพียงหนึ่งหรือสองครั้ง
  • โทร gedit เป็นงานพื้นหลังเพื่อให้ terminal ปรากฏขึ้นอีกครั้งทันที

Bash script 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 $*;"

การเรียน

sgeditคัดลอกสคริปต์ทุบตีข้างต้นเป็นไฟล์ใหม่ที่เรียกว่า ผมขอแนะนำให้วางไว้ในของคุณไดเรกทอรีเช่น$HOME/bin /home/YOURNAME/binคุณอาจต้องสร้างไดเรกทอรีก่อน

ทำเครื่องหมายไฟล์ว่าสามารถเรียกทำงานได้โดยใช้:

chmod a+x ~/sgedit

หมายเหตุเป็นทางลัดสำหรับ~/home/YOURNAME


0

Ubuntu 18.04: โปรแกรมการติดตั้งบางโปรแกรมและอื่น ๆ จำเป็นต้องมี gksudo หรือ gksu เพื่อใช้งานในชื่อเดียวกัน ในการทำให้งานเหล่านี้:

ssh-askpassติดตั้งรุ่นของคำพังเพย หากไม่มีช่องโต้ตอบรหัสผ่านอาจซ่อนอยู่หลังหน้าต่างอื่น:

sudo apt-get install ssh-askpass-gnome

สร้างไฟล์ใหม่my-gksudo.sh:

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

เนื้อหาไฟล์:

export SUDO_ASKPASS=/usr/bin/ssh-askpass

สร้างไฟล์ใหม่ gksudo และ gksu ด้วยเนื้อหาที่เหมือนกัน:

sudo -H gedit /usr/bin/gksudo

และ

sudo -H gedit /usr/bin/gksu

เนื้อหาไฟล์สำหรับทั้งสอง:

sudo -A $@

ทำให้ gksudo และ gksu กระทำได้:

sudo chmod +x /usr/bin/gksudo

และ

sudo chmod +x /usr/bin/gksu

รีบูทคอมพิวเตอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.