sudo 不会将该命令解释为要执行的 shell 脚本。因此,您说过这个文字命令可以作为 normal_user 运行:
/usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}')
但是,由于 shell 会解释$(...)
调用 sudo 之前的内容,因此您正在运行的命令看起来更像这样:
sudo /usr/bin/kill 1234
所以它不允许你使用它。
正如 fedorqui 所建议的,您应该编写一个杀死用户的脚本,然后授予 normal_user 运行该脚本的权限(但要确保他们没有对该脚本或其目录的写入权限)。
kill_target_application.sh:
#!/bin/sh
/usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}')
使用此命令允许用户执行或读取脚本,但不能修改它:
chown root:root <filename>
chmod 755 <filename>
所有用户的 give (r)ead 和 e(x)ecute 权限,但只有 root 可以修改它。还要确保用户没有对该目录或其任何父目录的写入权限。如果您不熟悉这些实用程序,请在执行此操作之前阅读 chown 和 chmod 手册页。
visudo 条目:
normal_user ALL=(ALL) NOPASSWD: /path/to/kill_target_application.sh
您可能应该使用“killall”而不是这个复杂的 ps | grep 选项。或者至少看看 pgrep。
此外,这听起来确实像是一个初始化脚本的工作。