È possibile che root esegua un comando come non root?


10

Sono un utente root e suppongo di voler eseguire qualsiasi applicazione come un altro utente. È possibile, senza passare a un altro utente?

Qualcosa di simile a

# google-chrome user=abc

Attualmente sto eseguendo un programma CLI come utente non root. Ho impostato il bit sticky e sto usando setuid, quindi il programma funziona con i privilegi di root. Ora sto usando system()all'interno del programma per invocare un'app GUI. Ma non voglio eseguirlo come root, quindi desidero eliminare temporaneamente i privilegi di root solo per quella chiamata.


1
Stai davvero correndo come root per la maggior parte del tempo?
Keith,

1
@Keith nulla nella domanda implica la maggior parte delle volte .
Kojiro,

O no, ecco perché chiedo chiarimenti.
Keith,

Sì, è così che viene eseguito il primo programma per ciascun utente. Il primo processo sul sistema viene eseguito come root. Esistono molti modi per eliminare i privilegi, inclusi tutti i modi in cui è possibile aumentare i privilegi, oltre ad alcuni altri.
ctrl-alt-delor,

Risposte:


9

Una soluzione portatile sarebbe:

su abc -c google-chrome

Tuttavia, poiché google-chrome richiede l'accesso X11, questo probabilmente non riuscirà a meno che tu non lo abbia garantito, il che sarebbe una pessima idea, soprattutto durante l'esecuzione come root.

Se la sintonizzazione / inoltro X11 è consentita, sarebbe un modo migliore

ssh -X abc@localhost google-chrome

o

ssh -Y abc@localhost google-chrome

Perché l'approccio ssh sarebbe migliore? Non funzionerebbe ancora usando la sessione X dell'utente root?
Steve,

1
L'utilizzo di @Steve su abc -c google-chromeprobabilmente fallirà in primo luogo perché abcnon è possibile utilizzare la sessione di root, .Xauthorityessendo illeggibile per abc.
jlliagre,

Oops mi dispiace di averti frainteso, pensavo volessi dire che sarebbe meglio dal punto di vista della sicurezza
Steve,

10

Risposta breve: "Sì, questo è possibile".

se ti piace eseguire un'applicazione non-X, usa semplicemente il seguente comando:

comando sudo -u abc

Se ti piace eseguire un'applicazione X come un altro utente ma prima con il tuo desktop devi creare uno script di supporto, questo ti semplifica la vita

  • crea una cartella bin nella tua home directory:

mkdir -p ~ / bin

e usando il tuo editor di testo preferito crea un file ~/bin/xsudocome segue:

#!/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 - ; $*"

quindi renderlo eseguibile:

chmod + x ~ / bin / xsudo

e usalo allo stesso modo sudoma senza alcun interruttore:

applicazione utente xsudo

Godere.

PS A xsessionpartire rootdall'account è fortemente scoraggiato!


Hai provato ? Temo che questo esempio particolare non possa funzionare.
jlliagre,

Sì, perché per avviare un'applicazione X da un'altra sessione utente è necessario consentire l'accesso alla visualizzazione. Ma questo è anche possibile. Sfortunatamente non ricordo come si debba fare esattamente questo.
Serge

@jlliagre Tuttavia, ricordo come avviare un'app X sullo stesso host in modo complicato: ssh -X abc@localhost google-chrome:)
Serge

Hmm ... sto scrivendo nei commenti quello che hai già pubblicato 22 minuti fa ...
Serge

Ma hai ancora 6 voti in più per una soluzione non funzionante, mentre io ho ottenuto solo uno per una soluzione corretta. Il modello StackExchange a volte è abbastanza frustrante ...
jlliagre,

1

Esiste un modo per eseguire chromium quando si accede all'utente root. Se lo apri normalmente, ti darà un errore del tipo "il cromo non può essere eseguito come root".

Per eseguirlo, senza l'errore, right clicksul desktop, creare un nuovo lanciatore con il comando: chromium-browser --user-data-dir. Puoi nominarlo come vuoi, salvarlo, quando lo apri, ti darà il browser chromium. (Funziona in 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 "" "${@}"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.