他のユーザーとしてスクリプトの一部を実行するにはどうすればよいですか?

他のユーザーとしてスクリプトの一部を実行するにはどうすればよいですか?
#!/bin/ksh
(some code)
Log=~/my.log
chown USER1 filename

su - USER1 -c "
date | tee -a ${Log} 2>&1; 
cd /blah/blah
if [ SOMECONDITION ]
then
sh ./somescript.ksh > logfile
fi
exit" | tee -a ${Log} 2>&1;

スクリプトがUSER1に切り替えられると、停止してから手動で終了する必要があるときに再実行される傾向があります。

ベストアンサー1

パスワードの入力を求められますが、パスワードを取得できないため、「su」コマンドでスクリプトを停止したいと思います。

通常、いくつかの解決策があります:)

標準入力でパスワードを許可する-Sスイッチ付きの「su」の代わりに「sudo」を使用してください。

echo "password" | sudo -S -u USER1 sh -c "...

または、他のユーザーとして実行する必要があるアプリケーション/スクリプトの一部をヘルパーアプリケーションに移動します。その後、ヘルパーアプリケーションでset-uidとset-gidを使用して、保存されたプレーンテキストパスワード(一部のセキュリティ上の問題がある)でスクリプトを防ぐことができます。

chown USER1.GRP1 helperapp
chmod 6755 helperapp

これにより、システム内の誰でもUSER1でhelperappを実行できるというリスクがあります。 set-uid/gid を使用することに加えて、特定のユーザーがパスワードプロンプトなしで het helperapp を USER1 として実行できるようにするには、sudo 構成を使用できます (管理者/root 権限が必要)。

# /etc/sudoers
# Allow USER2 to run helperapp as USER1 without prompting for a password
USER2 ALL=(USER1) NOPASSWD:/path/to/helperapp

その後、コードは次のようになります。

#!/bin/ksh
(some code)
Log=~/my.log
chown USER1 filename

sudo -u USER1  /path/to/helperapp |  tee -a ${Log} 2>&1;

これはテストされていないため、使用上の責任はユーザー自身にあります。

おすすめ記事