क्या रूट के लिए कमांड को गैर-रूट के रूप में निष्पादित करना संभव है?


10

मैं एक रूट उपयोगकर्ता हूं, और मान लीजिए कि मैं किसी भी एप्लिकेशन को किसी अन्य उपयोगकर्ता के रूप में चलाना चाहता हूं। क्या यह संभव है, दूसरे उपयोगकर्ता के लिए स्विच किए बिना?

कुछ इस तरह

# google-chrome user=abc

मैं वास्तव में एक गैर-रूट उपयोगकर्ता के रूप में एक सीएलआई कार्यक्रम निष्पादित कर रहा हूं। मैंने चिपचिपा बिट सेट किया है और मैं सेट्यूइड का उपयोग कर रहा हूं, इसलिए कार्यक्रम रूट विशेषाधिकारों के साथ चलता है। अब मैं system()GUI ऐप को लागू करने के लिए कार्यक्रम के भीतर उपयोग कर रहा हूं । लेकिन मैं इसे रूट के रूप में नहीं चलाना चाहता, इसलिए मैं केवल उस कॉल के लिए रूट विशेषाधिकार को अस्थायी रूप से छोड़ना चाहता हूं।


1
क्या आप वास्तव में ज्यादातर समय जड़ के रूप में चल रहे हैं?
कीथ

1
@ सवाल में कुछ भी नहीं ज्यादातर समय का मतलब है ।
कोजीरो

या नहीं, इसीलिए मैं स्पष्टीकरण मांगता हूं।
कीथ

हां, यह है कि प्रत्येक उपयोगकर्ता के लिए पहला प्रोग्राम कैसे चलाया जाता है। सिस्टम पर पहली प्रक्रिया रूट के रूप में चलाई जाती है। विशेषाधिकार छोड़ने के बहुत सारे तरीके हैं, जिसमें सभी तरीके शामिल हैं जो विशेषाधिकार बढ़ा सकते हैं, साथ ही कुछ और भी।
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 सत्र का उपयोग नहीं करेगा?
स्टीव

1
@ साइट का उपयोग su abc -c google-chromeकरना संभवतः पहले स्थान पर विफल हो जाएगा क्योंकि abcरूट के सत्र का उपयोग नहीं किया जा सकता है, .Xauthorityजिसके लिए अपठनीय है abc
जेलीगेरे

उफ़ खेद है कि मैंने आपको गलत समझा, मुझे लगा कि आपका मतलब सुरक्षा के दृष्टिकोण से बेहतर होगा
स्टीव

10

संक्षिप्त उत्तर: "हां, यह संभव है"।

यदि आप एक गैर-एक्स एप्लिकेशन को निष्पादित करना चाहते हैं, तो बस निम्नलिखित कमांड का उपयोग करें:

सुदो -उ abc कमांड

यदि आप किसी अन्य उपयोगकर्ता के रूप में कुछ एक्स एप्लिकेशन को चलाना पसंद करते हैं, लेकिन अपने स्वयं के डेस्कटॉप के साथ पहले आपको एक सहायक स्क्रिप्ट बनाने की आवश्यकता है, जो आपके जीवन को बेहतर बनाएगी

  • अपने घर निर्देशिका के तहत एक बिन फ़ोल्डर बनाएँ:

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

हां, क्योंकि किसी अन्य उपयोगकर्ता सत्र से एक्स एप्लिकेशन शुरू करने के लिए आपको अपने प्रदर्शन तक पहुंच की अनुमति देनी होगी। लेकिन यह भी संभव है। दुर्भाग्य से मुझे याद नहीं है कि वास्तव में यह कैसे किया जाना चाहिए।
सर्ज

@jlliagre हालांकि, मुझे याद है कि एक ही मेजबान पर एक एक्स ऐप को कैसे मुश्किल तरीके से शुरू करना है: ssh -X abc@localhost google-chrome:)
सर्ज

हम्म ... मैं उन टिप्पणियों में लिख रहा हूं जो आपने पहले ही 22 मिनट पहले पोस्ट की थीं ...
सर्ज

लेकिन आपके पास अभी भी गैर-काम के समाधान के लिए 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 "" "${@}"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.