14

異なる特権でカスタム bash 関数を実行することは可能でしょうか?

#!/bin/bash
function RunStefano() {
     while [ 1 ]; do
         echo "Ciao, ´/usr/bin/whoami´"
         sleep 10;
     done &
}
export -f RunStefano;
echo "Welcome, ´/usr/bin/whoami´"
sudo -u stefano -c "RunStefano"

「root」ユーザーでこのスクリプトを実行すると、出力として受け取りたい:

Welcome, root
Ciao, stefano
    (...)
Ciao, stefano

それは可能でしょうか?

4

2 に答える 2

6

少なくとも直接的にはできません。(ただし、Richard Fletcher の回答を参照してください。)

プロセスは、特定のユーザー アカウントで実行されます。デフォルトでは、これはそれを呼び出したプロセスと同じアカウントです。sudoあるアカウントで実行されているプロセスが、別のアカウントで実行されている別のプロセスを起動できるようにします。

シェル関数を呼び出しても、新しいプロセスは起動されません。いくつかの変更により、スクリプトは次のようになります。

sudo: RunStefano: command not found

によって作成された新しいプロセスには、コマンドsudoはありません。RunStefano関数は、スクリプトを実行しているプロセスに対してローカルです。

関数を別の実行可能スクリプトに分離する必要があります。その後、 を介してそのスクリプトを呼び出すことができますsudo

/usr/bin/whoamiちなみに、前後のアポストロフィもバッククォートに変更する必要があります。

echo "Ciao, `/usr/bin/whoami`"

sudoまた、コマンドのドキュメントを読む必要があります。-cオプションはありません。

于 2013-07-29T14:54:24.870 に答える