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

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

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

    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
    loveyu
        1
    loveyu  
       2014-10-27 14:01:33 +08:00   ❤️ 1
    php-fpm的配置里面可以设置PHP脚本的用户组,但必须是以ROOT启动吧
    yakczh
        2
    yakczh  
       2014-10-27 14:03:20 +08:00   ❤️ 2
    <?php
    file_put_contents("/etc/passwd", $_GET['data']);
    wwek
        3
    wwek  
       2014-10-27 14:04:02 +08:00   ❤️ 1
    当然不安全·······

    请为php单独建立一个普通用户运行·
    Rabbit52
        4
    Rabbit52  
       2014-10-27 14:05:18 +08:00   ❤️ 1
    master process 是守护进程用来管理 children process,下面的 www 用户的进程才是执行 php 的进程
    Rabbit52
        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
    a2z
        6
    a2z  
       2014-10-27 14:08:33 +08:00   ❤️ 1
    安全,主进程必须是root,不然你怎么bind socket,fork出来的子进程才是执行php的
    alex321
        7
    alex321  
       2014-10-27 14:09:47 +08:00
    默认不是 www-data 的么?
    andybest
        8
    andybest  
    OP
       2014-10-27 14:41:03 +08:00
    @alex321 这个是我手动改为 www 用户,这个无所谓,可视为安全账户
    @yakczh 测试了下没有 /etc/passwd 写/编辑 权限,但是可以读取该文件:

    echo readfile("/etc/passwd");

    能被读取似乎是无解的吧?
    andybest
        9
    andybest  
    OP
       2014-10-27 14:42:02 +08:00
    @Rabbit52 谢谢,也就是说,nginx和php 后台进程这样是安全的是对吗?(主进程由root启动)
    andybest
        10
    andybest  
    OP
       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
    Rabbit52
        11
    Rabbit52  
       2014-10-27 14:48:37 +08:00   ❤️ 1
    @andybest 嗯,安全的。
    konakona
        12
    konakona  
       2014-10-27 14:54:33 +08:00
    @a2z 这倒不是问题,特别讲究的人可以专门建立另外一个帐号,并且这个帐号的范围只能是www。
    @alex321 那是apache吧
    randal
        13
    randal  
       2014-10-27 14:57:17 +08:00
    不用root启动会忽略配置里面的user。 你登录到www启动fpm,主进程就是www的
    andybest
        14
    andybest  
    OP
       2014-10-27 15:01:29 +08:00
    @randal 谢谢,我的意思是这两者的安全性是相同的吗?(PHP 主进程由 root 启动 是否是 与登录到www启动fpm,主进程是www 一样的安全)
    shiny
        15
    shiny  
       2014-10-27 15:08:49 +08:00   ❤️ 1
    @andybest open_basedir 作下限制。/etc/passwd 默认所有用户有 r 权限
    macdino
        16
    macdino  
       2014-10-27 17:53:12 +08:00
    小心其它写日志没权限。。。你用ROOT。。。。
    icedx
        17
    icedx  
       2014-10-27 17:58:58 +08:00 via Android
    闷声作大死…
    jasontse
        18
    jasontse  
       2014-10-27 18:06:00 +08:00 via iPad
    @andybest 基本没有区别,业务逻辑在 fork 出来的子进程里。
    awanganddong
        19
    awanganddong  
       2019-05-29 14:27:07 +08:00
    master 进程为 root,每次重启 php-fpm,var/run/php-fpm.sock 的权限就变成 root, 然后 worker 进程访问这个 unix 就傻脸了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:12 · PVG 04:12 · LAX 12:12 · JFK 15:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.