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


10

私はrootユーザーであり、任意のアプリケーションを別のユーザーとして実行したいとします。別のユーザーに切り替えることなく、これは可能ですか?

何かのようなもの

# google-chrome user=abc

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


1
ほとんどの場合、本当にrootとして実行していますか?
キース

1
@Keith質問の何もほとんどの時間を意味しません。
小次郎2012

かどうか、それは私が説明を求める理由です。
キース

はい、それが各ユーザーの最初のプログラムの実行方法です。システムの最初のプロセスはrootとして実行されます。特権を削除する方法はたくさんあります。特権を昇格させるすべての方法に加えて、いくつかの方法があります。
ctrl-alt-delor 2012

回答:


9

ポータブルソリューションは次のようになります。

su abc -c google-chrome

ただし、google-chromeはX11アクセスを必要とするため、セキュリティで保護されていない限り失敗する可能性があります。これは、特にrootとして実行している場合は非常に悪い考えです。

X11の調整/転送が許可されている場合、より良い方法は

ssh -X abc@localhost google-chrome

または

ssh -Y abc@localhost google-chrome

なぜsshアプローチの方が優れているのでしょうか?これはまだrootユーザーのXセッションを使用して実行しませんか?
Steve

1
使用@Steve su abc -c google-chromeので、おそらく最初の場所で失敗しabc、ルートのセッションを使用できない.Xauthorityために判読できないことabc
jlliagre 2018年

おっと申し訳ありませんが、あなたを誤解しました。セキュリティの観点からは、より良いものになるとお考え
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 ユーザーアプリケーション

楽しい。

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


やってみましたか?この特定の例は機能しないと思います。
jlliagre 2012

はい。別のユーザーセッションからXアプリケーションを起動するには、表示へのアクセスを許可する必要があります。しかし、これも可能です。残念ながら、これがどのように行われるのか正確には覚えていません。
セルジュ

@jlliagreしかし、トリッキーな方法で同じホストでXアプリを起動する方法を覚えています:ssh -X abc@localhost google-chrome:)
Serge

うーん...私はあなたが22分前にすでに投稿したものをコメントに書いています...
セルジュ

しかし、私は正しいソリューションに1つしか得ていないのに、まだ機能していないソリューションに6票の賛成票を投じています。StackExchangeモデルは非常にイライラすることがあります...
jlliagre

1

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

エラーなしでright clickデスクトップを実行するには、次のコマンドを使用して新しいランチャーを作成しますchromium-browser --user-data-dir。あなたはそれをあなたが望むものに名前を付けることができます、それを開くと、それはあなたにクロムブラウザを与えます。(Ubuntu 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.