Может ли пользователь root выполнить команду как обычный пользователь?

Может ли пользователь root выполнить команду как обычный пользователь?

Я пользователь root, и предположим, что я хочу запустить любое приложение от имени другого пользователя. Возможно ли это, без переключения на другого пользователя?

Что-то вроде

# google-chrome user=abc

На самом деле я запускаю программу CLI как не-root пользователь. Я установил sticky bit и использую setuid, поэтому программа запускается с привилегиями root. Теперь я использую system()внутри программы для вызова приложения GUI. Но я не хочу запускать его как root, поэтому я хочу временно снять привилегии root только для этого вызова.

решение1

Портативным решением будет:

su abc -c google-chrome

Однако, поскольку Google Chrome требует доступа X11, это, скорее всего, не удастся сделать, если вы не отключите защиту, что было бы очень плохой идеей, особенно при работе от имени root.

Если разрешено туннелирование/пересылка X11, лучшим способом будет

ssh -X abc@localhost google-chrome

или

ssh -Y abc@localhost google-chrome

решение2

Короткий ответ: «Да, это возможно».

если вы хотите запустить не-X приложение, то просто используйте следующую команду:

судо -у абвкоманда

Если вы хотите запустить какое-либо приложение 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но без каких-либо переключателей:

xсудопользовательское приложение

Наслаждаться.

P.S. Запускать xsessionаккаунт rootнастоятельно не рекомендуется!

решение3

Есть способ запустить chromium, войдя в систему под учетной записью root. Если вы откроете его обычным образом, он выдаст вам ошибку типа "chromium cannot be run as root."

Чтобы запустить его без ошибки, right clickна рабочем столе создайте новый лаунчер с помощью команды: chromium-browser --user-data-dir. Вы можете назвать его как хотите, сохраните его, когда вы его откроете, он предоставит вам браузер Chromium. (Работает в Ubuntu 10.04.4 LTS)

решение4

#! /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 "" "${@}"

Связанный контент