侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

理清PHP在Linxu下执行时的文件权限方法

php  /  管理员 发布于 7年前   113

一、文件权限及所属

1、文件有三种类型的权限,为了方便期间,可以用数字来代替,这样可以通过数字的加减,用一个数字就能标识这个文件的权限了,例如7=4+2+1,表示读写执行3个权限都有,6=4+2,表示有读写权限没有执行权限等等

2、联想web应用的rbac权限管理等,linux下同样有用户权限的管理,用户有用户名和用户组,一般创建用户时同时会创建同名的用户所属组。

先root账号登录随便新建一个目录和一个文件

#新建目录mkdir abc#新建文件touch abc.txt#查看ls -all

查看时会发现:

#d开头的为目录,-开头为文件,还有l开头的为连接等drwxr-xr-x  2 root root 4096 Jun 6 10:23 abc-rw-r--r--  1 root root  0 Jun 6 10:23 abc.txt

先看上方蓝色的部分,第一位为标识符,去掉第一位,后面每三位分隔,以abc文件夹为例:d | rws | r-x | r-x

所以abc文件夹中表示owner拥有rwx(7),group拥有rx(5),other拥有rx(5)。

同样上方文件中红色的部分,依次为所有者的名称和所属组的名称,也就是abc文件夹的所有者为root,所属组为root。此时:

a、如果是root用户来访问这个abc文件夹,相当与owner,拥有7的权限

b、如果一个新的用户名test用户组为root来访问abc文件夹,则相当于group,拥有5的权限

c、如果一个新的用户名test用户组为test的来访问abc文件夹,则相当与other,拥有5的权限

二、文件各权限的作用

本来还想边测试边说,但是太麻烦了,直接说结果吧。可以自己新建一个用户,然后修改权限来自己测试下。

1、目录

  a、进入目录,即cd命令,所需要的权限为执行权限(x)

  b、查看目录内的文件,即ls命令,需要的权限为读取权限(r)

  c、创建删除目录内的文件夹/文件,即mkdir/touch命名,需要的权限为写如权限(w)

顺便说下目录只影响下一级的,隔代不影响,好比一个目录abc/sub/,如果abc没有w权限,但sub有w权限,则可以在sub中创建文件,当然abc也需要有x权限,否则都进不去更不用说创建了,但只要能进去(可以通过切换root管理员的方法),就不会再受abc的影响,只会受sub的影响。

一般我们目录会给5(rx)的权限,也就是读取和执行权限,只有图片上传或缓存等目录需要创建的才会给7(rwx)的权限

2、文件

  a、文件打开,可以用cat/vim命令打开,所需权限为读取权限(r)

  b、文件修改,可以用cat/vim命令打开并保存,所需权限为写入权限(w)

  c、文件执行,可以直接./abc.out等执行,所需要权限为执行权限(x)

这里需要说明的的是php(或者shell等)无论是命令行执行还是web端执行,名为执行,实际上是读取文件到php内核中取解析,所以只要有读取权限(r)就可以。

一般我们文件会给4(r)权限,也就是读取权限,只有日志、缓存等需要向文件中写入内容的才会给6(rx)权限

之所以上方没有说755,777、644权限,而仅仅是是说单个的权限,是因为你的网站目录所属的权限不能确保与执行时所用的用户什么关系,也就是说执行时的用户可能是owner、可能是group也可能是other

三、php执行时的权限

我们自己在ssh连接linux操作时必须要有个用户名才能登录操作,同样php要想处理php相关的文件,也是在某个用户下操作的,而用户是在哪里创建或定义的呢,一般会是在安装php环境时创建的,例如apache,nginx等环境都会默认创建用户和用户组,而php的读取时就用此用户来读取,可以通过查看配置文件来确认:

#apache在配置文件httpd.confUser wwwGroup www#nginx在配置文件nginx.confuser www www;

或者是通过命名查看进程:

#查看apache进程ps -ef|grep httpd#查看nginx进程ps -ef|grep nginx#查看php-pfm进行ps -ef|grep php-pfm

以apache为例会显示:

root   1663   1 0 09:14 ?    00:00:00 /www/wdlinux/apache/bin/httpd//主进程www    1697 1663 0 09:14 ?    00:00:05 /www/wdlinux/apache/bin/httpd//子进程www    1698 1663 0 09:14 ?    00:00:05 /www/wdlinux/apache/bin/httpd

第一行就是显示的哪个用户在执行它,主要看非root下的。上方说明是www用户在运行apache进程来处理php文件。

这里需要注意的是,如果有安装php-pfm,则应该还需要查看php-pfm执行时的用户名及用户组。(没有安装,所以没实践过)

默认的可能是nobody或者apache等其它的用户及用户组,上方是已修改过的。此时应该在网站目录中用ls-all来确认下网站文件是属于哪个用户,分几种情况说明下吧:

a、例如网站所有者是这样:

drwxr-xr-x  2 www www 4096 Jun 6 10:23 systemdrwxr-xr-x  2 www www 4096 Jun 6 10:23 tmp-rw-r--r--  1 www www  0 Jun 6 10:23 index.php...

网站所有者为www,而php执行者也为www,那说明是具有owner权限,上方system文件夹中755中的55根本不起作用,只要是7xx就会以7(rwx)的权限来执行。

b、如果网站所有者是这样:

drwxr-xr-x  2 test www 4096 Jun 6 10:23 systemdrwxr-xr-x  2 test www 4096 Jun 6 10:23 tmp-rw-r--r--  1 test www  0 Jun 6 10:23 index.php...

网站所有者为test,所属组为www,而php执行者为www,执行组为www,那说明是说在同一组中,具有group权限,上方system文件夹中755中的7和5不起作用,只要是x5x就会以5(rx)的权限来执行。

c、如果网站所有者是这样:

drwxr-xr-x  2 test test 4096 Jun 6 10:23 systemdrwxr-xr-x  2 test test 4096 Jun 6 10:23 tmp-rw-r--r--  1 test test  0 Jun 6 10:23 index.php...

网站所有者为test,所属组为test,而php执行者为www,执行组为www,那说明是说根本没什么关系,具有other权限,上方system文件夹中755中的75不起作用,只要是xx5就会以5(rx)的权限来执行。

所以不能简单的说修改权限为755,644什么的,还需要确认程序的执行者和网站的所有者才能确定权限。

目前好多集成环境为了省事(嗯,lanmpv3等),将php的执行权限和网站所在目录都设置为www,此时一般创建完目录后为755,创建文件后为644,当php执行时,起作用的目录权限为7(所有目录拥有创建删除权限)和文件权限6(所有文件具有写权限),这种是不是挺不安全的?正常应该是目录为5,文件为4,当有特殊需求时才将权限设为7。如果出现上方说的这种情况,修改的方法一是修改apache/nginx的用户和用户组,二是修改网站文件的所有者和所有组这两个方向来修改,以确保网站的安全。

以上,只是基础的权限说明。

以上这篇理清PHP在Linxu下执行时的文件权限方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能感兴趣的文章:

  • PHP调用Linux命令权限不足问题解决方法
  • 让PHP以ROOT权限执行系统命令的方法
  • 如何在Apache和Nginx禁止上传目录里PHP的执行权限


  • 上一条:
    PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
    下一条:
    PHP面向对象之事务脚本模式(详解)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客