web-dev-qa-db-ja.com

Sudoパスワードを要求し、bashスクリプトでプログラム的に特権を昇格しますか?

私は現在、標準のLinuxシステム(現在はUbuntu)にさまざまなプログラムをインストールしてセットアップするbashスクリプトに取り組んでいます。これはプログラムをインストールし、昇格された特権を必要とするさまざまなフォルダーに多数のファイルをコピーするため、標準の「昇格された特権が必要」および終了を既に実行しました。

ただし、可能であれば、ユーザーがSudoパスワードを入力するように要求し、ユーザーがSudoを使用してスクリプトコマンドを実行しない場合(GUIファイルマネージャーから起動するなど)にスクリプトの権限を自動的に昇格できるようにしたいと考えています。ユーザーがスクリプトを再起動する必要はありません。

これはストックLinuxインストールで実行するように設計されているため、システムを変更するオプションは、私の目的には機能しません。すべてのオプションをスクリプト自体に含める必要があります。

これはBash内で可能ですか?もしそうなら、これを行うための最良の(安全でありながら簡潔な)方法は何ですか?

53
Shauna

スクリプトから直接Sudoを実行します。

if [ $EUID != 0 ]; then
    Sudo "$0" "$@"
    exit $?
fi
66
Michael Mrozek

これをスクリプトの最初の行として追加します。

[ "$UID" -eq 0 ] || exec Sudo bash "$0" "$@"

グラフィカルプロンプトが必要な場合は、Sudogksuまたはgksudoに変更します。

17
Kevin

私は提案します:

#!/bin/bash

if (($EUID != 0)); then
  if [[ -t 1 ]]; then
    Sudo "$0" "$@"
  else
    exec 1>output_file
    gksu "$0 $@"
  fi
  exit
fi

# some example stuff
ls -l /root
echo "app: $0"
for f; do
  echo ">$f<"
done
16
enzotib

共有しても構わないスクリプトの例::

#!/bin/bash
[ "$UID" -eq 0 ] || exec Sudo "$0" "$@" && echo -n "Sudo bash what: "
read WHAT
Sudo $WHAT

--ImP.TeK