เป็นไปได้ไหมที่รูทจะสั่งคำสั่งแบบไม่รูท?


10

ฉันเป็นผู้ใช้รูทและสมมติว่าฉันต้องการเรียกใช้แอปพลิเคชันใด ๆ ในฐานะผู้ใช้รายอื่น เป็นไปได้หรือไม่หากไม่มีการเปลี่ยนไปใช้ผู้ใช้คนอื่น?

สิ่งที่ต้องการ

# google-chrome user=abc

ฉันกำลังใช้งานโปรแกรม CLI ในฐานะผู้ใช้ที่ไม่ใช่รูท ฉันได้ตั้งค่า bit bit on และฉันใช้ setuid ดังนั้นโปรแกรมจะทำงานด้วยสิทธิ์พิเศษของรูท ตอนนี้ฉันกำลังใช้system()ภายในโปรแกรมเพื่อเรียกใช้แอพ GUI แต่ฉันไม่ต้องการเรียกใช้ในฐานะรูทดังนั้นฉันต้องการวางสิทธิพิเศษของรูทชั่วคราวสำหรับการโทรนั้นเท่านั้น


1
คุณใช้เวลาส่วนใหญ่ในการรูทหรือไม่?
Keith

1
ไม่มีอะไร @Keith ในคำถามที่มีความหมายมากที่สุดของเวลา
kojiro

หรือไม่นั่นเป็นเหตุผลที่ฉันขอคำชี้แจง
Keith

ใช่นั่นคือวิธีการเรียกใช้โปรแกรมแรกสำหรับผู้ใช้แต่ละคน กระบวนการแรกในระบบถูกเรียกใช้เป็นรูท มีหลายวิธีในการยกเลิกสิทธิ์รวมถึงวิธีการทั้งหมดที่สามารถเพิ่มระดับสิทธิ์และอีกมากมาย
ctrl-alt-delor

คำตอบ:


9

โซลูชันแบบพกพาจะเป็น:

su abc -c google-chrome

อย่างไรก็ตามในขณะที่ google-chrome ต้องการการเข้าถึง X11 สิ่งนี้อาจล้มเหลวเว้นแต่คุณจะไม่ได้รับการประกันซึ่งเป็นความคิดที่แย่มากโดยเฉพาะในขณะที่ทำงานเป็นรูท

หากอนุญาตให้ทำการจูน / ส่งต่อ X11 จะเป็นวิธีที่ดีกว่า

ssh -X abc@localhost google-chrome

หรือ

ssh -Y abc@localhost google-chrome

ทำไมวิธีการ ssh จะดีขึ้นหรือไม่ สิ่งนี้จะไม่ทำงานโดยใช้เซสชัน X ของผู้ใช้รูทหรือไม่
Steve

1
@ Steve ใช้su abc -c google-chromeมีแนวโน้มที่จะล้มเหลวในครั้งแรกเพราะabcไม่สามารถใช้เซสชั่นรากของการเป็นอ่านไม่ได้สำหรับ.Xauthority abc
jlliagre

โอ๊ะโอฉันเข้าใจผิดคุณคิดว่าคุณหมายถึงว่ามันจะดีกว่าจากมุมมองด้านความปลอดภัย
Steve

10

คำตอบสั้น ๆ : "ใช่นี่เป็นไปได้"

หากคุณต้องการรันแอปพลิเคชันที่ไม่ใช่ X ให้ใช้คำสั่งต่อไปนี้:

คำสั่ง sudo -u abc

หากคุณต้องการรันแอปพลิเคชั่น X เป็นผู้ใช้อื่น แต่ด้วยเดสก์ท็อปของคุณก่อนคุณต้องสร้างสคริปต์ตัวช่วยซึ่งจะทำให้ชีวิตของคุณง่ายขึ้น

  • สร้างโฟลเดอร์ bin ภายใต้ไดเรกทอรีบ้านของคุณ:

mkdir -p ~ / bin

และการใช้เท็กซ์เอดิเตอร์ที่คุณโปรดปรานสร้างไฟล์~/bin/xsudoดังนี้:

#!/bin/bash
# (C) serge 2012
# The script is licensed to all users of StackExchange family free of charge
# Fixes/Enhancements to the script are greatly appreciated. 
# 
# SUDO_ASKPASS has to be set to the path of ssh-askpass
# fix the following two lines if your distribution does not match this autodetection
. /etc/profile.d/gnome-ssh-askpass.sh
export SUDO_ASKPASS="${SSH_ASKPASS}"

SUDOUSERNAME="$1"
shift
xauth nlist "${DISPLAY}"|sudo -HA -u $SUDOUSERNAME env --unset=XAUTHORITY \
bash -c "xauth nmerge - ; $*"

จากนั้นทำให้สามารถเรียกใช้งานได้:

chmod + x ~ / bin / xsudo

และใช้แบบเดียวกับที่sudoไม่มีสวิตช์:

แอปพลิเคชันผู้ใช้ xsudo

สนุก.

ป.ล. เริ่มต้นxsessionจากrootบัญชีมีกำลังใจอย่างมาก!


คุณลองหรือยัง ฉันเกรงว่าตัวอย่างนี้จะใช้ไม่ได้
jlliagre

ใช่เพราะในการเริ่มต้นแอปพลิเคชัน X จากเซสชันผู้ใช้อื่นคุณต้องอนุญาตให้แสดง แต่นี่ก็เป็นไปได้เช่นกัน น่าเสียดายที่ฉันจำไม่ได้ว่าต้องทำอย่างไร
Serge

@jlliagre แต่ผมจำได้ว่าวิธีการเริ่มต้นแอป X บนโฮสต์เดียวกันในทางหากิน: ssh -X abc@localhost google-chrome:)
เสิร์จ

อืม ... ฉันกำลังเขียนในความคิดเห็นสิ่งที่คุณโพสต์แล้ว 22 นาทีที่แล้ว ...
Serge

แต่คุณยังคงมีคะแนนโหวต 6 คะแนนสำหรับโซลูชันที่ไม่ทำงานในขณะที่ฉันได้รับหนึ่งคะแนนเท่านั้นสำหรับการแก้ไขที่ถูกต้อง รูปแบบ StackExchange บางครั้งค่อนข้างน่าหงุดหงิด ...
jlliagre

1

มีวิธีเรียกใช้โครเมียมเมื่อลงชื่อเข้าใช้ผู้ใช้รูท หากคุณเปิดตามปกติจะทำให้เกิดข้อผิดพลาดเช่น "โครเมียมไม่สามารถเรียกใช้ในฐานะรูท"

เพื่อให้ทำงานได้โดยไม่ต้องมีข้อผิดพลาด, สก์ท็อปของคุณให้สร้างตัวเปิดใหม่ที่มีคำสั่ง:right click chromium-browser --user-data-dirคุณสามารถตั้งชื่อสิ่งที่คุณต้องการบันทึกเมื่อคุณเปิดมันจะให้เบราว์เซอร์โครเมียม (ทำงานใน Ubuntu 10.04.4 LTS)


1
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e)


execute () {
    function="${1}"
    command="${2}"
    error=$(eval "${command}" 2>&1 >"/dev/null")

    if [ ${?} -ne 0 ]; then
        echo "${function}: $error"
        exit 1
    fi
}


executeAsNonAdmin () {
    function="${1}"
    command="${2}"

    eval setPasswordAsker="SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass"
    run="runuser ${SUDO_USER} --session-command=\"${setPasswordAsker}\" --command=\"${command}\""
    execute "${function}" "${run}"
}


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