sudoのパスワードを求めるプロンプトを表示し、bashスクリプトでプログラムで権限を上げますか?

sudoのパスワードを求めるプロンプトを表示し、bashスクリプトでプログラムで権限を上げますか?

私は現在、既存のLinuxシステム(現在Ubuntu)にさまざまなプログラムをインストールして設定するためのbashスクリプトを作成しています。プログラムをインストールし、高い権限を必要とするさまざまなフォルダに多くのファイルをコピーするため、「高い権限が必要です」という標準を実行して終了しました。

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

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

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

答え1

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

if [ $EUID != 0 ]; then
    sudo "$0" "$@"
    exit $?
fi

答え2

スクリプトの最初の行に以下を追加します。

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

グラフィックヒントを好む場合、またはsudoに変更しますgksugksudo

答え3

私は以下をお勧めします:

#!/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

答え4

visudo編集に使用するファイルはsudoers次のとおりです。

  • ユーザー行で、ユーザー名の横に以下を追加します。
    ALL=(ALL)       NOPASSWD: ALL
    
    その後、保存します。
  • ユーザー
    sudo su -
    
    彼はパスワードを入力せずにrootとしてログインします。

関連情報