PHP执行外部命令(shell),又要确保安全性 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
csensix
V2EX    问与答

PHP执行外部命令(shell),又要确保安全性

  csensix 2013-09-22 19:43:24 +08:00 8730 次点击
这是一个创建于 4417 天前的主题,其中的信息可能已经有所发展或是发生改变。
想用PHP做一个web管理系统,能够通过PHP执行预先写好的脚本。但这需要打开exec、system等权限,给系统安全带来了风险。所以想问问大家,有没有什么更好的方案?既能执行脚本又确保安全。在此谢过!
12 条回复    1970-01-01 08:00:00 +08:00
9hills
    1
9hills  
   2013-09-22 19:47:21 +08:00
php以非特权用户启动,然后只给这个用户很少的权限就是了。。
bixuehujin
    2
bixuehujin  
   2013-09-22 21:56:33 +08:00
白名单?
lookhi
    3
lookhi  
   2013-09-22 22:00:15 +08:00
为啥要php去执行?
可以这么搞不行么
1. php去设定一个标志(创建一个文件,数据库加个字段啥的都行),需要执行脚本了。
2. 脚本加到定时中,检测这个标志,存在则执行。
mongodb
    4
mongodb  
   2013-09-22 22:09:02 +08:00
3l good idea
但创建文件会带来风险(文件可以写入就是风险) 数据库加字段可能带来效率问题
更好的办法是php输出一定的值,shell通过curl访问页面探测到特定值来执行下面的步骤
2code
    5
2code  
   2013-09-22 22:13:30 +08:00
php使用个非特权用户, 给脚本Set UID权限设置为以root用户执行。
csensix
    6
csensix  
OP
   2013-09-22 23:02:48 +08:00
@lookhi 也有这样考虑过,但是需要实时响应,就像cPanel那样操作。
csensix
    7
csensix  
OP
   2013-09-22 23:03:9 +08:00
@mongodb 也许应该试试curl
otakustay
    8
otakustay  
   2013-09-23 02:49:41 +08:00
写个脚本开个socket(http也成,随意了)监听,php把exec的信息送到socket上,则脚本来执行。php保持低权限,脚本提供高权限并使用白名单等手段控制可exec的命令在可控范围内。执行的过程等都可以通过socket自定义协议来输出
wzxjohn
    9
wzxjohn  
   2013-09-23 02:55:21 +08:00
@otakustay 我觉得不能直接传命令的信息,这样的话可能会带入恶意参数。最好是指定有限的几个功能,每个功能分配一个ID,守护程序根据ID执行不同的操作。而且变量也需要严格过滤,宁可错杀不可放过。
otakustay
    10
otakustay  
   2013-09-23 11:50:43 +08:00
@wzxjohn yes,相当于一个更严格的白名单,从安全的角度考虑是很适合的。socket相比3l提出的写文件,其安全风险会更小一点,毕竟文件系统的写权限本身就是个危险的事
csensix
    11
csensix  
OP
   2013-09-23 13:13:19 +08:00
@otakustay 朋友推荐了amh一键安装,有web界面的后台管理,通过软件手段过滤shell操作,效果很好,只是没弄明白实现的原理
aliuwr
    12
aliuwr  
   2013-09-23 13:32:26 +08:00
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1318 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 25ms UTC 16:48 PVG 00:48 LAX 09:48 JFK 12:48
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86