QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2899|回复: 16

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

[复制链接]
发表于 2005-5-10 10:50:57 | 显示全部楼层 |阅读模式
经过这几天斑竹和vimchina的帮助,我写了一个脚本,这个脚本要让其他用户用root权限去执行。

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

所以我需要一个真正安全的菜单系统。
发表于 2005-5-10 10:56:04 | 显示全部楼层
if[ `whoami` != "root" ]
         trap "" 2
fi
回复

使用道具 举报

 楼主| 发表于 2005-5-10 11:02:47 | 显示全部楼层
BOoRFGOnZ, 这一串加到我脚本中的什么位置呢?

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

使用道具 举报

发表于 2005-5-10 11:18:13 | 显示全部楼层
[code:1]aa()
{ if [ `whoami` = "root" ]
       exit 2
   else
      :
   fi
}
trap aa 2 [/code:1]
放那里都可以
对全局作用
回复

使用道具 举报

 楼主| 发表于 2005-5-10 11:24:56 | 显示全部楼层
BOoRFGOnZ, 对不起啊,我还是没有弄明白

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

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

使用道具 举报

发表于 2005-5-10 11:30:05 | 显示全部楼层
你搞错了
!!!!!!!!!!!!!
冒号 不是让你把你的程序放到后面的!


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

整体放到你的代码前面
回复

使用道具 举报

 楼主| 发表于 2005-5-10 11:31:37 | 显示全部楼层
小弟不才,大哥见笑了。

可是

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

echo Please Input
read UINFO
echo $UINFO
[/code:1]

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

使用道具 举报

发表于 2005-5-10 11:35:38 | 显示全部楼层
如果是root用户 就出去
别的 不出去的
回复

使用道具 举报

 楼主| 发表于 2005-5-10 11:36:33 | 显示全部楼层
哦,我懂了,是防止其他用户出去的……

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

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

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

所以采用uid相同的办法

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

使用道具 举报

发表于 2005-5-10 11:40:18 | 显示全部楼层

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

[quote:9b642fea90="atfa"]经过这几天斑竹和vimchina的帮助,我写了一个脚本,这个脚本要让其他用户用root权限去执行。

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

所以我需要一个真正安全的菜单系统。[/quote]
是这个意思吗?
回复

使用道具 举报

 楼主| 发表于 2005-5-10 11:45:32 | 显示全部楼层
的确是其他用户,但是我的用户说的是“人”不是“accuont” sorry,我没有表达清楚

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

当我调试好了以后

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

使用道具 举报

 楼主| 发表于 2005-5-10 12:20:30 | 显示全部楼层
我同事是这样做的(aix的机器):

直接在脚本最后加一个

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

但是我在linux上没有成功。
回复

使用道具 举报

发表于 2005-5-10 12:59:45 | 显示全部楼层
根据你的要求
[quote:a6589e655b="atfa"]哦,我懂了,是防止其他用户出去的……

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

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

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

所以采用uid相同的办法

现在不允许atfa用ctrl c退出来,就用你的方法可以吧?[/quote]
不好意思吃饭去了  看看这个
如下[code:1]
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 [/code:1]
除了uid=0的用户以外 不可以使用ctrl + c终止程序!
回复

使用道具 举报

 楼主| 发表于 2005-5-10 14:34:04 | 显示全部楼层
经过测试…………

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

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

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

Linux和AIX下测试通过……
回复

使用道具 举报

发表于 2005-5-10 14:50:10 | 显示全部楼层
。。这个代码就是说对所有的信号不响应。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-10-3 06:24 , Processed in 0.057329 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表