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


Posted in PHP onJune 07, 2017

一、文件权限及所属

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

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

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

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

所以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.conf
User www
Group www
#nginx在配置文件nginx.conf
user 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 system
drwxr-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 system
drwxr-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 system
drwxr-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 相关文章推荐
PHP编程与应用
Oct 09 PHP
PHP 简单日历实现代码
Oct 28 PHP
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
phpcms配置列表页以及获得文章发布时间
Jul 04 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 #PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 #PHP
PHP框架自动加载类文件原理详解
Jun 06 #PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 #PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 #PHP
解决php-fpm.service not found问题的办法
Jun 06 #PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 #PHP
You might like
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
Python中的闭包实例详解
2014/08/29 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
中学教师培训制度
2014/01/31 职场文书
促销活动总结范文
2014/04/30 职场文书
公司2014年度工作总结
2014/12/10 职场文书
先进典型发言材料
2014/12/30 职场文书
话题作文之诚信
2019/11/28 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python