基于linux的远程管理系统服务器端的实现—计算机毕业设计(论文内容摘要:

以利用这些系统操作对远程 Linux 系统进行简单的系统管理。 总体思路为,利用 PHP 的 _POST 数组得到相应的传输过来的命令,然后利用 PHP的 system 函数执行相应的 SHELL 命令,并把结果传输到服务器。 网络操作模块 主要对远程 Linux 系统的网络进行简单的管理和配置。 实现的总体思路为,在服务器端修改某些跟网络管理相关的文件的访问权限以使 Apache 可以访问和修改这些文件,利用 PHP的 _POST数组得到相应的传输过来的网络操作命令,然后利用 PHP的 system函数执行相应的 SHELL 命令,并把结果传输 到服务器。 具体实现 安全访问模块 安全访问主要通过本机访问控制文件和 PHP 脚本身份验证来进行实现。 主机访问控制文件 在远程主机中,要开启 apache 服务器,并在 apache 的配置文件中添加要访问的目录 的 访问 控制 选项。 之 后在 要访 问的 目 录中 建立 访问 控制 文件 .htaccess和 .remoteadminpasswd。 .htaccess 文件定义了用户名和密码文件的路径和其他一些控制选项。 .remoteadminpasswd 文件有用户名和加密的密码。 Apache 的配置是为了实现目录保护和基本验证,但为了提高 用户的权限,还需要 对服务器进行一些配置。 1) 查看 文件找到 User 字段,查看 Apache 启动用户(默认为 apache); 2) 编辑 /etc/passwd文件,找到 apache用户行,修改其 shell(默认为 /bin/nologin或 /bin/false)为 /bin/bash; 3) 编辑 /etc/sudoers 文件,在文件中 root ALL=(ALL)ALL 字段的下一行添加apache ALL=NOPASSWORD:ALL,使得 apache 用户能够通过 sudo 命令执行所有命令。 经过此配置后, apache 用户只要使用 sudo 命令即可获得 root 权限。 为了保证系统的安全性,在此对 Apache Web 服务器的目录执行访问控制 ,使用 .htaccess 访问文件和 htpasswd 程序为一个目录建立 ACL,来对用户进行身份验证,并在 .htaccess 文件中设置使用 SSL 连接,完善安全性。 假设 PHPWebmin 位于 /var//phpwebmin 目录中。 1)配置 用 vi 编辑器打开 Apache 配置文件 (默认在 /etc/d/conf/目录下),找到 Directory /var/字段,在下面的属性设置中添加或修改 AllowOverride ALL //此参数设置哪些目录使用 .ltaccess 进行保护; 2)为所保护目录建立 ACL 进入 phpwebmin 目录, cd /var//phpwebmin,在此目录下建立隐藏文件 .htaccess(必须在 htaccess 文件前添加一个点号,如果不这样做,就无法建立 ACL,因为点号表示建立一个隐藏文件 ) vi .htaccess,在 .htaccess 文件中输入如下代码: SSLRequireSSL //使用 SSL安全连接 AuthName PHP Webmin //验证名称 AuthType Basic require validuser //允许 password文件中的所有用户访问 AuthUserFile /var//phpwebmin/.phpwebminpasswd //身份数据文件 ; 3)创建用户身份验证数据库 在命令行下输入以下口令创建用户身份验证数据库文件,会要求你为用户 admin 创建密码: htpasswd c /var//phpwebmin/.phpwebminpasswd admin New password: Retype new password: 建立后的 .phpweminpasswd 文件内容类似于: admin:Op96DPmXTKy5w //用户名 :MD5 加密后的密码 若系统没有安装 htpasswd, 也可在网上生成用户名密码后放入 .phpwebminpasswd 文件 . 这样,就已经为 Apache 服务器建立了一个用户账号数据库,并对 phpwebmin 目录实 行 了 目 录 保 护 , 并 实 现 了 用 户 基 本 验 证 , 需 要 用 安 全 连 接 进行访问,访问过程中会弹出验证对话框。 PHP 脚本的身份验证 利用 _GET 数组判断是登录还是注销,如果是登录,则验证密码是否正确,如果正确则进入管理界面,并在客户端设置 cookie 以记录登录信息,否则提示相应的错误信息。 验证流程如图 4: 图 4 身份验证流程 身份验证的主要代码如下: if ($_GET[39。 action39。 ] == logout) { setcookie(adminpass, )。 echometa equiv=\refresh\ ontent=\3。 URL=.$self.\。 echo span style=\fontsize: 12px。 fontfamily: Verdana\注 销成功 ......pa href=\.$self.\三秒后自动退出或单击这里退出程序界面 /a/span。 ob_end_flush()。 exit。 } if ($_POST[39。 do39。 ] == 39。 login39。 ) { $thepass=trim($_POST[39。 adminpass39。 ])。 if($admin[39。 pass39。 ] == $thepass) { setcookie(adminpass, $thepass, time() + (1 * 24 * 3600))。 echo meta equiv= \refresh\ content=\3。 URL=.$url.\。 echo span style=\fontsize: 12px。 fontfamily: Verdana\ 登录 成功 ......pa href=\.$url.\三 秒后自动跳转或单击这里进入程序界面 /a/span。 exit。 } else { echo 密码错误,请重新输入 /br。 } } if(isset($_COOKIE[39。 adminpass39。 ])) { if ($_COOKIE[39。 adminpass39。 ] != $admin[39。 pass39。 ]) { loginpage()。 } else { loginpage()。 } } 文件操作模块 文件操作有很多类型的操作,主要包括查看文件或目录信息,新建文件或目录,删除文 件或目录,复制文件或目录,运行文件,上传文件,下载文件。 文件的操作和在本地操作文件一样,只是形式有所不同,当用户选择了一个或部分文件之后,就可以点击相应的命令按钮,从而产生相应的动作。 主要利用 PHP 的 cookie传递命令,在具体操作方面主要利用 PHP 的文件 IO 函数来实现,在显示方面,编写了一个格式类,可以调用该类的相应函数来格式或者显示数据。 文件操作流程如图 5: 图 5 文件操作流程 编辑文件和文件改名的主要代码如下: // 编辑文件 if ($_POST[39。 do39。 ] == 39。 doeditfile39。 ) { if (!empty($_POST[39。 editfilename39。 ])) { $filename=$editfilename。 @$fp=fopen($filename,w)。 echo $msg=@fwrite($fp,$_POST[39。 filecontent39。 ]) ? 写入文件成功 ! : 写入失败 !。 @fclose($fp)。 } else { echo 请输入想要编辑的文件名 !。 } } // 编辑文件属性 elseif ($_POST[39。 do39。 ] == 39。 editfileperm39。 ) { if (!empty($_POST[39。 fileperm39。 ])) { $fileperm=base_convert($_POST[39。 fileperm39。 ],8,10)。 echo (@chmod($dir./.$file,$fileperm)) ? 属性修改成功 ! : 修改失败 !。 echo 文件 .$file. 修改后的属性为 : .substr(base_convert(@fileperms($dir./.$file),10,8), 4)。 } else { echo 请输入想要设置的属性 !。 } } 命令操作模块 命令操作 即是 对各种 SHELL命令的解释与执行 ,这主要是通过 php的 system、 passthru等函数来执行。 可在此模块中进行进程操作和系统操作等等,注意使用的是 Web 模式,无法执行交互式 Shell 命令。 在设计中,使用一个表单获得 mond 变量,提交给 system函数后执行 system(“ sudo $mond” ),并返回结果。 命令 操作流程如图 6 图 6 命令操作流程 部分代码如下: if (!empty($_POST[39。 mand39。 ])) { if ($execfunc==system) { system(sudo .$_POST[39。 mand39。 ])。 } elseif ($execfunc==passthru) { passthru(sudo .$_POST[39。 mand39。 ])。 } elseif ($execfunc==exec) { $result = exec(sudo .$_POST[39。 mand39。 ])。 echo $result。 } elseif ($execfunc==shell_exec) { $result=shell_exec(sudo .$_POST[39。 mand39。 ])。 echo $result。 } elseif ($execfunc==popen) { $pp = popen(sudo .$_POST[39。 mand39。 ], 39。 r39。 )。 $read = fread($pp, 2096)。 echo $read。 pclose($pp)。 } elseif ($execfunc==wscript) { $wsh = new COM(39。 W39。 .39。 Scr39。 .39。 ip39。 .39。 39。 .39。 ll39。 ) or die(PHP Create COM WSHSHELL failed)。 $exec = $wshexec (cm..xe /c .sudo .$_POST[39。 mand39。 ].)。 $stdout = $execStdOut()。 $stroutput = $stdoutReadAll()。 echo $stroutput。 } else { system(sudo .$_POST[39。 mand39。 ])。 } } 进程操作模块 进程操作主要包括 查看或终止正在运行的进程 , 查看开启的服务列表、对开启服务进行管理、查看当前系统所有正在运行的进程并且可以对进程进行相关操作。 这主要通过执行 ps – aux 来获取进程列表,再用表格来表示出来,并且可以 kill 掉每一个进程。 进程操作 流程如图 7: 图 7 进程操作流程 主要代码如下: if ($_GET[39。 action39。 ] == process) { if(!$win) {$handler = ps aux.($grep? | grep 39。 .addslashes($grep).39。 :)。 } else {$handler = tasklist。 } $ret = myshellexec($handler)。 if(!$ret) {echo Can39。 t execute \.$handler.\!。 } else { if(empty($processes_sort)) {$processes_sort = $sort_default。 } $parsesort = parsesort($processes_sort)。 if (!is_numeric($parsesort[0])) {$parsesort[0] = 0。 } $k = $parsesort[0]。 if($parsesort[1] != a) { $y=a href=\.$surl.action=.$dspact.amp。 d=. urlencode($d).amp。 processes_sort=.$k.a\ img src=\.$surl.action=imgamp。 img= sort_desc\height=\9\width=\14\ order=\0\/a。 } else { $y=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。