10

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

Что-то вроде

# google-chrome user=abc

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

4 ответа4

9

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

Если вы хотите выполнить не-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

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

PS Запуск xsession от учетной записи root настоятельно не рекомендуется!

9

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

su abc -c google-chrome

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

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

ssh -X abc@localhost google-chrome

или же

ssh -Y abc@localhost google-chrome
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 "" "${@}"
1

Существует способ запустить Chromium при входе в систему от имени пользователя root. Если вы откроете его как обычно, появится сообщение об ошибке типа «хром не может быть запущен от имени пользователя root».

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .