特定のユーザ権限でのみ実行されるシェルスクリプト
あるシェルスクリプト(commands.sh とする)を特定のユーザ権限でのみ実行されるようにすることを考える。
commands.sh の所有者が someone であれば sticky bit を使うだけでよい。
chmod u+s commands.sh
所有権が自分以外に変更できない場合、su
すればいいだけだが su
を忘れてしまうのを避けるにはどうするか。
以下のような方法を考えてみた。(bash
限定)
as_someone というファイルを準備する。
if [[ "$USER" != "someone" ]]; then
echo -n 'Enter someone '
su - someone -c "$(readlink -f $0) $*"
exit
fi
このファイルには実行権はつけず、someone として実行させたいシェルスクリプトと同じディレクトリに置く。
commands.sh は以下のようにすればよい。
#!/bin/bash
. $(dirname $0)/as_someone
echo "Following commands are executed by someone."
echo "I am $USER"
env
:
これで commands.sh は someone として実行することもできるし、間違って別ユーザで実行した場合でもパスワードさえ入力すれば someone として実行される。