我正在尝试这一点,但做得不好而且我被困住了。我有一个限制sudo的用户只能运行某些命令。它们有时会运行多个命令,并且需要能够杀死某些命令/进程。命令是tcpdump,当它生成为sudo时,它会创建2个进程。再次运行,总数为4.每个2绑定到每个tcpdump实例,所以我让我的脚本找到PPID,我将杀死它来处理子进程。以下是我到目前为止的情况:
#!/bin/bash
RESULT1=$(ps -ef | grep "sudo tcpdump" | grep -v grep)
RESULT2=$(ps -ef | grep "sudo tcpdump" | grep -v grep | awk '{print $3}')
echo $RESULT1
echo $RESULT2
if [ "$RESULT2" = "$RESULT2" ]
then
echo "Choose which PPID you wish to kill"
fi
到目前为止输出如下:
root 14485 14456 0 16:01 pts/0 00:00:00 sudo tcpdump -n -i any port 53
root 14743 14720 0 16:09 pts/2 00:00:00 sudo tcpdump -n -i any port 220
14456 14720
Choose which PPID you wish to kill
我的想法
if [ "$RESULT2" = "$RESULT2" ]
以某种方式告诉剧本他们只被允许杀死它找到的PPID。 (因为他们不能自由地杀死任何东西)但我现在想,这不是实现这一目标的方法。
我正在绘制关于如何告诉脚本突破$ RESULT2的空白,以便我可以为用户提供选项。那么,任何人都可以帮助我继续前进,这样用户现在可以在找到的PPID之间进行选择并让脚本只允许它们杀死那些?
答案 0 :(得分:1)
这将始终评估为true:
read input
sudo kill `echo "$RESULT2" |
awk -v input="$input" 'input==$1'` ||
echo "Invalid PID"
所以这不是一个有用的测试。相反,您可以验证用户输入以确保它等于RESULT2中的一行:
{{1}}
答案 1 :(得分:1)
HttpContext.Current.User.Identity.Name