首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

PHP 的启动主进程是 root 用户,这是否安全?

  •  
  •   andybest · 2014-10-27 13:36:24 +08:00 · 4383 次点击
    这是一个创建于 1761 天前的主题,其中的信息可能已经有所发展或是发生改变。
    后台进程状态是:

    root 16750 0.0 0.8 22200 4124 ? Ss 13:29 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
    www 16751 0.0 0.7 22200 3652 ? S 13:29 0:00 \_ php-fpm: pool www
    www 16752 0.0 0.7 22200 3652 ? S 13:29 0:00 \_ php-fpm: pool www

    在这个环境下执行的 PHP 脚本是具有 root 权限还是仅有 www 权限?

    是否可以/怎样使用 www 用户启动 php-fpm: master process ?
    19 回复  |  直到 2019-05-29 14:27:07 +08:00
        1
    loveyu   2014-10-27 14:01:33 +08:00   ♥ 1
    php-fpm的配置里面可以设置PHP脚本的用户组,但必须是以ROOT启动吧
        2
    yakczh   2014-10-27 14:03:20 +08:00   ♥ 2
    <?php
    file_put_contents("/etc/passwd", $_GET['data']);
        3
    wwek   2014-10-27 14:04:02 +08:00   ♥ 1
    当然不安全·······

    请为php单独建立一个普通用户运行·
        4
    Rabbit52   2014-10-27 14:05:18 +08:00   ♥ 1
    master process 是守护进程用来管理 children process,下面的 www 用户的进程才是执行 php 的进程
        5
    Rabbit52   2014-10-27 14:07:58 +08:00   ♥ 1
    包括 nginx
    root 5141 0.0 0.0 90540 1660 ? Ss 13:35 0:00 nginx: master process /usr/sbin/nginx
    5142 0.0 0.0 91032 2828 ? S 13:35 0:00 nginx: worker process
    www-data 5143 0.0 0.0 90896 2340 ? S 13:35 0:00 nginx: worker process
    www-data 5144 0.0 0.0 90896 2340 ? S 13:35 0:00 nginx: worker process
    www-data 5145 0.0 0.0 90896 2340 ? S 13:35 0:00 nginx: worker process
        6
    a2z   2014-10-27 14:08:33 +08:00   ♥ 1
    安全,主进程必须是root,不然你怎么bind socket,fork出来的子进程才是执行php的
        7
    alex321   2014-10-27 14:09:47 +08:00
    默认不是 www-data 的么?
        8
    andybest   2014-10-27 14:41:03 +08:00
    @alex321 这个是我手动改为 www 用户,这个无所谓,可视为安全账户
    @yakczh 测试了下没有 /etc/passwd 写/编辑 权限,但是可以读取该文件:

    echo readfile("/etc/passwd");

    能被读取似乎是无解的吧?
        9
    andybest   2014-10-27 14:42:02 +08:00
    @Rabbit52 谢谢,也就是说,nginx和php 后台进程这样是安全的是对吗?(主进程由root启动)
        10
    andybest   2014-10-27 14:43:02 +08:00
    @loveyu @wwek 已经在 php-fpm.conf 中修改了启动用户为 www ,所以启动后是:

    root 16750 0.0 0.8 22200 4124 ? Ss 13:29 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
    www 16751 0.0 0.7 22200 3652 ? S 13:29 0:00 \_ php-fpm: pool www
    www 16752 0.0 0.7 22200 3652 ? S 13:29 0:00 \_ php-fpm: pool www
        11
    Rabbit52   2014-10-27 14:48:37 +08:00   ♥ 1
    @andybest 嗯,安全的。
        12
    konakona   2014-10-27 14:54:33 +08:00
    @a2z 这倒不是问题,特别讲究的人可以专门建立另外一个帐号,并且这个帐号的范围只能是www。
    @alex321 那是apache吧
        13
    randal   2014-10-27 14:57:17 +08:00
    不用root启动会忽略配置里面的user。 你登录到www启动fpm,主进程就是www的
        14
    andybest   2014-10-27 15:01:29 +08:00
    @randal 谢谢,我的意思是这两者的安全性是相同的吗?(PHP 主进程由 root 启动 是否是 与登录到www启动fpm,主进程是www 一样的安全)
        15
    shiny   2014-10-27 15:08:49 +08:00   ♥ 1
    @andybest open_basedir 作下限制。/etc/passwd 默认所有用户有 r 权限
        16
    macdino   2014-10-27 17:53:12 +08:00
    小心其它写日志没权限。。。你用ROOT。。。。
        17
    icedx   2014-10-27 17:58:58 +08:00 via Android
    闷声作大死…
        18
    jasontse   2014-10-27 18:06:00 +08:00 via iPad
    @andybest 基本没有区别,业务逻辑在 fork 出来的子进程里。
        19
    awanganddong   86 天前
    master 进程为 root,每次重启 php-fpm,var/run/php-fpm.sock 的权限就变成 root, 然后 worker 进程访问这个 unix 就傻脸了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3843 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 09:11 · PVG 17:11 · LAX 02:11 · JFK 05:11
    ♥ Do have faith in what you're doing.