ユーザーがルートではなく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