文章目录
PHP运行管理员命令
Apache + PHP
要么是管理员或root权限,要么是管理员授权给用户可执行的权限
为什么windows中php程序就可以读取外部文件,但是linux就无法读取外部文件
任意一个文件或文件夹,用
ls -l
的命令可以显示其基本信息和权限信息drwxr-xr-x. 2 root root 6 9月 15 16:40 myfolder -rw-r--r--. 1 root root 5 9月 15 16:42 test.txt
- 第一栏的10个字符,共分为4个部分
- 第一个字母: - 代表普通文件, d 代表目录
- 第2、3、4:代表当前文件或文件夹所属用户的(owner)权限,用 u 表示
- 第5、6、7:代表当前文件或文件夹所属用户组(group)的权限,用 g 表示
- 第8、9、10:代表其他用户组和其他用户(other)的权限,用 o 表示
- 权限的表示方法:
- r 读:也可以使用数字 4 来表示
- w 写:也可以使用数字 2 来表示
- x 执行:也可以使用数字 1 来表示
- 任何一个数都可以使用2的多少次方互加来表示,就像任何一个数字都可以使用10的多少次方来表示
- 用2的多少次方来表示的话,是不会有重复的
- user有rwx的权限,即数字为7;rw权限,即数字为6;rx权限,数字为5;wx权限,数字为3
- linux中读取文件时,需要注意每一层级的关系,比如我需要读取一个层次较深的外部文件,我需要让该外部文件所处的每一个目录都可以被其他用户和组访问,因此该文件和该文件的所有父级目录都需要
chmod o+rx ...
一、PHP运行操作系统命令
-
通过反引号包裹命令可以直接执行,但是也仅限于普通命令,涉及更高或管理员权限的命令是无法执行的
-
windows和linux在php文件中都是通过 添加反引号来包裹命令进行执行的
-
查看文件或写入修改等等操作时,需要该文件支持拥有r w x 权限
- 如果是该当前文件或文件夹所属用户(u)的文件,那就是第一个权限
- 如果是当前文件或文件夹所属用户组(g)的文件,那就是第二个文件
- 如果是其他用户组和其他用户(o)的文件,那就是第三个权限
-
但是执行命令就不一样了,难道执行命令时,也是给文件加上r w x 权限吗???不应该是执行命令的用户拥有什么权限吗
那么我们现在使用的是xampp,此时apache+PHP的默认用户是谁呢
二、PHP运行只有root用户才拥有的权限
比如我们执行如下命令,在 linux 中的 xampp 中 /opt/lampp/htdocs/learn/doexec.php 文件中写入以下代码,然后通过windows来访问 192.168.230.147/learn/doexec.php
<?php
$exec = `systemctl stop filewalld`;
echo $exec;
?>
由于权限不够,访问结果就是一片白板