PHP基于Linux的远程管理系统客户端的设计和实现

      本系统分析了Linux操作系统的特点、远程管理的各种方法和Webmin,并给出了一个远程管理Linux服务器的具体实现方法。利用PHP语言来构建了一个远程管理系统 —— PHP Webmin,以Web的形式来实现Linux服务器的远程管理,简化了管理难度,并使管理方式更为灵活,从而达到了减轻系统管理员压力,方便系统管理员管理服务器的目的。

      在此系统中实现了文件操作管理、远程运行shell命令、对系统进程的监控、对系统的关机/重启、对系统用户/组的操作、rpm包组的管理、对网络参数的查看与配置、对常见服务器的基本管理等功能。系统管理员可使用系统中的各功能模对整个Linux服务器进行日常管理。此系统能够应用于对小型Linux服务器的远程管理。

  1.  背景

LAMP (Linux + Apache + MySQL + PHP/Perl) 近几年来发展迅速,已经成为Web 服务器的事实标准。这个术语代表了 Linux 平台上的 Apache 网站服务器; MySQL 数据库以及PHP 、Perl编程语言的结合。LAMP 不仅会成为企业接入互联网,也应该会在企业内部网络建设中大有作为。提到开放源代码,你马上就会意识到 Linux操作系统。Linux 是开放源码软件的代表,目前有越来越多的网站把他们的 Web 服务器架构在 Linux操作系统之上,因为 Linux 能够提供健壮的 Web 应用。LAMP 所代表的不仅仅是开放源码,它更是开发和实施高性能Web应用的重要平台。

  1.  当前现状

随着互联网的高速发展以及Linux企业应用的成熟,Linux被广泛应用于服务器领域,如何实现Linux的远程管理成为网络管理员的首要任务。接触过远程操作的朋友,肯定会立即说出若干个相关windows操作系统软件(PCanywhere、Netop Remote Control),可是Linux下软件都有哪些呢?我们应该如何选择适合自己的远程操作软件呢?这对于一些甚少接触远程操作的朋友而言无疑是个关注的话题。

Linux操作系统源于Unix,以其精小灵活稳定的特性,加上其源代码完全公开,几乎秉承了Unix系统的所有优点,赢得了很多用户的青睐,但是Linux的管理操作界面是单一的命令行方式。

  1.  选题意义

不知Linux服务器的系统管理员有没有过人不在主机前,却又必须掌握主机信息的经验?比如服务器在成都,偏偏管理员却出差到北京去了,这时该怎么办呢?想说找人来帮你到服务器面前看一下,又担心管理员密码给了别人会出状况;想要通过Telnet或者ssh这类远程登录的方式来达到远程控制的目的,可偏偏手边又没有client程序可用,或者当初为了安全性考虑,完全没有在服务器上安装可供远程控制的server,这时候真是心有余力不足啊。

而且,对于刚刚接触Linux的系统管理员来说,正确高效地完成各种关键的系统配置简直是一件不可能的任务。即使是一个很有经验的Linux的管理员,也常常会为某些复杂的配置文件的格式而苦恼。本软件的开发主要是为了方便网络系统管理员对本地和远程安装了Linux系统的服务器进行管理,增加管理的方便性,利用B/S结构也从另外一方面减少了管理员的劳动量。管理员利用浏览器在远程登录后,可以方便的对服务器进行运行状态的查看,对网络服务进行配置,对一些数据进行分析,而且可以对异常现象作出快速的反应。

  1.  设计模式

本系统的开发要求采用B/S结构,如图1所示。本系统模拟Webmin进行设计与开发。因此,首先了解Webmin的相关功能,结合本次毕业设计的相关要求写出需求分析;其次,综合运用以前所学的相关知识选择所熟悉的开发工具进行本毕业设计的开发;在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;最后,系统开发完毕后,进行调试和测试,做好调试和测试的相关记录。

整个管理系统中,用文件操作模块作为突破口,首先设计整体页面,再写出文件操作部分以深入了解该系统的工作方式及系统的大致面貌,然后设计Shell命令解释与执行部分操作和进程操作部分,继而逐步增加其他的功能与模块,最后对整个系统进行修饰整理,从而完成了该系统。

本系统的开发主要是为了方便网络系统管理员对本地和远程安装了Linux系统的服务器进行管理,增加管理的方便性,利用B/S结构,减少了管理员的劳动量。管理员利用浏览器在远程登录后,可以方便的对服务器进行运行状态的查看,对网络服务进行配置,对一些数据进行分析,并对异常现象做出快速的反应。

本系统的目标是完成一个基于WEB的Linux上的GUI管理工具,给Linux系统管理员提供帮助,协助Linux系统管理员正确高效的完成各种关键的系统配置,如远程的文件操作、Shell命令执行、进程操作、系统操作、各种网络服务配置等等。管理员通过浏览器访问次管理系统的各种管理功能并完成相应的管理动作;要求此管理系统同时具有本地和远程管理的能力,要求注意一定的安全设置,保证足够的安全性,在完成系统基本功能的前提下,注意一定的扩展和伸缩性,要求亲近的管理界面和易用的操作。

  1. 主要任务:

运用所学知识,开发基于Linux的远程管理系统,以方便网络系统管理员在客户端对本地或远程主机进行管理。本系统要求实现的部分功能有:文件操作、命令操作、进程操作、系统操作、网络操作。

  1. 相关要求:

1) 本系统的开发要求采用B/S结构,选用所熟悉的开发工具及开发环境进行本系统的设计与开发。

2) 本设计要求实现远程管理的功能,界面要简洁实用,功能要完善。

PHP基于Linux的远程管理系统客户端的设计和实现_第1张图片

 

在系统的性能方面,B/S模式具有异地浏览和信息采集的灵活性,任何时间、任何地点、任何系统,只要可以使用浏览器上网,就可以使用B/S系统的终端,B/S模式还具有管理维护集中方便、用户使用简单、跨平台等优点。

因此本系统采用B/S模式(如图2),方便系统管理员在Linux/Win等各种系统中通过浏览器对Linux主机进行远程管理。

PHP基于Linux的远程管理系统客户端的设计和实现_第2张图片

如图3所示,此系统工作流程分为三个部分:认证流程、管理流程、注销流程。

  1. 认证流程

管理员端通过浏览器登录此远程网络服务管理系统,输入此系统用户名与密码,用户名或密码错误则需重新输入;正确则进入此管理系统,获得一定权限,管理系统服务。

  1. 管理流程

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

  1. 注销流程

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

  1. 总体设计
  2. 模块划分与功能设计

通过对系统的需求分析,把此Linux远程管理系统分为五个模块(如图4):

  • 文件操作模块;
  • 命令操作模块;
  • 进程操作模块;
  • 系统操作模块;
  • 网络服务操作模块。

五个模块的功能配合,再加上在对Apache服务器的特殊配置,整体实现了对Linux服务器的远程管理与基本信息监控。

PHP基于Linux的远程管理系统客户端的设计和实现_第3张图片

在整个系统设计中,本人完成里命令操作模块与系统操作模块,其余模块由合作者孙泽玺设计完成。

  1. 功能模块的初步设计

1、文件操作

在文件操作模块中可以进行查看文件或目录,新建文件或目录,删除文件或目录,复制文件或目录,编辑文件,上传文件,下载文件等等操作,在此文件操作模块中需对服务器文件或目录属性有一定设置;

2、命令操作

对各种SHELL命令的解释与执行,可执行常用Linux命令,可在此模块中进行进程操作和系统操作等等,注意使用的是Web模式,无法执行交互式Shell命令;

如图5所示,在设计中,使用一个表单获得commond变量,提交给system函数后执行system(“sudo $commond”),并返回结果。

PHP基于Linux的远程管理系统客户端的设计和实现_第4张图片

3、进程操作

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

4、系统操作

系统操作中包括:关机或重启、查看系统信息、管理用户和组、管理软件包(如图6);

PHP基于Linux的远程管理系统客户端的设计和实现_第5张图片

如图7,系统操作模块的总体设计跟命令操作中类似,使用表单获取所需运行命令或参数,再提交给system函数执行并返回结果:

PHP基于Linux的远程管理系统客户端的设计和实现_第6张图片 

  1. 关机和重启,可通过管理员点击Shutdown、Reboot按钮,从而调用system函数执行内置的关机、重启命令,也可在表单中输入其他关机或重启命令并运行;
  2. 查看系统信息,通过switch判断提交的命令,并调用system函数执行内置命令如uname –a、fdisk –l等,包括查看CPU信息、查看分区信息、查看内核;
  3. 管理用户和组,可以查看系统拥有用户和组,并通过简单的表单提交,进行添加、删除用户或组的操作,详见图8;

PHP基于Linux的远程管理系统客户端的设计和实现_第7张图片

  1. 管理软件包,可以查看系统所有已安装软件包,并输入关键字搜索查看特定软件包,以及根据搜索出的软件包名进行软件包删除操作;

5、网络服务操作

  • 管理Apache服务器,查看并配置Apache服务器状态与参数;
  • 管理DNS服务器,查看并配置DNS服务器参数;
  • 管理MySQL服务器,通过Web进行Mysql服务器的备份等;
  • 管理DHCP服务器,查看网络状态,配置网络参数。
  1. 详细设计
  2. 服务器设计

此管理系统的目的是对Linux进行远程管理,则在管理过程中需要对Linux系统配置文件进行读取,或者运行系统命令,访问系统敏感数据等。而在Linux系统中,默认的Apache用户权限是无法访问管理系统所需文件,无法运行关键系统命令的,因此,需要对Apache服务器进行一些特殊配置,提升其权限,并且需要考虑安全问题,对用户的认证问题等等。在本系统中,使用SSL连接,运用Apache基本验证来认证用户;通过对Apache服务器进行特殊配置,使其获得root权限,完成远程管理Linux服务器的目的。

  1. 更改Apache配置

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

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

  • 配置httpd.conf

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

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

  • 为所保护目录建立ACL

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

SSLRequireSSL  //使用SSL安全连接

AuthName "PHP Webmin"  //验证名称

AuthType Basic

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

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

  • 创建用户身份验证数据库

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

htpasswd -c /var/www/phpwebmin/.phpwebminpasswd admin

New password:

Re-type new password:

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

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

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

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

  1. 服务器特殊配置

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

  • 查看httpd.conf文件找到User字段,查看Apache启动用户(默认为apache);
  • 编辑/etc/passwd文件,找到apache用户行,修改其shell(默认为/bin/nologin或/bin/false)为/bin/bash;
  • 编辑/etc/sudoers文件,在文件中root ALL=(ALL)ALL字段的下一行添加apache ALL=NOPASSWORD:ALL,使得apache用户能够通过sudo命令执行所有命令。

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

  1. 命令操作模块设计
  2. 功能描述

对命令的解释与执行,执行常用Linux命令,通过前面的服务器配置后,使用户在浏览器中用户系统root权限,执行系统命令,注意使用的是Web模式,无法执行交互式Shell命令。

  1. 界面设计

页面中仅有一个输入框,一个提交按钮,和一个结果显示区域,如图9:

PHP基于Linux的远程管理系统客户端的设计和实现_第8张图片

文本输入框获得commond变量,提交给system函数后运行并把结果显示在textarea中:

result:

  1. 工作流程

用户在文本框中输入并提交命令,点击go运行,在文本区域中返回并显示运行结果。具体流程见 图4命令操作设计流程。

实现代码如下:

$exec=NULL;

import_request_variables("gp","cmd_");

if($cmd_command) {$exec=$cmd_command;}

?>

if($exec) { system("sudo $exec");}

?>

  1. 系统操作模块设计

系统操作模块中又包括关机和重启、查看系统信息、管理用户和组、管理软件包四个子模块。不同的子模块采用相似的方式实现其功能。

  1. 功能描述
  • 系统关机、系统重启;
  • 查看系统cpu信息、查看硬盘信息、查看内核;
  • 查看系统用户和组,添加/删除用户,添加/删除组;
  • 查看系统安装软件包、根据关键字搜索软件包、根据软件包全名删除软件。
  1. 界面设计

基本设计为,页面上方为提交按钮,下方为一个文本区域,点击按钮时调用system函数运行内置命令,并在文本区域中返回结果。下面以用户/组管理模块来说明界面设计模式,如图10所示。

查看用户/组页界面代码:

PHP基于Linux的远程管理系统客户端的设计和实现_第9张图片

在管理用户和组子模块中,首先在edit_user.html页中填写user属性,包括用户名,用户工作目录,用户shell,用户uid,用户密码等参数,提交至save_user.php页并运行useradd操作,同时返回运行结果。

如图11所示,编辑用户页面中,三个输入框分别为用户名获取变量$user,用户ID获取变量$uid,用户目录获取变量$home,一个选择框选择用户默认shell获取$shell,另一选择是否需要密码,需要则输入密码获取$encpass,使用一个提交按钮Creat来提交所输入的用户信息至save_user.php页,代码如下:

Username User ID
Home directory

Shell Password

No password required

Encrypted password


            ….

PHP基于Linux的远程管理系统客户端的设计和实现_第10张图片

  1. 工作流程
    1. 用户点击关机与重启子模块,点击Shutdown或Reboot按钮产生关机或重启操作,也可执行自定义关机/重启命令,具体流程如图12;
  2. PHP基于Linux的远程管理系统客户端的设计和实现_第11张图片

实现代码如下:

  switch($_POST['init'])

{

case Shutdown:

echo "Shutdown immediately......\n";

$exec="sudo init 0";

break;

case Reboot:

echo "Reboot immediately......\n";

$exec="sudo init 6";

}

if($_POST['command'])

{

echo "Waiting......\n";

$exec="sudo ".$_POST['command'];

}

if($exec)

{

system($exec);

echo "\nDone...";

}

    1. 打开查看系统信息子模块,查看CPU Info、Disk Info、Kernel Version,流程如图13;
  1. PHP基于Linux的远程管理系统客户端的设计和实现_第12张图片

实现代码如下:

          

switch($_POST['info'])

{

case "CPU Info":

$exec="sudo cat /proc/cpuinfo";

break;

case "Disk Info":

$exec="sudo fdisk -l";

break;

case "Kernel Version":

$exec="sudo uname -a";

}

if($exec) { system($exec);}

?>

    1. 打开管理用户和组子模块,在初始页面中可查看系统用户和组,点击查看用户/组按钮时,调用system函数运行cat命令,在文本区域中显示/etc/passwd或/etc/group文件的内容;

点击添加用户连接进入用户的信息页面user_edit.html,填写用户基本信息,提交至添加页user_save.php,运行sudo useradd命令,完成添加操作;

点击删除用户连接,进入删除页面del_user.php,填写用户名,运行sudo userdel命令,完成删除操作,工作流程见 图8 用户/组管理总体设计图,下面为添加/删除用户代码。

添加用户代码:

         switch($_POST['passmode'])

{

case 0:

$passwd="";

break;

case 1:

$passwd=" -p ".$_POST['encpass'];

}

if(!$_POST['home'])

{

$home=" -d ".$_POST['home'];

}

$user=$_POST['user'];

$uid=" -u ".$_POST['uid'];

$shell=" -s ".$_POST['shell'];

$commond="sudo useradd ".$_POST['user']." -d ".$_POST['home']." -s ".$_POST['shell']." -u ".$_POST['uid']." -p ".$_POST['encpass'];

echo $commond;

if($commond)  { system($commond); }

删除用户代码:

         $commond="sudo userdel ".$_POST['user'];

echo $commond;

          if($commond)  { system($commond); }

    1. 打开管理软件包子模块,查看系统已安装软件包,填写关键字搜索,根据软件包全名进行删除操作,软件包管理流程如图14。
  1. PHP基于Linux的远程管理系统客户端的设计和实现_第13张图片

查看已安装软件包代码:

         switch($_POST['package'])

{

                  case "Show all package":

                  echo "Waiting......\n";

                  $exec="sudo rpm -qa";

}

根据关键字搜索代码:

          if($_POST['search'])

{

                  echo "Waiting......\n";

                  $exec="sudo rpm -qa | grep ".$_POST['search'];

}

              if($exec) { system($exec);}

根据关键字删除代码:

          if($_POST['uninstall'])

{

                  echo "Waiting......\n";

                  $exec="sudo -e ".$_POST['uninstall'];

}

if($exec)

{

                  if(system($exec))

                  echo "\nDone......\n";

                  else    echo "Error...Check your package name or operation...";

}

  1. 系统安装使用与测试
  2. 服务器设置

按照 5.1服务器设计中给出步骤,分别对Apache Web服务器,及Linux服务器进行配置,注意若不对/etc/sudoers进行配置,则本系统大部分功能无法使用。

也可省略对.htaccess和.phpwebminpasswd的生成,使用源代码中所带的ACL文件和用户密码数据文件,请注意修改.htaccess文件中AuthUserFile后的字段指向相应数据文件,默认用户名为admin,密码为admin。

  1. 使用系统

把PHP Webmin源代码放至/var/www/phpwebmin目录,在浏览器中通过https://localhost/phpwebmin/进行访问和测试,也可通过远程访问进行测试。

  1. 测试
  2. 基本测试
  1. 通过https登录并输入用户名和密码,通过认证则进入主页面,如图15;

PHP基于Linux的远程管理系统客户端的设计和实现_第14张图片

  1. 若使用http登录则显示Forbidden,如图16;

PHP基于Linux的远程管理系统客户端的设计和实现_第15张图片

  1. 在未通过验证的情况下无法访问访问任何phpwebmin下级目录;
  1. 功能测试

使用PHP Webmin对系统进行简单管理:

  1. 运行Shell命令,输入whoami显示结果为root,如图9所示;
  2. 查看用户,点击Show all user,在文本区域中显示所有系统用户,及其主目录、uid、shell,如图10所示例;
  3. 查看CPU信息,点击CPU Info,在文本区域中显示CPU信息,如图17;

PHP基于Linux的远程管理系统客户端的设计和实现_第16张图片

  1. 关机/重启,点击Shutdown,系统将立即关闭,点击Reboot,系统将立即重启。

已知问题:

使用Apache基本验证会在浏览器中保存session,需要在完成系统管理操作后关闭浏览器或手动删除浏览器session;

apache用户经过配置后可执行sudo命令,产生了系统安全隐患。

Linux远程管理系统主体功能已全面实现。系统界面简洁,操作方便,功能齐全,实现了文件操作、远程运行Shell命令、进程监控、用户/组管理、系统信息查看、Rpm软件包管理、查看/配置网络参数、管理常见服务器软件的功能,基本实现了对Linux系统的远程管理。但是也有需要进一步改进的地方,如:在进程监控时,需要查看进程信息后结合命令行操作来实现对进程的关闭;还有本系统没有完全实现服务器配置功能,没有完全解决对系统配置文件的读写问题等。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,服务器,运维)