基于php的Linux远程管理系统服务器端的实现

OrdinAry

发布日期: 2018-12-23 09:41:17 浏览量: 813
评分:
star star star star star star star star_border star_border star_border
*转载请注明来自write-bug.com

摘要

该课题基于Linux操作系统,主要目的是使系统管理员的远程管理工作更加方便、简单和友好。实现的主要功能有文件操作、命令操作、系统操作、进程操作和网络操作,这些基本上涵盖了系统管理的各个方面。在设计上,采用了B/S结构,使得该系统可以方便的进行升级和方便用户从各种平台上对服务器进行访问;采用了安全访问技术,使得访问和管理更加安全;采用了简单和美观的界面显示技术,使得用户的浏览快捷和舒适。

该课题开发的系统需要安装运行在Linux系统的上,系统管理员可以在远程利用浏览器进行登录,通过验证后就可以方便的对系统的运行状态进行查看,对系统进行管理,对网络进行配置,对数据进行分析,要注意的是登录到本系统必须用远程服务器的root权限和密码,而且为了保证系统的安全,防止出现意外事件,管理员只能操作特定的任务。该课题的主要意义在于可以运用PHP进行系统管理,开发的系统可以使系统管理员方便的管理远程系统。

关键词:远程管理;B/S结构;安全访问;Linux;PHP

1 需求分析

1.1 任务概述

1.1.1 开发目标

1.能够安全的登录远程主机,并在管理过程中进行安全的交互。

2.能够对远程主机的文件系统进行管理,可以对文件或者文件夹进行查看、

创建、删除、移动、上传等操作。

3.能够发送命令到远程主机以进行解释和运行并把运行的结果发送回来。4.能够对远程主机的正在运行的进程进行查看和管理。

5.能够对远程主机系统进行管理,可以查看系统信息、关机或重启、修改

密码、管理用户和组、管理软件包等。

6.能够对远程主机的网络服务进行管理,可以进行管理Apache服务器,管

理DNS服务器,管理MySQL服务器,管理SSH服务器 管理DHCP

服务器,查看网络参数,配置网络参数等操作。

7.使得远程管理更加人性化、更加简单、更加方便、更加友好。

8.要使得该软件容易升级和修改、扩展,容易被使用。

1.1.2 开发工具

开发语言主要使用PHP、HTML, 在PHP不能解决的地方使用SHELL或C。

1.1.3 开发环境

操作系统:Fedora core 5

PHP引擎:PHP 5.1

Web服务器:APACHE2

浏览器:Mozilla firefox 2.0

1.1.4 运行环境

该软件运行在安装有Linux操作系统、Apache服务器的远程主机上。运行之前需要开启Apache服务器,并进行一些设置。

1.2 功能分析

根据该课题的要求与目标,可以了解到该系统主要有以下功能:

1、安全访问

安全访问是指登录时要利用HTTPS协议、SSL套节字登录到远程主机,不能被黑客或者恶意攻击者探测到登录的用户名和密码,并且在管理过程中也要采取安全访问的技术,以防止重要数据的丢失、截取或者被攻击。

2、文件操作

文件操作主要是对文件系统进行管理,主要包括查看文件或目录信息,新建文件或目录,删除文件或目录,复制文件或目录,运行文件,上传文件,下载文件等等。

3、命令操作

命令操作就是在远程主机把命令发送过去,服务器对各种SHELL命令的解释与执行,并且把执行后的结果再发送到远程主机显示出来。

4、进程操作

进程操作就是对远程主机的正在运行的进程进行管理,主要包括查看或终止正在运行的进程,查看开启的服务列表(端口号)、对开启服务进行管理、 查看当前系统所有正在运行的进程并且可以对进程进行相关操作。

5、系统操作

系统操作就是对远程主机的Linux系统进行的系统方面的管理,主要包括关机或重启,修改密码,查看系统信息,管理用户和组,管理软件包。

6、网络操作

网络操作就是对远程主机的网络服务进行的管理,主要包括管理Apache服务器,管理DNS服务器,管理MySQL服务器,管理SSH服务器, 管理DHCP服务器,查看网络参数,配置网络参数。

1.3 工作流程

根据对该系统的设计目标和要求,可以确定从总体上,该系统的工作流程分为三大部分:认证过程、管理过程、注销过程。

整个系统的工作流程如下图:

1、认证过程

管理员端通过浏览器登录此远程管理系统,输入此系统用户名与密码,如果用户名或密码错误则显示错误信息,并提示重新输入;正确则进入此管理系统,获得一定权限,管理系统服务。该认证过程要在安全的情况下进行,不能以明文进行传输。

2、管理过程

当用户正确进入系统后,即可进行系统管理,点击某管理模块,设置某项服务,系统通过网络发送命令到Web服务器,与服务器获得交互,服务器通过PHP引擎解析获得命令,调用相应脚本并执行,获得结果返回到远程主机的浏览器。

3、注销过程

管理员完成远程主机更新或管理后,可点击注销以退出本远程管理系统,系统发送注销命令到服务器,服务器使所登录用户失去管理权限,切断用户与服务器连接,返回到管理系统登录页面。

2 总体设计

2.1 系统架构

因为该系统采用B/S模式并且进行远程管理,所以整个系统可以分为五大模块,即客户端、Internet、Linux操作系统、Apache服务器、PHP解释器。

客户端是浏览器,客户可以在远程利用浏览器登录服务器进行管理远程Linux系统。

Internet是连接服务器和客户端的媒介,用来传输命令和数据。

Linux操作系统运行在远程服务器上,管理整个系统,开发的程序也是运行在Linux操作系统上。

Apache服务器是web服务器用来传输web页面,并调用PHP引擎对PHP脚本进行解释和执行,并把结果传输到远程浏览器。

PHP解释器是用来对PHP脚本进行解释执行的,PHP解释器根据Apache的不同调用参数对不同的脚本进行解释,并把执行后得到的html文件返回给Apache服务器。

该系统的框架可以用下图表示:

2.2 模块划分

根据前面的需求分析和系统架构可知,该系统可以划分为六大模块如下图。

1、 安全访问模块

主要负责客户端对服务器端的安全访问,主要采用访问控制技术和加密技术。在服务器端的文件系统内采用访问控制技术,在服务器端和客户端的传输过程中采用加密技术。

2、 文件操作模块

主要负责对远程Linux操作系统的文件系统进行操作,这是操作远程主机的基础。当首次进行文件操作时,界面显示该系统脚本文件所在的目录和文件的属性,并在其后显示可以进行操作的命令按钮,并且在界面的上方有转换目录的文本框和命令。主要利用PHP的cookie传递命令,在具体操作方面主要利用PHP的文件IO函数来实现,在显示方面,编写了一个格式类,可以调用该类的相应函数来格式或者显示数据。

3、 命令操作模块

主要负责对客户端传送过来的SHELL命令进行解释和执行,并及时地把结果返回过去,做这一模块时,一定要注意结果返回的及时性和错误命令的正确提示。主要利用HTML的POST方法把命令传输到服务器,然后利用PHP的系统函数system、exec、passthru的函数来执行相应的命令并把执行的结果传输到浏览器。

4、 进程操作模块

主要负责对远程Linux操作系统的进程进行显示,并能对每个进程进行操作,例如杀死某个进程。主要利用system函数执行SHELL命令ps和grep得到进程列表,并在浏览器端用表格显示出来,利用posix_kill函数把某个进程杀死。

5、 系统操作模块

主要负责对Linux的主要系统管理的操作,可以利用这些系统操作对远程Linux系统进行简单的系统管理。总体思路为,利用PHP的_POST数组得到相应的传输过来的命令,然后利用PHP的system函数执行相应的SHELL命令,并把结果传输到服务器。

6、 网络操作模块

主要对远程Linux系统的网络进行简单的管理和配置。实现的总体思路为,在服务器端修改某些跟网络管理相关的文件的访问权限以使Apache可以访问和修改这些文件,利用PHP的_POST数组得到相应的传输过来的网络操作命令,然后利用PHP的system函数执行相应的SHELL命令,并把结果传输到服务器。

3 具体实现

3.1 安全访问模块

安全访问主要通过本机访问控制文件和PHP脚本身份验证来进行实现。

1、主机访问控制文件

在远程主机中,要开启apache服务器,并在apache的配置文件中添加要访问的目录的访问控制选项。之后在要访问的目录中建立访问控制文件.htaccess和.remoteadminpasswd。.htaccess文件定义了用户名和密码文件的路径和其他一些控制选项。.remoteadminpasswd文件有用户名和加密的密码。

Apache的配置是为了实现目录保护和基本验证,但为了提高用户的权限,还需要对服务器进行一些配置。

1) 查看httpd.conf文件找到User字段,查看Apache启动用户(默认为apache);

2) 编辑/etc/passwd文件,找到apache用户行,修改其shell(默认为/bin/nologin或/bin/false)为/bin/bash;

3) 编辑/etc/sudoers文件,在文件中root ALL=(ALL)ALL字段的下一行添加apacheALL=NOPASSWORD:ALL,使得apache用户能够通过sudo命令执行所有命令。

经过此配置后,apache用户只要使用sudo命令即可获得root权限。

为了保证系统的安全性,在此对Apache Web服务器的目录执行访问控制,使用.htaccess访问文件和htpasswd程序为一个目录建立ACL,来对用户进行身份验证,并在.htaccess文件中设置使用SSL连接,完善安全性。

假设PHPWebmin位于/var/www/phpwebmin目录中。

1)配置httpd.Conf

用vi编辑器打开Apache配置文件httpd.Conf(默认在/etc/httpd/conf/目录下),找到<Directory "/var/www">字段,在下面的属性设置中添加或修改

AllowOverride ALL //此参数设置哪些目录使用.ltaccess进行保护;

2)为所保护目录建立ACL

进入phpwebmin目录,cd/var/www/phpwebmin,在此目录下建立隐藏文件.htaccess(必须在htaccess文件前添加一个点号,如果不这样做,就无法建立ACL,因为点号表示建立一个隐藏文件) vi .htaccess,在.htaccess文件中输入如下代码:

SSLRequireSSL //使用SSL安全连接

AuthName “PHPWebmin”  //验证名称

AuthType Basic

require valid-user //允许password文件中的所有用户访问

AuthUserFile/var/www/phpwebmin/.phpwebminpasswd //身份数据文件;

3)创建用户身份验证数据库

在命令行下输入以下口令创建用户身份验证数据库文件,会要求你为用户admin创建密码:

htpasswd -c /var/www/phpwebmin/.phpwebminpasswdadmin

New password:

Re-type new password:

建立后的.phpweminpasswd文件内容类似于:

admin:Op96DPmXTKy5w //用户名:MD5加密后的密码

若系统没有安装htpasswd,也可在网上生成用户名密码后放入.phpwebminpasswd文件.

这样,就已经为Apache服务器建立了一个用户账号数据库,并对phpwebmin目录实行了目录保护,并实现了用户基本验证,需要用安全连接https://localhost/phpwebmin/ 进行访问,访问过程中会弹出验证对话框。

2、PHP脚本的身份验证

利用_GET数组判断是登录还是注销,如果是登录,则验证密码是否正确,如果正确则进入管理界面,并在客户端设置cookie以记录登录信息,否则提示相应的错误信息。验证流程如下图:

身份验证的主要代码如下:

  1. if ($_GET['action'] == "logout")
  2. {
  3. setcookie("adminpass", "");
  4. echo"<meta http-equiv=\"refresh\" ontent=\"3;URL=".$self."\">";
  5. echo "<span style=\"font-size: 12px; font-family: Verdana\">注
  6. 销成功......<p><a href=\"".$self."\">三秒后自动退出或单击这里退出程序界面 &gt;&gt;&gt;</a> </span>";
  7. ob_end_flush();
  8. exit;
  9. }
  10. if ($_POST['do'] == 'login')
  11. {
  12. $thepass=trim($_POST['adminpass']);
  13. if($admin['pass'] == $thepass)
  14. {
  15. setcookie("adminpass", $thepass, time() + (1 * 24 * 3600));
  16. echo "<meta http-equiv=\"refresh\" content=\"3;URL=".$url."\">";
  17. echo "<span style=\"font-size: 12px; font-family: Verdana\">登录成功......<p> <ahref=\"".$url."\">三秒后自动跳转或单击这里进入程序界面 &gt;&gt;&gt;</a></span>";
  18. exit;
  19. }
  20. else
  21. {
  22. echo "密码错误,请重新输入</br>";
  23. }
  24. }
  25. if(isset($_COOKIE['adminpass']))
  26. {
  27. if ($_COOKIE['adminpass'] != $admin['pass'])
  28. {
  29. loginpage();
  30. }
  31. else
  32. {
  33. loginpage();
  34. }
  35. }

3.2 文件操作模块

文件操作有很多类型的操作,主要包括查看文件或目录信息,新建文件或目录,删除文件或目录,复制文件或目录,运行文件,上传文件,下载文件。

文件的操作和在本地操作文件一样,只是形式有所不同,当用户选择了一个或部分文件之后,就可以点击相应的命令按钮,从而产生相应的动作。主要利用PHP的cookie传递命令,在具体操作方面主要利用PHP的文件IO函数来实现,在显示方面,编写了一个格式类,可以调用该类的相应函数来格式或者显示数据。

文件操作流程如下图:

编辑文件和文件改名的主要代码如下:

  1. // 编辑文件
  2. if ($_POST['do'] == 'doeditfile')
  3. {
  4. if (!empty($_POST['editfilename']))
  5. {
  6. $filename="$editfilename";
  7. @$fp=fopen("$filename","w");
  8. echo $msg=@fwrite($fp,$_POST['filecontent']) ?"写入文件成功!" : "写入失败!";
  9. @fclose($fp);
  10. }
  11. else
  12. {
  13. echo "请输入想要编辑的文件名!";
  14. }
  15. }
  16. // 编辑文件属性
  17. else if ($_POST['do'] == 'editfileperm')
  18. {
  19. if (!empty($_POST['fileperm']))
  20. {
  21. $fileperm=base_convert($_POST['fileperm'],8,10);
  22. echo (@chmod($dir."/".$file,$fileperm)) ? "属性修改成功!" : "修改失败!";
  23. echo "文件 ".$file." 修改后的属性为:".substr(base_convert(@fileperms($dir."/".$file),10,8),
  24. -4);
  25. }
  26. else
  27. {
  28. echo "请输入想要设置的属性!";
  29. }
  30. }

3.3 命令操作模块

命令操作即是对各种SHELL命令的解释与执行,这主要是通过php的system、passthru等函数来执行。可在此模块中进行进程操作和系统操作等等,注意使用的是Web模式,无法执行交互式Shell命令。在设计中,使用一个表单获得commond变量,提交给system函数后执行system(“sudo $commond”),并返回结果。

命令操作流程如下图。

部分代码如下:

  1. if (!empty($_POST['command']))
  2. {
  3. if ($execfunc=="system")
  4. {
  5. system("sudo ".$_POST['command']);
  6. }
  7. elseif ($execfunc=="passthru")
  8. {
  9. passthru("sudo ".$_POST['command']);
  10. }
  11. elseif ($execfunc=="exec")
  12. {
  13. $result = exec("sudo ".$_POST['command']);
  14. echo $result;
  15. }
  16. elseif ($execfunc=="shell_exec")
  17. {
  18. $result=shell_exec("sudo ".$_POST['command']);
  19. echo $result;
  20. }
  21. elseif ($execfunc=="popen")
  22. {
  23. $pp = popen("sudo ".$_POST['command'], 'r');
  24. $read = fread($pp, 2096);
  25. echo $read;
  26. pclose($pp);
  27. }
  28. elseif ($execfunc=="wscript")
  29. {
  30. $wsh = new COM('W'.'Scr'.'ip'.'t.she'.'ll') or die("PHP Create COM WSHSHELL failed");
  31. $exec = $wsh->exec ("cm"."d.e"."xe /c "."sudo ".$_POST['command']."");
  32. $stdout = $exec->StdOut();
  33. $stroutput = $stdout->ReadAll();
  34. echo $stroutput;
  35. }
  36. else
  37. {
  38. system("sudo ".$_POST['command']);
  39. }
  40. }

3.6 进程操作模块

进程操作主要包括查看或终止正在运行的进程,查看开启的服务列表、对开启服务进行管理、查看当前系统所有正在运行的进程并且可以对进程进行相关操作。这主要通过执行ps –aux来获取进程列表,再用表格来表示出来,并且可以kill掉每一个进程。

进程操作流程如下图:

主要代码如下:

  1. if ($_GET['action'] == "process")
  2. {
  3. if(!$win)
  4. {$handler = "ps -aux".($grep?" | grep '".addslashes($grep)."'":"");}
  5. else {$handler = "tasklist";}
  6. $ret = myshellexec($handler);
  7. if(!$ret)
  8. {echo "Can't execute \"".$handler."\"!";}
  9. else
  10. {
  11. if(empty($processes_sort))
  12. {$processes_sort = $sort_default;}
  13. $parsesort = parsesort($processes_sort);
  14. if (!is_numeric($parsesort[0])) {$parsesort[0] = 0;}
  15. $k = $parsesort[0];
  16. if($parsesort[1] != "a")
  17. {
  18. $y="<a href=\"".$surl."action=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\">
  19. <img src=\"".$surl."action=img&img=sort_desc\"height=\"9\"width=\"14\" order=\"0\"></a>";
  20. }
  21. else
  22. {
  23. $y="<a href=\"".$surl."action=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."action=img&img=sort_asc\"height=\"9\" width=\"14\" border=\"0\"></a>";
  24. }
  25. $ret = htmlspecialchars($ret);
  26. if (!$win)
  27. {
  28. if ($pid)
  29. {
  30. if (is_null($sig)) {$sig = 9;}
  31. echo "Sending signal ".$sig." to #".$pid."... ";
  32. if (posix_kill($pid,$sig)) {echo "OK.";}
  33. else {echo "ERROR.";}
  34. }
  35. }
  36. }
  37. }

3.5 系统操作模块

系统操作主要包括关机或重启,修改密码,查看系统信息,管理用户和组,管理软件包。这主要通过更改Apache的权限和执行命令的SHELL,并把Apache添加到sudoers文件里面成为可以执行sudo命令的一员。

关机和重启,可通过管理员点击Shutdown、Reboot按钮,从而调用system函数执行内置的关机、重启命令,也可在表单中输入其他关机或重启命令并运行。

查看系统信息,通过switch判断提交的命令,并调用system函数执行内置命令如uname–a、fdisk –l等,包括查看CPU信息、查看分区信息、查看内核。

管理用户和组,可以查看系统拥有用户和组,并通过简单的表单提交,进行添加、删除用户或组的操作。

系统操作流程如下图:

查看系统信息和管理用户及组的主要代码如下:

  1. //查看系统信息
  2. switch($_POST['info'])
  3. {
  4. case "CPU Info":
  5. $exec="sudo cat /proc/cpuinfo";break;
  6. case "Disk Info":
  7. $exec="sudo fdisk -l";break;
  8. case "Kernel Version":
  9. $exec="sudo uname -a";
  10. }
  11. if($exec) { system($exec);}
  12. //管理用户和组
  13. $commond="sudo groupdel ".$_POST['group'];
  14. echo $commond;
  15. if($commond) { system($commond); }
  16. $commond="sudo groupadd ".$_POST['group'];
  17. echo $commond;
  18. if($commond) { system($commond); }
  19. switch($_POST['passmode'])
  20. {
  21. case 0:
  22. $passwd="";break;
  23. case 1:
  24. $passwd=" -p ".$_POST['encpass'];
  25. }
  26. if(!$_POST['home'])
  27. {
  28. $home=" -d ".$_POST['home'];
  29. }
  30. $user=$_POST['user'];
  31. $uid=" -u ".$_POST['uid'];
  32. $shell=" -s ".$_POST['shell'];
  33. $commond="sudo useradd ".$_POST['user']." -d ".$_POST['home']." -s ".$_POST['shell']." -u ".$_POST['uid']." -p ".$_POST['encpass'];
  34. echo $commond;
  35. if($commond) { system($commond); }
  36. $commond="sudo userdel ".$_POST['user'];
  37. echo $commond;
  38. if($commond) { system($commond); }

3.6 网络操作模块

网络操作主要包括管理Apache服务器,管理PHP服务器,管理MySQL服务器,管理SSH服务器,管理DHCP服务器,查看网络参数,配置网络参数。

查看网络参数主要包括查看网络连接状况、路由表、网卡接口信息、网络统计数据、arp暂存信息、基本网络配置参数。

配置网络参数主要包括配置基本网络参数、添加和删除路由。

管理PHP服务器重要包括查看PHP环境变量、PHP信息、配置PHP。

管理Apache服务器主要包括停止服务器和配置服务器。

管理MySQL服务器主要包括数据库查询和备份,服务器的启动、停止和重启。

管理SSH服务器主要包括该服务器的启动、停止和重启。

管理DHCP服务器主要包括该服务器的启动、停止和重启。

进程操作流程如下图:

配置网络参数的主要代码如下:

  1. switch($_POST['config'])
  2. {
  3. case ConfigIP:
  4. $exec="ifconfig eth0 ".$ip." netmask ".$mask." up";
  5. $exec1="route add default gw ".$gw;
  6. $flag=1;break;
  7. case ConfigDNS:
  8. $dns=1;break;
  9. case AddHostRoute:
  10. $exec="route add -host ".$host." gw ".$rgw;break;
  11. case AddNetRoute:
  12. $exec="route add -net ".$netroute." netmask ".
  13. $nmask." gw ".$nrgw; break;
  14. case DelHostRoute:
  15. $exec="route del -host ".$dhost." gw ".$drgw;break;
  16. case DelNetRoute:
  17. $exec="route del -net ".$dnetroute." netmask ".$dnmask." gw ".$dnrgw; break;
  18. }
  19. if($exec)
  20. {
  21. system("sudo $exec",&$ret);
  22. if(!$ret)
  23. echo "Changed successfully\n";
  24. else
  25. echo "Changed unsuccessfully\n";
  26. }
  27. if($flag)
  28. {
  29. system("sudo $exec1",&$ret1);
  30. $flag=0;
  31. if(!$ret1)
  32. echo "Getway Changed successfully\n";
  33. else
  34. echo "Getway Changed unsuccessfully\n";
  35. }
  36. if($dns)
  37. {
  38. $fd=fopen("/etc/resolv.conf", "w+");
  39. if ($fd)
  40. {
  41. if($dns1)
  42. fwrite($fd, "nameserver $dns1\n");
  43. if($dns2)
  44. fwrite($fd, "nameserver $dns2\n");
  45. if($dns3)
  46. fwrite($fd, "nameserver $dns3\n");
  47. }
  48. else
  49. echo "open file error!\n";
  50. $dns=0;
  51. if(!$dns1 && !$dns2 && !$dns3)
  52. echo "DNS has not changed!";
  53. else
  54. echo "DNS has changed!";
  55. fclose($fd);

4 参考文献

[1] Evi Nermeth.UNIX系统管理技术手册[M].北京:人民邮电出版社,2002。

[2] Rasmus Lerdorf,Kevin Tatroe.PH程序设计[M].北京:中国电力出版社,2003。

[3] 郭金锋,林宇.PHP&MySql Web网络编程[M].北京:人民邮电出版社,2001。

[4] 宁磊,周卫.Linux网络与安全管理[M].北京:人民邮电出版社,2001。

[5] 赵启志.PHP 4+MySQL完整自学方案[M].北京中国铁道出版社,2001。

[6] 考克斯.Red Hat Linux系统管理员手册[M].北京:机械工业出版社,2001。

[7] Leon Atkinson.PHP 4核心编程[M].北京:中国水利水电出版社,2001。

[8] Tobias Ratschiller.PHP 4.0 Web开发技术指南[M].北京:机械工业出版社,2001。

上传的附件 cloud_download 基于Linux的远程管理系统服务器端的实现.zip ( 466.20kb, 6次下载 )
error_outline 下载需要12点积分

发送私信

有没有那样一种永远,永远永远不改变

12
文章数
32
评论数
最近文章
eject