csensix
V2EX  ›  问与答

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

  •  
  •   csensix · Sep 22, 2013 · 9036 views
    This topic created in 4645 days ago, the information mentioned may be changed or developed.
    想用PHP做一个web管理系统,能够通过PHP执行预先写好的脚本。但这需要打开exec、system等权限,给系统安全带来了风险。所以想问问大家,有没有什么更好的方案?既能执行脚本又确保安全。在此谢过!
    12 replies    1970-01-01 08:00:00 +08:00
    9hills
        1
    9hills  
       Sep 22, 2013
    php以非特权用户启动,然后只给这个用户很少的权限就是了。。
    bixuehujin
        2
    bixuehujin  
       Sep 22, 2013
    白名单?
    lookhi
        3
    lookhi  
       Sep 22, 2013
    为啥要php去执行?
    可以这么搞不行么
    1. php去设定一个标志(创建一个文件,数据库加个字段啥的都行),需要执行脚本了。
    2. 脚本加到定时中,检测这个标志,存在则执行。
    mongodb
        4
    mongodb  
       Sep 22, 2013
    3l good idea
    但创建文件会带来风险(文件可以写入就是风险) 数据库加字段可能带来效率问题
    更好的办法是php输出一定的值,shell通过curl访问页面探测到特定值来执行下面的步骤
    2code
        5
    2code  
       Sep 22, 2013
    php使用个非特权用户, 给脚本Set UID权限设置为以root用户执行。
    csensix
        6
    csensix  
    OP
       Sep 22, 2013
    @lookhi 也有这样考虑过,但是需要实时响应,就像cPanel那样操作。
    csensix
        7
    csensix  
    OP
       Sep 22, 2013
    @mongodb 也许应该试试curl
    otakustay
        8
    otakustay  
       Sep 23, 2013
    写个脚本开个socket(http也成,随意了)监听,php把exec的信息送到socket上,则脚本来执行。php保持低权限,脚本提供高权限并使用白名单等手段控制可exec的命令在可控范围内。执行的过程等都可以通过socket自定义协议来输出
    wzxjohn
        9
    wzxjohn  
       Sep 23, 2013
    @otakustay 我觉得不能直接传命令的信息,这样的话可能会带入恶意参数。最好是指定有限的几个功能,每个功能分配一个ID,守护程序根据ID执行不同的操作。而且变量也需要严格过滤,宁可错杀不可放过。
    otakustay
        10
    otakustay  
       Sep 23, 2013
    @wzxjohn yes,相当于一个更严格的白名单,从安全的角度考虑是很适合的。socket相比3l提出的写文件,其安全风险会更小一点,毕竟文件系统的写权限本身就是个危险的事
    csensix
        11
    csensix  
    OP
       Sep 23, 2013
    @otakustay 朋友推荐了amh一键安装,有web界面的后台管理,通过软件手段过滤shell操作,效果很好,只是没弄明白实现的原理
    aliuwr
        12
    aliuwr  
       Sep 23, 2013
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3144 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 13:34 · PVG 21:34 · LAX 06:34 · JFK 09:34
    ♥ Do have faith in what you're doing.