atfa 发表于 2005-5-10 10:50:57

如何让用户不能用ctrl+c退出一个脚本?

经过这几天斑竹和vimchina的帮助,我写了一个脚本,这个脚本要让其他用户用root权限去执行。

现在我想知道,怎样才能让其他用户执行期间不让我这个脚本可以用ctrl+c退出?

所以我需要一个真正安全的菜单系统。

BOoRFGOnZ 发表于 2005-5-10 10:56:04

if[ `whoami` != "root" ]
         trap "" 2
fi

atfa 发表于 2005-5-10 11:02:47

BOoRFGOnZ, 这一串加到我脚本中的什么位置呢?

另外,加上这个以后我怎么调试呢?

BOoRFGOnZ 发表于 2005-5-10 11:18:13

aa()
{ if [ `whoami` = "root" ]
       exit 2
   else
      :
   fi
}
trap aa 2
放那里都可以
对全局作用

atfa 发表于 2005-5-10 11:24:56

BOoRFGOnZ, 对不起啊,我还是没有弄明白

我用root运行这个脚本,整个脚本写在一个aa()里面else部分,trap来执行aa

但是aa的第一步就是判断是不是root,如果是就退出了,那我的脚本根本就不会执行啊

BOoRFGOnZ 发表于 2005-5-10 11:30:05

你搞错了
!!!!!!!!!!!!!
冒号 不是让你把你的程序放到后面的!


aa()
{ if [ `whoami` = "root" ]
       exit 2
   else
      :
   fi
}
trap aa 2

整体放到你的代码前面

atfa 发表于 2005-5-10 11:31:37

小弟不才,大哥见笑了。

可是


aa()
{
if [ `whoami` = "root" ]; then
      exit 2
else
      :
fi
}
trap aa 2

echo Please Input
read UINFO
echo $UINFO


当我在输入UINFO的时候ctrl+C就出去了

BOoRFGOnZ 发表于 2005-5-10 11:35:38

如果是root用户 就出去
别的 不出去的

atfa 发表于 2005-5-10 11:36:33

哦,我懂了,是防止其他用户出去的……

你看我现在的情况是这样的

我有一个root,有一个atfa,atfa和root的uid都是0,也就是说atfa和root是一个用户

我要用atfa来执行一个脚本,因为必须要root权限,但是又不能直接给root的用户

所以采用uid相同的办法

现在不允许atfa用ctrl c退出来,就用你的方法可以吧?

BOoRFGOnZ 发表于 2005-5-10 11:40:18

Re: 如何让用户不能用ctrl+c退出一个脚本?

经过这几天斑竹和vimchina的帮助,我写了一个脚本,这个脚本要让其他用户用root权限去执行。

现在我想知道,怎样才能让其他用户执行期间不让我这个脚本可以用ctrl+c退出?

所以我需要一个真正安全的菜单系统。
是这个意思吗?

atfa 发表于 2005-5-10 11:45:32

的确是其他用户,但是我的用户说的是“人”不是“accuont” :( sorry,我没有表达清楚

也就是说,不管什么用户,都只能用菜单里面的EXIT选项(exit 0)退出才行

当我调试好了以后

就要把退出的选项删除掉……让那个叫做atfa的帐号一登录就执行我的脚本,无法退出到命令提示符,要退出的话必须关掉远程登陆窗口,保证安全。

atfa 发表于 2005-5-10 12:20:30

我同事是这样做的(aix的机器):

直接在脚本最后加一个


trap "" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 19


但是我在linux上没有成功。

BOoRFGOnZ 发表于 2005-5-10 12:59:45

根据你的要求
哦,我懂了,是防止其他用户出去的……

你看我现在的情况是这样的

我有一个root,有一个atfa,atfa和root的uid都是0,也就是说atfa和root是一个用户

我要用atfa来执行一个脚本,因为必须要root权限,但是又不能直接给root的用户

所以采用uid相同的办法

现在不允许atfa用ctrl c退出来,就用你的方法可以吧?
不好意思吃饭去了看看这个
如下
aa()
{ username=`whoami`
   grep ":0:0:" /etc/passwd | awk -F: '{print $1}' | grep "$username" > /dev/null
if [ $? = 0 ] ;then
       exit 2
   else
      :
   fi
}
trap aa 2
除了uid=0的用户以外 不可以使用ctrl + c终止程序!

atfa 发表于 2005-5-10 14:34:04

经过测试…………

只要在整个脚本最开始加一行:

      trap "" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

就可以保证整个脚本,以及执行的子进程都不会被ctrl-c退出,包括root用户都一样。

Linux和AIX下测试通过……

wolf0403 发表于 2005-5-10 14:50:10

。。这个代码就是说对所有的信号不响应。。
页: [1] 2
查看完整版本: 如何让用户不能用ctrl+c退出一个脚本?