我是 root 用户,假设我想以其他用户身份运行任何应用程序。这可行吗,无需切换到其他用户?
就像是
# google-chrome user=abc
我实际上是以非 root 用户身份执行 CLI 程序。我已设置 sticky 位并使用 setuid,因此程序以 root 权限运行。现在我system()
在程序内使用它来调用 GUI 应用程序。但我不想以 root 身份运行它,所以我只想暂时放弃该调用的 root 权限。
答案1
一个可移植的解决方案是:
su abc -c google-chrome
但是,由于 google-chrome 需要 X11 访问,除非您取消其安全保护,否则此操作可能会失败,但这是一个非常糟糕的主意,尤其是在以 root 身份运行时。
如果允许 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
但不需要任何开关:
须藤用户应用程序
享受。
PS强烈反对xsession
从帐户开始!root
答案3
有一种方法可以在登录root用户的情况下运行chromium,如果你正常打开,它会给你一个“chromium无法以root身份运行”这样的错误。
要运行它而不出现错误,right click请在您的桌面上使用以下命令创建一个新的启动器:chromium-browser --user-data-dir
。您可以随意命名它,保存它,当您打开它时,它会为您提供 Chromium 浏览器。(适用于 Ubuntu 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 "" "${@}"