以下はスクリプトです。
#!/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
したがって、事前に明確なユーザーのリストはありません。
答え1
編集する: OPが追加情報を提供したら、書き換えを完了してください。
実行権限を持つ/ etc / sudoersにユーザーを割り当てます/usr/sbin/sudo
。
これにより sudo コマンドを実行できますが、他のコマンドを実行する権限はありません。
私は新しいユーザーアカウントを使ってCentOS-7.3.1611でこれをテストしました。
testusr ALL=(ALL) NOPASSWD: /usr/sbin/sudo
許可されたコマンドのリストにsudoコマンド自体を指定することがセキュリティに影響を与えるかどうかは不明です。 本番環境で使用する前に確認してテストしてください。安全ではないかもしれません。
答え2
そのユーザー全体で任意のコマンドを実行できる場合にのみ、他のユーザーが実行できるコマンドを一覧表示できると思います。だから代わりに...
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