免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1592 | 回复: 1

[系统管理] 请问在脚本里启动gdb,如何将输入限定在gdb程序里? [复制链接]

论坛徽章:
0
发表于 2018-11-13 08:42 |显示全部楼层
各位大神,我这有个需求,要在嵌入式设备里限制root的权限,我的方案是写了一个脚本替换bash:
我修改了/etc/passwd文件,将root用户的shell改成我的一个脚本:
root:0:0:root:/root:/bin/test.sh

然后我的脚本test.sh是这样写的:

while read -e -p "[${TOKEN} ${PWD##*/}]$ " line
do
REAL_KEY_NAME=`echo $line | awk -F '[ \t=]' '{print $1;}'`
OPTION=`echo $line | sed -r "s/^$REAL_KEY_NAME//g;s/^[[:space:]]+//g"`
echo "REAL_KEY_NAME=$REAL_KEY_NAME OPTION=$OPTION"
if [ "x$REAL_KEY_NAME" == "x" ]; then
        continue
fi
if [ "x$REAL_KEY_NAME" == "xexit" ]; then
        exit 0
fi
#在这中间检测命令是否允许执行,省略
eval $line  允许执行的命令在此处执行
done

这个脚本有些小问题,但基本上勉强能用。  但有一个问题,影响功能了。
就是我执行gdb去启动一个程序的时候,会从gdb里跳出来,输入直接进入到了我的test.sh脚本里,这时其实gdb进程还在,但是我输入gdb收不到了。

在我的脚本里执行gdb如下:
[limitedshell nand]$ ./gdb licensecheck
sed: bad option in substitution expression
REAL_KEY_NAME=./gdb OPTION=
GNU gdb (GDB) 7.5.1
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "mipsel-buildroot-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/OAM/bin/licensecheck...(no debugging symbols found)...done.
(gdb) r passive   --这里还在gdb里面,但是一执行这个命令就跳出gdb了。
Starting program: /root/OAM/bin/licensecheck passive
limited shell,just allow those cmds:  这些就是我的脚本的usage的打印,感觉是重新启动了一遍脚本。
;export;reboot;kill;killall;gdb;ssh;serialcontrol;ps;top;ls;ll;pwd;cd;cat;tail;more;less;grep;ifconfig;netstat;rm;route;ip;wrcfgset;devset;
if you want use notlimited shell, get lisence first!
or use guest:guest to login!
PS1=  bash=/bin/sh
[limitedshell nand]$
REAL_KEY_NAME= OPTION=
[limitedshell nand]$ ps aux | grep gdb   此时gdb程序其实还在,但感觉gdb失去了输入焦点,不能输入了。
REAL_KEY_NAME=ps OPTION=aux | grep gdb
root     28366  0.0  0.5   8528  3560 pts/1    S    08:39   0:00 ./gdb licensecheck
root     28424  0.0  0.1   4220   648 pts/1    S+   08:39   0:00 grep gdb
[limitedshell nand]$ bt  执行gdb的命令gdb接收不到,被脚本接收了。
REAL_KEY_NAME=bt OPTION=
/bin/test.sh: line 141: bt: command not found

请问大神,我这个问题怎么解?  或者还有什么好的方案实现我的需求,非常感谢。。

论坛徽章:
0
发表于 2018-11-22 09:58 |显示全部楼层
此问题我已经解了。
gdb里执行r 后启动了一个新的shell,由于改了passwd文件将root用户的shell改了,所以变成了我的脚本。为了能用gdb又实现功能,不能改passwd文件修改root用户的shell,只能在profile文件里起脚本。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP