理清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 相关文章推荐
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
CI框架Session.php源码分析
Nov 03 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
Smarty模板类内部原理实例分析
Jul 03 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
用PHP生成自己的LOG文件
2006/10/09 PHP
php下使用以下代码连接并测试
2008/04/09 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
javascript学习网址备忘
2007/05/29 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python OpenCV获取视频的方法
2018/02/28 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
班班通项目实施方案
2014/02/25 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
师德模范事迹材料
2014/06/03 职场文书
党委班子剖析材料
2014/08/21 职场文书
晚会开幕词
2015/01/28 职场文书
勇敢的心观后感
2015/06/09 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书