![루트가 루트가 아닌 사용자로서 명령을 실행할 수 있습니까?](https://rvso.com/image/1331456/%EB%A3%A8%ED%8A%B8%EA%B0%80%20%EB%A3%A8%ED%8A%B8%EA%B0%80%20%EC%95%84%EB%8B%8C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A1%9C%EC%84%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
저는 루트 사용자이고 다른 사용자로 응용 프로그램을 실행하고 싶다고 가정합니다. 다른 사용자로 전환하지 않고도 이것이 가능합니까?
같은 것
# 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 "" "${@}"