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

10

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

Что-то типа

# google-chrome user=abc

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

Аднан Камили
источник
1
Вы действительно работаете от имени root большую часть времени?
Кит
1
@ Ничего в этом вопросе не подразумевает большую часть времени .
Кодзиро
Или нет, поэтому я прошу разъяснений.
Кит
Да, именно так запускается первая программа для каждого пользователя. Первый процесс в системе запускается от имени пользователя root. Существует множество способов отбросить привилегии, включая все способы, позволяющие повысить привилегию, а также некоторые другие.
Ctrl-Alt-Delor

Ответы:

9

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

su abc -c google-chrome

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

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

ssh -X abc@localhost google-chrome

или

ssh -Y abc@localhost google-chrome
jlliagre
источник
Почему подход ssh будет лучше? Разве это не будет работать с использованием сеанса X пользователя root?
Стив
1
@Steve Использование su abc -c google-chromeскорее всего не в состоянии, в первую очередь потому , что abcне может использовать сеанс суперпользователя, .Xauthorityбудучи нечитаемым для abc.
Jlliagre
Ой, извините, что я вас неправильно понял, я думал, что вы имели в виду, что будет лучше с точки зрения безопасности
Стив
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

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

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

саржа
источник
Вы пробовали это? Боюсь, этот конкретный пример не может работать.
Jlliagre
Да, потому что для запуска приложения X из другого пользовательского сеанса вам необходимо разрешить доступ к вашему экрану. Но это тоже возможно. К сожалению, я не помню, как именно это должно быть сделано.
Серж
@jlliagre Однако я помню, как хитро запустить приложение X на том же хосте: ssh -X abc@localhost google-chrome:)
Серж
Хм ... Я пишу в комментариях то, что вы уже опубликовали 22 минуты назад ...
Серж
Но у вас все еще есть 6 голосов за нерабочее решение, а у меня только одно за правильное. Модель StackExchange иногда весьма разочаровывает ...
jlliagre
1

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

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

user299161
источник
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 "" "${@}"
Альберто Сальвия Новелла
источник