just1
V2EX  ›  问与答

php 如何进行环境隔离

  •  
  •   just1 · Oct 5, 2016 · 3211 views
    This topic created in 3536 days ago, the information mentioned may be changed or developed.

    我的博客是 wordpress ,总是担心放在日常服务器不安全,因为 php 可以访问其他的 777 权限目录, 777 目录在有的地方难免有,有没有办法解决这个问题,让 php 只能在自己这个目录执行。

    ovear
        1
    ovear  
       Oct 5, 2016   ❤️ 1
    open_basedir
    kungfuchicken
        2
    kungfuchicken  
       Oct 5, 2016   ❤️ 1
    上 docker
    just1
        3
    just1  
    OP
       Oct 5, 2016
    @ovear 如果有多个 vhost , open_basedir 应该也没用吧(跨站)
    just1
        4
    just1  
    OP
       Oct 5, 2016
    @kungfuchicken docker 不持久化啊,而且不方便
    kungfuchicken
        5
    kungfuchicken  
       Oct 5, 2016
    @just1 docker 可以挂载 host 的目录啊....挂载后 docker 里面访问不到 host 的其他目录
    just1
        6
    just1  
    OP
       Oct 5, 2016
    @kungfuchicken 好麻烦 TAT ,虽然确实是一个方法
    ovear
        7
    ovear  
       Oct 5, 2016
    @just1 对每个 vhost 指定不同 open_basedir 就好
    jybox
        8
    jybox  
       Oct 5, 2016
    难道不是应该考虑为什么有 777 的目录么
    just1
        9
    just1  
    OP
       Oct 5, 2016
    @ovear OK ,多谢
    just1
        10
    just1  
    OP
       Oct 5, 2016
    @jybox 因为方便又想要安全(∩_∩)
    imlonghao673
        11
    imlonghao673  
       Oct 5, 2016 via Android
    @just1 安全???.jpg
    msg7086
        12
    msg7086  
       Oct 5, 2016
    除了 /tmp 之类的地方以外想不到什么地方是应该用 777 的。
    ryd994
        13
    ryd994  
       Oct 5, 2016 via Android   ❤️ 1
    1docker
    2chroot
    3 所有地方都不应该 777 ,以及 777 的都是可以公开的
    4chroot 设置起来更麻烦,最后还是 docker 方便
    lhbc
        14
    lhbc  
       Oct 5, 2016
    我想知道为什么“ 777 目录在有的地方难免有”
    我们都恨不得上 SELinux+ACL ,居然还有人给 777 目录
    shiji
        15
    shiji  
       Oct 5, 2016
    open_basedir 是很有用的,但是你得动手试一试,不能大嘴一撇随口一说。因为这里面是有坑的 : ) 要记得把 /tmp 也写进去, linux 系统用冒号分隔多个目录,对于早期 PHP 版本,目录后面加不加斜杠也是有讲究的

    关于文件权限:
    我自己的配置一般是 项目里面的文件夹 770 , 文件 640 (这个配置不适用于 CLI 模式)
    owner 是 root 或者你自己的账户, group 是 www-data
    DesignerSkyline
        16
    DesignerSkyline  
       Oct 6, 2016
    如果 WP 暂时需要更新升级,这个时候肯定是需要 777 的,需要的时候改一下,不需要的时候把权限给改回来就行。
    ivmm
        17
    ivmm  
       Oct 6, 2016
    chown -R $user /dir
    tabris17
        18
    tabris17  
       Oct 6, 2016
    open_basedir 只防 fopen ,能读写文件的方法多了去了
    shiji
        19
    shiji  
       Oct 6, 2016 via Android
    @tabris17 举个近代版本(>=5.6)的例子?/或者发个链接?我想了解一下
    cxbig
        20
    cxbig  
       Oct 6, 2016
    1. 环境隔离可以用 docker
    2. 777 是最糟糕的权限方式,你倒不如研究下如何避免使用它
    gdtv
        21
    gdtv  
       Oct 6, 2016 via iPhone
    @tabris17 求突破 open_basedir 的方法,谢谢
    tabris17
        22
    tabris17  
       Oct 6, 2016
    @shiji
    @gdtv

    利用 mysql 的 select ...... into outfile ......
    shiji
        23
    shiji  
       Oct 6, 2016
    @tabris17
    我觉得首先呢,这个方法跟 PHP 没关系啊,需要拿到 MySQL 的权限。
    其次,这个 SQL 需要当前 SQL 用户有 FILE 权限,通常来说创建的新用户默认都不会带有任何数据库核心权限( FILE,PROCESS,SHUTDOWN 之类的)。除非用户脑残,所有程序都用数据库的 root 账户跑。。

    参看: http://dev.mysql.com/doc/refman/5.7/en/select-into.html
    The SELECT ... INTO OUTFILE 'file_name' form of SELECT writes the selected rows to a file. The file is created on the server host, so you must have the FILE privilege to use this syntax.
    tabris17
        25
    tabris17  
       Oct 6, 2016
    @shiji

    还想到一个,利用.htaccess 覆盖 php.ini 配置,不过没侧过,不知道是否有效
    kn007
        26
    kn007  
       Oct 6, 2016
    如今居然还有 777 需求
    tabris17
        27
    tabris17  
       Oct 6, 2016
    @shiji

    另外 利用执行外部命令也一样可以绕过

    比如:
    shell_exec("echo sometext>/other/path/bypass.txt");
    shiji
        28
    shiji  
       Oct 6, 2016
    @tabris17 .htaccess 如果 Apache 对项目目录设置了 AllowOveride All 或者 Options 的话,应该可行.
    shell_exec 。。这个。。属于作弊!相当于已经有了木马了
    iyaozhen
        29
    iyaozhen  
       Oct 6, 2016 via Android
    @shiji 所以还是要从源头解决问题,楼主为什么要那么多 777 。😱
    regist
        30
    regist  
       Oct 6, 2016
    难道只有我一个人用 700 600 么...
    sutra
        31
    sutra  
       Oct 6, 2016
    FreeBSD Jail
    chemandy
        32
    chemandy  
       Oct 6, 2016
    从来没有 777 的路过...
    just1
        33
    just1  
    OP
       Oct 6, 2016
    尴尬、、、、
    赶快下沉主题 TAT 我比较懒而已嘛
    rainysia
        34
    rainysia  
       Oct 6, 2016
    我只能说给 777 的, 你 nginx/apache, php 绝对没配对, 而你也不知道为什么
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2859 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 114ms · UTC 13:45 · PVG 21:45 · LAX 06:45 · JFK 09:45
    ♥ Do have faith in what you're doing.