루트가 루트가 아닌 사용자로서 명령을 실행할 수 있습니까?

루트가 루트가 아닌 사용자로서 명령을 실행할 수 있습니까?

저는 루트 사용자이고 다른 사용자로 응용 프로그램을 실행하고 싶다고 가정합니다. 다른 사용자로 전환하지 않고도 이것이 가능합니까?

같은 것

# google-chrome user=abc

실제로 루트가 아닌 사용자로 CLI 프로그램을 실행하고 있습니다. 저는 고정 비트를 설정했고 setuid를 사용하고 있으므로 프로그램은 루트 권한으로 실행됩니다. 이제 system()프로그램 내에서 GUI 앱을 호출하는 데 사용하고 있습니다 . 하지만 루트로 실행하고 싶지 않기 때문에 해당 호출에 대해서만 루트 권한을 일시적으로 삭제하고 싶습니다.

답변1

휴대용 솔루션은 다음과 같습니다.

su abc -c google-chrome

그러나 google-chrome에는 X11 액세스가 필요하므로 보안을 해제하지 않으면 실패할 가능성이 높습니다. 이는 특히 루트로 실행하는 동안 매우 나쁜 생각입니다.

X11 튜닝/전달이 허용되면 더 좋은 방법은 다음과 같습니다.

ssh -X abc@localhost google-chrome

또는

ssh -Y abc@localhost google-chrome

답변2

짧은 대답: "예, 가능합니다."

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강력히 권장하지 않습니다!

답변3

루트 사용자로 로그인하면 크롬을 실행하는 방법이 있습니다. 정상적으로 열면 "크롬을 루트로 실행할 수 없습니다."라는 오류가 표시됩니다.

오류 없이 실행하려면 right click데스크탑에서 다음 명령을 사용하여 새 실행 프로그램을 만듭니다 chromium-browser --user-data-dir. 원하는 이름을 지정하고 저장한 후 열면 크롬 브라우저가 표시됩니다. (우분투 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 "" "${@}"

관련 정보