基于php的Linux远程管理系统客户端的实现

Firstsnow

发布日期: 2018-12-22 11:04:43 浏览量: 472
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

摘要

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

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

关键词:Linux;远程管理;Webmin;PHP

1 总体设计

1.1 模块划分与功能设计

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

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

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

1.1.1 功能模块的初步设计

1、文件操作

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

2、命令操作

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

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

3、进程操作

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

4、系统操作

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

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

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

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

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

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

5、网络服务操作

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

2 详细设计

2.1 服务器设计

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

2.1.1 更改Apache配置

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

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

1、配置httpd.conf

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

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

2、为所保护目录建立ACL

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

  1. SSLRequireSSL //使用SSL安全连接
  2. AuthName"PHP Webmin"  //验证名称
  3. AuthTypeBasic
  4. requirevalid-user //允许password文件中的所有用户访问
  5. AuthUserFile /var/www/phpwebmin/.phpwebminpasswd //用户身份数据库文件;

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

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

  1. htpasswd -c /var/www/phpwebmin/.phpwebminpasswd admin
  2. New password:
  3. Re-type new password:

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

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

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

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

2.1.2 服务器特殊配置

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

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

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

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

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

2.2 命令操作模块设计

2.2.1 功能描述

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

2.2.2 界面设计

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

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

  1. <input type="text" name="command" size="60" value='<?echo $exec;?>' >
  2. <input name="submit_btn" type="submit" value="go"></p>
  3. result:<br>
  4. <textarea cols="80" rows="20" readonly>
  5. /* 具体代码 */
  6. </textarea>

2.2.3 工作流程

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

实现代码如下:

  1. <?php
  2. $exec=NULL;
  3. import_request_variables("gp","cmd_");
  4. if($cmd_command) {$exec=$cmd_command;}
  5. ?>
  6. <?php
  7. if($exec) { system("sudo $exec");}
  8. ?>

2.3 系统操作模块设计

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

2.3.1 功能描述

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

2.3.2 界面设计

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

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

  1. <form action="" method="post">
  2. <input type=submit name=show value="Show all user">
  3. <input type=submit name=show value="Show all group">
  4. </form>
  5. <textarea cols="80" rows="15" readonly>
  6. /* 具体代码 */
  7. </textarea>

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

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

  1. <form action="save_user.php" method="post">
  2. <table border width=100%>
  3. <tr> <td><b>Username</b></td>
  4. <td><input name=user size=10 value=""></td>
  5. <td><b>User ID</b></td>
  6. <td><input name=uid size=10 value="500"></td> </tr>
  7. <td><b>Home directory</b></td>
  8. <td><input name=home size=25 value="">
  9. <tr> <td valign=top><b>Shell</b></td>
  10. <td valign=top><select name=shell>
  11. <option value='/bin/sh' >/bin/sh
  12. <option value='/bin/csh' >/bin/csh
  13. <option value='/bin/bash' >/bin/bash
  14. <option value='/bin/false' >/bin/false
  15. <option value='/sbin/nologin'>/sbin/nologin
  16. <option value=*>Other..
  17. </select></td>
  18. <td valign=top rowspan=4><b>Password</b></td> <td rowspan=4>
  19. <input type=radio name=passmode value=0 > No password required<br>
  20. <input type=radio name=passmode value=1 > Encrypted password
  21. <input type=password name=encpass size=13 value=""><br>
  22. ….
  23. <input type=submit value=Create></form>

2.3.3 工作流程

  1. 用户点击关机与重启子模块,点击Shutdown或Reboot按钮产生关机或重启操作,也可执行自定义关机/重启命令,具体流程如下图;

实现代码如下:

  1. switch($_POST['init'])
  2. {
  3. case Shutdown:
  4. echo "Shutdown immediately......\n";
  5. $exec="sudo init 0";
  6. break;
  7. case Reboot:
  8. echo "Reboot immediately......\n";
  9. $exec="sudo init 6";
  10. }
  11. if($_POST['command'])
  12. {
  13. echo "Waiting......\n";
  14. $exec="sudo ".$_POST['command'];
  15. }
  16. if($exec)
  17. {
  18. system($exec);
  19. echo "\nDone...";
  20. }
  1. 打开查看系统信息子模块,查看CPU Info、DiskInfo、Kernel Version,流程如下图;

实现代码如下:

  1. <?php
  2. switch($_POST['info'])
  3. {
  4. case "CPU Info":
  5. $exec="sudo cat /proc/cpuinfo";
  6. break;
  7. case "Disk Info":
  8. $exec="sudo fdisk -l";
  9. break;
  10. case "Kernel Version":
  11. $exec="sudo uname -a";
  12. }
  13. if($exec) { system($exec);}
  14. ?>

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

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

点击删除用户连接,进入删除页面del_user.php,填写用户名,运行sudo userdel命令,完成删除操作,下面为添加/删除用户代码。

添加用户代码:

  1. switch($_POST['passmode'])
  2. {
  3. case 0:
  4. $passwd="";
  5. break;
  6. case 1:
  7. $passwd=" -p ".$_POST['encpass'];
  8. }
  9. if(!$_POST['home'])
  10. {
  11. $home=" -d ".$_POST['home'];
  12. }
  13. $user=$_POST['user'];
  14. $uid=" -u ".$_POST['uid'];
  15. $shell=" -s ".$_POST['shell'];
  16. $commond="sudo useradd ".$_POST['user']." -d ".$_POST['home']." -s ".$_POST['shell']." -u ".$_POST['uid']." -p ".$_POST['encpass'];
  17. echo $commond;
  18. if($commond) { system($commond); }

删除用户代码:

  1. $commond="sudo userdel ".$_POST['user'];
  2. echo $commond;
  3. if($commond) { system($commond); }

  1. 打开管理软件包子模块,查看系统已安装软件包,填写关键字搜索,根据软件包全名进行删除操作,软件包管理流程如下图。

查看已安装软件包代码:

  1. switch($_POST['package'])
  2. {
  3. case "Show all package":
  4. echo "Waiting......\n";
  5. $exec="sudo rpm -qa";
  6. }

根据关键字搜索代码:

  1. if($_POST['search'])
  2. {
  3. echo "Waiting......\n";
  4. $exec="sudo rpm -qa | grep ".$_POST['search'];
  5. }
  6. if($exec) { system($exec);}

根据关键字删除代码:

  1. if($_POST['uninstall'])
  2. {
  3. echo "Waiting......\n";
  4. $exec="sudo -e ".$_POST['uninstall'];
  5. }
  6. if($exec)
  7. {
  8. if(system($exec))
  9. echo "\nDone......\n";
  10. else echo "Error...Check your package name or operation...";
  11. }

参考文献

[1] Ashish Wilfred & Meeta Gupta & Kartik Bhatnagar[美].PHP专业项目实例开发[M].北京:中国水利水电出版社。

[2] Warren W.Gay[美]. 实战Linux Socket编程[M].西安:西安电子科技大学出版社。

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

[4][常晓波].[Linux系统管理用户指南][M].北京:[清华大学出版社]。

[5] John Ha[美].Red Hat Linux 入门指南[OL]. http://www.chinalinuxpub.com/doc/manual/9.0/rhl-gsg-zh_CN-9/,。

[6] STCore .com . Apache中实现身份验证和访问控制[OL] . http://www.stcore.com/security/2006-11-08/1163000103d112784.html .

[7] Stan & Peter Klimas[美].Linux常用命令[OL]. http://man.chinaunix.net/linux/command/Linux_command.htm,。

上传的附件 cloud_download 基于Linux的远程管理系统客户端的实现.zip ( 900.56kb, 1次下载 )
error_outline 下载需要4点积分

发送私信

背负的太多,没等到击垮敌人,就先累死了自己

9
文章数
8
评论数
最近文章
eject