Linux 如何允许普通用户在没有密码的情况下杀死visudo中的某个根应用程序

Linux 如何允许普通用户在没有密码的情况下杀死visudo中的某个根应用程序,linux,kill,Linux,Kill,我想让一个普通用户杀死一个由root用户启动的应用程序 在visudo中: 我添加了这样一行: normal_user ALL=(ALL) NOPASSWD: /usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}') sudo /usr/bin/kill 1234 但在保存它并以普通用户身份执行以下命令后,我仍然会得到输入root密码的提示: sudo /usr/bin/kill $(ps aux | gre

我想让一个普通用户杀死一个由root用户启动的应用程序

在visudo中:

我添加了这样一行:

normal_user ALL=(ALL) NOPASSWD: /usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}')
sudo /usr/bin/kill 1234
但在保存它并以普通用户身份执行以下命令后,我仍然会得到输入root密码的提示:

sudo /usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}')

那我该怎么办?非常感谢

sudo不会将命令解释为要执行的shell脚本。因此,您已经说过,此文字命令可以作为普通用户运行:

/usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}')
但是,由于shell将在调用sudo之前解释
$(…)
中的内容,因此您正在运行的命令看起来更像这样:

normal_user ALL=(ALL) NOPASSWD: /usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}')
sudo /usr/bin/kill 1234
所以它不允许你使用它

正如fedorqui所建议的那样,您应该编写一个杀死用户的脚本,然后给普通用户运行该脚本的权利(确保他们没有对脚本或其目录的写访问权)

kill_target_application.sh:

#!/bin/sh
/usr/bin/kill $(ps aux | grep 'target_application' | awk '{print $2}')
使用此命令允许用户执行或读取脚本,但不允许修改脚本:

chown root:root <filename>
chmod 755 <filename>
您可能应该使用“killall”而不是这个复杂的ps | grep选项。或者至少看看pgrep


另外,这听起来像是初始化脚本的工作。

我认为最好将此选项添加到脚本中,并且在sudoers中允许用户无需密码即可运行它。谢谢您的评论!事实上,我被困在这个问题中,因为我最初的方法也是将其保留在外部脚本中。然而,这意味着如果普通用户更改脚本的内容,他将能够做任何他想做的事情。。。这是非常糟糕的…因此您可以确保用户没有对脚本或目录的写入权限。