web-dev-qa-db-ja.com

ルートを使用している場合、bashスクリプトでSudoを無視する

この質問は bashスクリプトでSudoを無視する と重複していません


Ubuntu 14.04のドッカーイメージに基づいてドッカーイメージを作成しています。ご存じのように、rootはdockerのデフォルトユーザーです。 bashスクリプトを実行してソフトウェアをインストールすると、

Sudo: error in /etc/Sudo.conf, line 0 while loading plugin `sudoers_policy'
Sudo: /usr/lib/Sudo/sudoers.so must be owned by uid 0
Sudo: fatal error, unable to load plugins

私が試してみました chown root /usr/lib/Sudo/sudoers.so、しかしそれは機能していません。


この動作は奇妙です:

ls    (everyone can do this)
Sudo ls   (you can't do this even if you are root)

私はdockerイメージを構築しているため、Sudoをサポートルートにするために無相関のパッケージをインストールしたくありません。しかし、いくつかのbashスクリプトにはSudoがたくさんあるため、単にSudoを空に置き換えるのは良い選択ではないかもしれません。

だから私はあなたがrootであるときにSudoのみを無視する方法があるかどうか疑問に思っています

1
Mithril

スクリプトの最初に向かって、必要に応じてSudoを実際のSudoを呼び出す関数として定義します。

Sudo ()
{
    [[ $EUID = 0 ]] || set -- command Sudo "$@"
    "$@"
}

command Sudo foo barは、関数またはエイリアスの代わりに実際のSudoコマンドを使用するようにbashに指示します。 $EUIDは有効なユーザーIDであり、$UIDとは異なる場合があります。

1
muru