Debian Linuxで複雑なsudoコマンドを許可する


13

Debian Linuxボックスで特定のコマンドを1人のユーザーに許可する必要があります。私は/etc/sudoersファイルでこれを試しました:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

これは期待どおりに機能しません。sudoを使用してユーザーzabbixとしてコマンドを実行すると、パスワードを要求されます(ただし、NOPASSWDオプションを指定しました)。

ただし、これは機能します。

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

しかし、すべてのサブコマンドapt-getが許可されるという欠点があります。特定のコマンドのみを許可するようにこれを修正する方法はありますか?

回答:


10

私は横たわることに同意しません。awk動作しますが、ルートとして実行する必要はありません。あなたはawk何らかの方法で攻撃できるかもしれないので、私はこれに満足しません。結局のところ、完全なプログラミング言語インタープリターです。

1つがsudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'実行されるsudo /usr/bin/apt-get --print-uris -qq -y upgradeと、実際に実行され、呼び出し元ユーザーとしてパイプ/リダイレクトされます。

これを試して: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

ちなみに、lainのようにこれをスクリプトに入れても問題はありません。可能であれば、rootとしてawkを実行することは避けます。


1
あなたは正しいのですが、スクリプトが安全でない場合は、スクリプトの内容は重要ではありません。上書きされる可能性があり、世界はあなたのカキです。スクリプトが安全であれば、その中にあるものも安全です。
user9517

25

リダイレクションとsudoの相互作用の方法に反則している可能性があります。リダイレクトは、特権ユーザーではなく呼び出しユーザーで実行されます。スクリプトでコマンドをラップし、zabbixユーザーにそのスクリプトの実行を許可する方がおそらく簡単でしょう。

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

セットsudoersとして

zabbix  ALL=NOPASSWD: /path/to/script

これで、特定のapt-getコマンドだけでなく、スクリプト全体が特権ユーザーとして実行されます。ただし、zabbixユーザーがスクリプトに書き込めないことを確認してください。


1
sudoがすでにそれを処理している場合、おそらく誰かが私を修正することができます(env変数が渡されないという問題を抱えていることを覚えているようですが) 'PATH =〜user / bin:$ PATHをエクスポートして、
〜user

@Foon:sudoとcronを混同していると思います。
user9517

1
それを混乱はなく、superuser.com/questions/232231/...は(デフォルトではとLD_LIBARRAY_PATH)ことはsudo防止のPATH操作を示しん
FOON

似たようなことをしたのは、喚起するスクリプトをsuidし、rootのみが書き込み可能にしたことだけです。権限711を持つユーザーに対して機能するかどうかをテストすると、ユーザーはそれを試みて回避するために何を行っているかさえ見ることができません。
クリスK 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.