来讲讲:php实行linux下令
小知识:Linux同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。php实行linux体系下令的几个函数:
system函数
申明:实行内部步伐并显现输入材料。
语法:stringsystem(stringcommand,int);
前往值:字符串
具体先容:
本函数就像是C语中的函数system(),用来实行指令,并输入了局。如果return_var参数存在,则实行command以后的形态会填进return_var中。一样值得注重的是若必要处置用户输出的材料,而又要避免用户耍把戏破解体系,则可使用EscapeShellCmd()。若PHP以模块式的实行,本函数会在每行输入后主动更新Web办事器的输入缓冲暂存区。若必要完全的前往字符串,且不想经由不用要的别的两头的输入界面,可使用PassThru()。
实例代码:
<?php
$last_line=system(ls,$retval);
echoLastlineoftheoutput:.$last_line;
echo<hr/>Returnvalue:.$retval;
?>
exec函数
申明:实行内部步伐。
语法:stringexec(stringcommand,string,int);
前往值:字符串
具体先容:
本函数实行输出command的内部步伐或内部指令。它的前往字符串只是内部步伐实行后前往的最初一行;若必要完全的前往字符串,可使用PassThru()这个函数。
如果参数array存在,command会将array加到参数中实行,若不欲array被处置,能够在实行exec()之前呼唤unset()。如果return_var跟array二个参数都存在,则实行command以后的形态会填进return_var中。
值得注重的是若必要处置利用者输出的材料,而又要避免利用者耍把戏破解体系,则可使用EscapeShellCmd()。
实例代码:
<?php
echoexec(whoami);
?>
popen函数
申明:翻开文件。
语法:intpopen(stringcommand,stringmode);
前往值:整数
具体先容:
本函数实行指令开档,而该文件是用管道体例处置的文件。用本函数翻开的文件只能是单向的(只能读或只能写),并且必定要用pclose()封闭。在文件操纵上可以使用fgets()、fgetss()与fputs()。如果开档产生毛病,前往false值。
实例代码:
<?php
$fp=popen("/bin/ls","r");
?>
可是实行的下令要触及权限,举个例子:利用php实行"servicenetworkrestart"下令,重启收集。apache是以一个一样平常用户实行的,我盘算机利用apache用户,基本没有实行这个下令的权限。
办理举措:
1、绕开这个限定:
起首写个c步伐,比方/usr/local/a.c
#include<stdlib.h>
main()
{
uid_tuid,euid;
uid=getuid();
euid=geteuid();
if(setreuid(euid,uid))
perror("setreuid");
system("servicenetworkrestart");
}
编译文件,gcca.c-oa
这时候会在以后目次下天生步伐a
步伐的属主chmodu+s./a。
apache的uid为48。挪用setreuid后将无效用户id和实践用户id交换了。(必需在chmodu+s失效的情形下)使apache以后的uid为0如许就可以实行root下令了。
php步伐挪用a:
<?php
functionRestartNetwork(){
system("/usr/local/a");
}
RestartNetwork();
?>
2、编纂/etc/sudoers文件,大概利用visudo下令
Host_AliasSERVER=localhost,你的主机名
User_AliasUSERLIST=apache用户名
Cmnd_AliasCOMMANDLIST=/sbin/service#增加想让apache用户可使用的下令
#Defaultsrequiretty
......
修正完成后,保留/etc/sudoers只能是0440权限
然后,php就能够利用service下令
<?php
system("sudoservicenetworkrestart");
?>小知识:RHEL是很多大型企业采用的操作系统,但需要向RedHat购买使用权,有偿享受技术支持、版本升级等,所以推荐大家使用CentOS。 把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。 不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。 随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。 尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助. 安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。 为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。 生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。
页:
[1]