chmod 777之后不能执行

给linux服务器上某个文件夹赋予777权限,文件所有者是root,当用户访问的php一段代码中含有chmod()这个函数的时候,显示没有执行权限?我知道只有文件所有者才能执行chmod,但是怎么把文件所有者设置成其他组的成员呢?或者说任何人都能执行php的chmod方法呢?

阅读 9.2k
6 个回答

通过php chmod时,进程在os上的权限为启动php进程的系统账户。 也就是说,用 root 启动php程序,就可以调用chmod了。

要看你php的执行者是哪个用户 一般应用不会以root执行

切换用户到Root

<?php
phpinfo();

在打开的探针页面搜索 User/Group 查看对应的用户,PHP对应的运行时用户是这个 ~

如果 linux 执行 777,请确认是否加上 -R 参数

如果是 PHP 代码中执行 777,请确认是否是这样 chmod('/somedir/somefile', 0777);

怎么把文件所有者设置成其他组的成员
chown 可以更改所有者和组

chown -R yourusername:yourusergroup /path/to/dir

或者说任何人都能执行 php 的 chmod 方法呢?

可以 setuid 使任何人拥有执行 sbin 命令的权限,但是非常的危险
一般把文件夹所有者改成启动服务器的用户就足以解决你上面的问题,通过配置看服务器启动的 uid 是什么,然后chown.

不要这样,这样很危险,很容易让别有用心的人攻击,Web服务程序不要以root身份运行,很容易被上传木马,然后执行。最好的方式是不要那个文件的所有者为root,而是某个专用用户。可以单独建立一个用户组。
或者在服务器上写一段Shell脚本或C工具程序甚至后台服务来执行这个任务。php去执行、调用它。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题