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

2014-10-27 13:36:24 +08:00
 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 ?
5786 次点击
所在节点    问与答
19 条回复
loveyu
2014-10-27 14:01:33 +08:00
php-fpm的配置里面可以设置PHP脚本的用户组,但必须是以ROOT启动吧
yakczh
2014-10-27 14:03:20 +08:00
<?php
file_put_contents("/etc/passwd", $_GET['data']);
wwek
2014-10-27 14:04:02 +08:00
当然不安全·······

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

echo readfile("/etc/passwd");

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

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

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

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

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

© 2021 V2EX