루트가 루트가 아닌 명령을 실행할 수 있습니까?


10

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

같은 것

# google-chrome user=abc

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


1
당신은 정말로 대부분 루트로 달리고 있습니까?
Keith

1
@Keith는 질문에 아무것도 대부분을 의미하지 않습니다 .
kojiro

아니면, 내가 설명을 요구하는 이유입니다.
Keith

예, 각 사용자의 첫 번째 프로그램이 실행되는 방식입니다. 시스템의 첫 번째 프로세스는 루트로 실행됩니다. 권한을 에스컬레이션 할 수있는 모든 방법을 포함하여 권한을 제거하는 방법에는 여러 가지가 있습니다.
ctrl-alt-delor

답변:


9

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

su abc -c google-chrome

그러나 google-chrome에는 X11 액세스가 필요하므로 보안을 유지하지 않으면 실패 할 수 있습니다. 특히 루트로 실행하는 경우 매우 나쁜 생각입니다.

X11 tunelling / forwarding이 허용된다면, 더 좋은 방법은

ssh -X abc@localhost google-chrome

또는

ssh -Y abc@localhost google-chrome

ssh 접근 방식이 더 나은 이유는 무엇입니까? 여전히 루트 사용자의 X 세션을 사용하여 실행되지 않습니까?
Steve

1
@Steve 사용 su abc -c google-chromeabc루트 세션을 사용할 수 없어 .Xauthority읽을 수 없기 때문에 처음부터 실패 할 수 있습니다 abc.
jlliagre

죄송합니다. 죄송합니다. 보안 측면에서 더 좋을 것이라고 생각했습니다.
Steve

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 사용자 애플리케이션

즐겨.

추신 계정 xsession에서 시작 root하는 것이 좋습니다!


당신은 그것을 시도 했습니까? 이 특정 예제가 작동하지 않을까 걱정됩니다.
jlliagre

예, 다른 사용자 세션에서 X 응용 프로그램을 시작하려면 디스플레이에 대한 액세스를 허용해야합니다. 그러나 이것은 또한 가능합니다. 불행히도 나는 이것이 정확히 어떻게 수행되는지 기억하지 못한다.
Serge

@jlliagre 그러나, 나는 같은 호스트에서 X 응용 프로그램을 까다로운 방법으로 시작하는 방법을 기억합니다 : ssh -X abc@localhost google-chrome:)
Serge

흠 ... 난 당신이 이미 22 분 전에 게시 한 것을 의견에 쓰고있다 ...
Serge

그러나 당신은 여전히 ​​올바르지 않은 솔루션에 대해 6 개의 투표를했습니다. StackExchange 모델이 때때로 실망 스럽습니다 ...
jlliagre

1

루트 사용자에게 로그인 할 때 크롬을 실행하는 방법이 있습니다. 정상적으로 열면 "크롬을 루트로 실행할 수 없습니다"와 같은 오류가 발생합니다.

오류없이 right click데스크탑 을 실행하려면 다음 명령으로 새 실행기를 작성하십시오 chromium-browser --user-data-dir. 원하는 이름을 지정하고 저장하면 열 때 크롬 브라우저가 제공됩니다. (우분투 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 "" "${@}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.