web-dev-qa-db-ja.com

特定のSudoコマンドを実行するようにユーザーを制限する

スクリプトは次のとおりです。

#!/bin/bash

user='my_Sudo_user'
Sudo -lU $user

non_Sudo_userを制限して、このスクリプトを実行できるようにしようとしていました。 visudoを使用して、次のことを試しました。

non_Sudo_user ALL=(ALL) NOPASSWD: /bin/bash /full/path/script.sh
non_Sudo_user ALL=(ALL) NOPASSWD: /usr/bin/Sudo -lU
non_Sudo_user ALL=(ALL) NOPASSWD: /usr/bin/Sudo -lU *   # unsafe

それらのどれも動作しません。私はこのメッセージを受け取ります:

Sorry, user non_Sudo_user is not allowed to execute 'list' as my_Sudo_user on Host123.

しかし、私はsudoerファイルで-lを提供しました。

私に何ができる?ちなみにこれはUbuntuです。

[〜#〜]編集[〜#〜]

私は実際にこのスクリプトを実行します:

for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do Sudo -lU $u ; done

ですから、事前に明確なユーザーリストはありません。

2
CppLearner

EDIT: OPがより多くの情報を提供した後、完全に書き直します。

/ etc/sudoersで、_/usr/sbin/Sudo_を実行する権限を持つユーザーを指定します。

これにより、ユーザーはSudoコマンドを実行できますが、他のコマンドを実行する権限はありません。

CentOS-7.3.1611で新しいユーザーアカウントを使用してこれをテストしました。

testusr ALL=(ALL) NOPASSWD: /usr/sbin/Sudo

許可されたコマンドのリストでSudoコマンド自体を指定することによるセキュリティ上の影響があるかどうかはわかりません実稼働環境でこれに依存する前に、確認してテストしてください...安全でない可能性があります。

1
0xSheepdog

別のユーザーが(ALL)として任意のコマンドを実行できる場合にのみ、そのユーザーが実行できるコマンドを一覧表示できると思います。代わりに...

Sudoersの場合:

non_Sudo_user ALL=(ALL) NOPASSWD: /usr/bin/Sudo -l

それらをリストするには、non_Sudo_userとして実行します。

for target_user in user1 user2 user3... ; do
    Sudo -u "$target_user" Sudo -l
done
0
derobert