root以外のユーザーから/etc/sudoers.d/にファイルを追加するには?

root以外のユーザーから/etc/sudoers.d/にファイルを追加するには?

ユーザーがルートではなくCentos 6.8用のスクリプトを作成しようとしています。サイトに管理者がいないため、同じスクリプトを介して(/etc/sudoers.dにファイルを追加して)スクリプトをsudoersに追加する必要があります。

スクリプトがユーザーに root パスワードの入力を求めるメッセージを表示する必要があるようです。そうですか?それ以外の場合、この問題を解決するためのルールは何ですか(ルートで実行するときにsudoerに2番目のスクリプトを追加することを除く)。

私は同様のことを試しました:

echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo

これ:

ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')

提案に従ってくださいここただし、これは続行するように求められます。

私の基本的な質問は、パスワードを求めるプロンプトを表示し、それを使用してユーザーにスクリプトの実行権限を付与する方法です。

もう一つのオプションは、スクリプトをrootとして実行することですが、それができるかどうかを確認したいと思いました。

答え1

権限をエスカレートするためにパスワードの入力を求めるメッセージを表示するには、次を追加します。

sudo -v

この前に並んでいます。スクリプトは停止し、パスワードを要求した後に許可されたパスワードを入力して続行するか、パスワードの確認に失敗すると終了します。

効果的に:

#!/bin/bash

# Initiate sudo session
sudo -v
# Execute command; sudo session for tee is already active.
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo

長期実行スクリプトの場合は、早期実行関数にすることをお勧めします。

sudo -v
while true;
do
    sudo -n true
    sleep 60
    kill -0 "$$" || exit
done 2>/dev/null &

スクリプトは次のとおりです。

#!/bin/bash

sudoChk () {
    sudo -v
    while true;
    do
        sudo -n true
        sleep 60
        kill -0 "$$" || exit
    done 2>/dev/null &
}

sudoChk
#...long running commands...
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
exit 0

また、以下を探している可能性があります。

sudo sh -c

変える

sudo su -c

関連情報