root が非 root としてコマンドを実行することは可能ですか?

root が非 root としてコマンドを実行することは可能ですか?

私はルート ユーザーですが、別のユーザーとしてアプリケーションを実行したいと考えています。別のユーザーに切り替えずに、これは可能ですか?

何かのようなもの

# google-chrome user=abc

私は実際に非ルート ユーザーとして CLI プログラムを実行しています。スティッキー ビットをオンに設定し、setuid を使用しているため、プログラムはルート権限で実行されます。現在、system()プログラム内で を使用して GUI アプリを呼び出しています。ただし、ルートとして実行したくないので、その呼び出しのみルート権限を一時的に削除したいと思います。

答え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スイッチなしで、同じように使用します。

xsudoユーザーアプリケーション

楽しむ。

PSアカウントxsessionから開始することrootは強くお勧めしません。

答え3

ルートユーザーでログインした状態で Chromium を実行する方法があります。通常通り開くと、「Chromium はルートとして実行できません」のようなエラーが表示されます。

エラーなしで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 "" "${@}"

関連情報