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

2014 年 10 月 27 日
 andybest
后台进程状态是:

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 ?
6731 次点击
所在节点    问与答
19 条回复
loveyu
2014 年 10 月 27 日
php-fpm的配置里面可以设置PHP脚本的用户组,但必须是以ROOT启动吧
yakczh
2014 年 10 月 27 日
<?php
file_put_contents("/etc/passwd", $_GET['data']);
wwek
2014 年 10 月 27 日
当然不安全·······

请为php单独建立一个普通用户运行·
tunetoystory
2014 年 10 月 27 日
master process 是守护进程用来管理 children process,下面的 www 用户的进程才是执行 php 的进程
tunetoystory
2014 年 10 月 27 日
包括 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
2014 年 10 月 27 日
安全,主进程必须是root,不然你怎么bind socket,fork出来的子进程才是执行php的
alex321
2014 年 10 月 27 日
默认不是 www-data 的么?
andybest
2014 年 10 月 27 日
@alex321 这个是我手动改为 www 用户,这个无所谓,可视为安全账户
@yakczh 测试了下没有 /etc/passwd 写/编辑 权限,但是可以读取该文件:

echo readfile("/etc/passwd");

能被读取似乎是无解的吧?
andybest
2014 年 10 月 27 日
@Rabbit52 谢谢,也就是说,nginx和php 后台进程这样是安全的是对吗?(主进程由root启动)
andybest
2014 年 10 月 27 日
@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
tunetoystory
2014 年 10 月 27 日
@andybest 嗯,安全的。
konakona
2014 年 10 月 27 日
@a2z 这倒不是问题,特别讲究的人可以专门建立另外一个帐号,并且这个帐号的范围只能是www。
@alex321 那是apache吧
randal
2014 年 10 月 27 日
不用root启动会忽略配置里面的user。 你登录到www启动fpm,主进程就是www的
andybest
2014 年 10 月 27 日
@randal 谢谢,我的意思是这两者的安全性是相同的吗?(PHP 主进程由 root 启动 是否是 与登录到www启动fpm,主进程是www 一样的安全)
shiny
2014 年 10 月 27 日
@andybest open_basedir 作下限制。/etc/passwd 默认所有用户有 r 权限
macdino
2014 年 10 月 27 日
小心其它写日志没权限。。。你用ROOT。。。。
icedx
2014 年 10 月 27 日
闷声作大死…
jasontse
2014 年 10 月 27 日
@andybest 基本没有区别,业务逻辑在 fork 出来的子进程里。
awanganddong
2019 年 5 月 29 日
master 进程为 root,每次重启 php-fpm,var/run/php-fpm.sock 的权限就变成 root, 然后 worker 进程访问这个 unix 就傻脸了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/141806

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX