已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分类号 分类号 TP311 1TP311 1 U U D D C C D10621 408 2007 5913 0D10621 408 2007 5913 0 密密 级 公级 公 开开 编编 号 号 20030320452003032045 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 一种远程管理一种远程管理 LinuxLinux 系统工具的设计与实现系统工具的设计与实现 论文作者姓名 论文作者姓名 程富超程富超 申请学位专业 申请学位专业 网络工程网络工程 申请学位类别 申请学位类别 工学学士工学学士 指指导导教教师师姓姓名名 职职称称 刘嘉勇 教授 刘嘉勇 教授 论文提交日期 论文提交日期 20072007 年年 0606 月月 1010 日日 一种远程管理一种远程管理 LinuxLinux 系统工具的设计与实现系统工具的设计与实现 摘摘 要要 现在 Linux 已经是应用比较广泛的操作系统之一 在其系统中有很多的服 务 为了实现远程配置和管理 Linux 中的各种服务 需要有一种远程管理 Linux 系统的工具软件 Webmin 就是一种较好的 B S 模式软件 而该课题以 C S 模式 实现 该工具主要功能实现对 Linux 系统用户和组的添加 修改和删除 对系 统应用服务 如 DNS FTP Apache 系统启动服务管理 进行管理和配置 这 些服务的远程配置主要是通过修改服务配置文本文件来实现的 该远程管理工 具选用 C S 模式设计 在客户端 采用 GTK 编程来实现操作界面 在服务器端 选用 Linux 系统的文件调用函数来读写配置文件中的数据 采用 Sock TCP 编程 来实现客户端和服务端之间的数据通信 通过系统测试后 完成预期的目标 但是需要进一步完善程序和考虑安全性后 方可应用于实际的远程管理 关键词关键词 Linux 系统服务 C C GTK 系统调用 Socket The Design and Implementation of a Remote Management Tool for Linux Abstract The operating system of Linux has become one of the most popular operating systems nowadays It provides many kinds of service In order to configure and manage the service remotely the tool of remote management of the operating system of Linux is needed Webmin is a good tool of software based on the model of B S This design is implemented based on the model of C S The main functions of the system include addition modification deletion of users and groups of Linux operating system and configuration and management of the service of application of the system such as the DNS FTP Apache and the management of booting service The remote management of service is implemented by modifying the files of configuration The model of C S is selected by this system In the Client the operating interface is made by the programming of GTK In the Server the functions of transferring of files of Linux operating system are used to write and read the data of the configuration files The communication of Client and Server is implemented by the programming of Sock TCP The testing demonstrates that the system has reached the prospective goal But lots of improvements should be made and the problems of security should be considered more After being modified and perfected the system can be used to manage the system remotely Key words Linux System Servers C C GTK System Call Socket 目目 录录 论文总页数 33 页 1引言 1 1 1课题背景 1 1 2国内外研究现状 1 1 3本课题研究的意义 1 1 4本课题的研究方法 1 2GTK 编程 1 2 1GTK 简介 1 2 2常用的 GTK 构件 3 3LINUX 系统调用 6 3 1LINUX系统文件 6 3 2如何从文件中读取数据 6 3 3进程和线程的使用 7 4基本的套接口编程 7 4 1概述 7 4 2简单的网络编程 8 5程序设计和流程图 10 5 1设计思路 10 5 2服务程序 10 5 2 1流程设计 10 5 2 2功能模块 11 5 3客户程序 20 5 3 1设计思路 20 5 3 2程序设计 20 6系统测试 30 结 论 31 参考文献 31 致 谢 32 声 明 33 第 1 页 共 33 页 1 1 引言引言 1 11 1 课题背景课题背景 Linux 是目前应用最广泛的操作系统之一 基于 Linux 系统的网络服务软件 如 FTP Apache DNS SendMail 的功能也很强大 但是现在能够统一对这些 服务进行管理的软件却很少的 本课题为减轻系统管理员的工作量而提供了一 些简单的系统服务的管理和查看工具 1 21 2 国内外研究现状国内外研究现状 Linux 是现在开源项目的代表 很多大的硬件厂商也在支持 Linux 的发展 而且 Linux 平台上的服务软件也是越来越多了 现在 Linux 已经进入到企业级 应用 Webmin 是一种基于 B S 模式的远程管理 Linux 系统的软件工具 1 31 3 本课题研究的意义本课题研究的意义 本课题是为了给系统管理员提供一种远程管理 Linux 中某些主要服务的工 具软件 完成服务配置管理和查看一些重要的数据 由于 Linux 是开源项目的 代表 对 Linux 的学习有助于对计算机系统和软件理论知识的提高 通过该课 题的设计和实现 既解决远程管理 Linux 系统 又让自己掌握了一些 Linux 系 统编程和 Sock 编程能力 1 41 4 本课题的研究方法本课题的研究方法 本课题主要是对网络配置 GTK 库 Linux 系统调用和网络编程方面的研究 采用 C S 模式 在客户端采用 GTK 函数实现用户界面的编写 在服务器端通过 Linux 的系统调用 来实现本地服务配置 然后再通过 Sock 编程来实现服务器 和客户端的通信 传递配置内容和服务指令 2 2GTKGTK 编程编程 2 12 1 GTKGTK 简介简介 GTK GIMP Toolkit GIMP 工具包 是一个用于创造图形用户接口的多平台工 具 它包含有基本的空间和一些很复杂的控件 例如文件选择控件 GTK 最初 是 GIMP GNU 图形处理程序 开发的控件集合 然后它不断扩展 直到今天被用 于大量的应用程序当中 从根本上来说 主循环是由 glib 实现的 Gtk 将 glib 主循环连接到 Gdk 的 X 服务器 并提供一个方便的接口 Gtk 分别用 gtk main 函数和 gtk main quit 函数来运行主循环和退出 主循环 当系统调用了 gtk main 函数后 由于 gtk main 函数可以递归调用 所以需要调用 gtk main quit 函数才能退出 gtk gtk main 函数的所有功能都是监视 Gtk 程序和与 X 服务的连接 对同样 的时间队列起作用 gtk main 函数用于阻塞该进程直到满足某些条件 所有 第 2 页 共 33 页 的 Gtk 程序都用这个技巧使应用程序正在运行时 main 函数被阻塞 直到用户 通过点击鼠标或键盘来产生一个信号 并通过该信号来调用相应的回调函数 GTK 是一个时间驱动工具包 它将在 gtk main 函数中一直等待 直到某 个事件的发生或控制权被交给相应的函数 1 信号 控制权的传递是使用 信号 的方法 一旦事件发生 比如鼠标器按钮被 按下 被按下的构件 按钮 将引发适当的信号 有一些信号是大多数构件都 具备的 比如 destory 还有一些是某些构件专有的 比如在按扭的 toggled 信号 要让一个按钮执行一个操作 我们需要写一段信号处理程序 以捕获它 的信号 然后调用相应的回调函数 这由类似以下所示的函数实现 Gint gtk signal connect GtkObject object Gchar name GtkSignalFunc func gpointer func data 上面函数的第 3 个参数为回调函数 它的形式通常是 void callback func GtkWidget widget gpointer callback data 2 事件 除了上面的信号机制外 还有一些和X事件机制相对应的事件 回调函数也 可以和这些事件连接起来应用 将回调函数连接到X的某一个事件 需要使用 gtk signal connect函数 并使用事件名称作为命名参数 事件的回调函数与 信号的回调函数在形式上略有不同 Void func GtkWidget widget GdkEvent event gpointer callback data GdkEvent是C中的联合体结构 其类型依赖于发生的事件 要想知道哪一个 事件已经引发 可以查看类型参数 因为每个可能的可选事件都有一个反映引 发事件的类型参数 将回调函数与一个事件连接起来 需要使用以下形式的函 数 gtk signal connect GTK OBJECT button button press event GTK SIGNAL FUNC button press callback NULL 这里假定button是一个按钮构件 现在 当鼠标移动到按钮上方 鼠标按 第 3 页 共 33 页 钮按下时 将调用button press callback函数 回调函数可以作如下声明 static gintbutton press callback GtkWidget widget GdkEventButton event gpointer data 2 22 2 常用的常用的 GTKGTK 构件构件 GTK构件可以分为两种 一种有一个相关联的GdkWindow窗口 另一种没有 绝大多数构件都是第一种构件 并且可以显示在GdkWindow窗口 1 GtkWindow 构件 GtkWindow构件是最大的容器 它实际就是一个窗体构件 但是它只可以容 纳一个子构件 所以要让GtkWindow能容纳更多的构件必须使用布局控件来布局 用下面的函数创建新窗口 GtkWidget gtk window new GtkWindowType type 用下面的构件向窗口中添加子构件 gtk container add GTK CONTAINER window widget 2 组装构件 组装构件通常是直接从GtkContainer派生而来 这些构件可以有多个子构 件 它们的作用就是管理布局 管理布局 意味着这些容器为它们容纳的子构 件分配大小尺寸和位置 例如 GtkVBox将它的子构件在一个垂直的栈内排列 GtkTable构件可以让构件在一个表格上根据单元格定位 GtkTable 表格构件 是很常用的用于定位的构件 我们用表格构件创建一 个网格 把构件放在网格里 构件可以在网格中占据任意多个格子 用gtk table new创建一个表格构件 GtkWidget gtk table new gint rows gint columns gint homogeneous 要将构件放到表格中 可以使用下列函数 void gtk table attach GtkTable table GtkWidget child gint left attach gint right attach gint top attach gint bottom attach gint x options gint yoptions 第 4 页 共 33 页 gint xpadding gint ypadding 3 按钮构件 GtkButton 普通按钮构件 是应用程序中使用最广泛的构件 它一般用于当 用户点击它时执行某个动作 其使用和创建也相当简单 可以用gtk button new with label 创建带标题的按钮 按钮创建以后就 可以用上面所讲述的GTK信号和回调函数或事件机制来实现 当按扭按下或有其 他操作时候的回调函数来响应相应的函数或事件 4 文本构件 GtkText 文本构件 允许多行显示或编辑文本 它支持多种颜色以及多种 字体的文本 允许它们以任何需要的形式混合显示 还有许多与Emacs兼容的文 本编辑命令 文本构件支持完全的剪切 粘贴功能 还包括双击选择一个单词和 单击选择整行的功能 创建新Text构件只有一个函数 GtkWidget gtk text new GtkAdjustment hadj GtkAdjustment vadj 文本构件有两个主要用途 允许用户编辑一段文本 或向用户显示多行文 本 为了在两种操作模式之间进行切换 文本构件有以下函数 void gtk text set editable GtkText text gint editable 为了在当前插入点插入文本 可以使用gtk text insert函数 插入时可以 指定文本的背景色 前景色和字体 void gtk text insert GtkText text GdkFont font GdkColor fore GdkColor back const char chars gint length 5 标签构件 GtkLabel 标签构件 是GTK中最常用的构件之一 实际上它很简单 因为没 有相关联的X窗口 标签构件不能引发信号 如果需要引发信号 可以将它放在 一个事件盒构件中 或放在按钮构件中 用以下函数创建新标签构件 GtkWidget gtk label new char str 唯一的参数是要由标签显示字符串 创建标签构件后 要改变标签内的文 本 用以下函数 void gtk label set text GtkLabel lacbel char str 第 5 页 共 33 页 第一参数是前面创建的标签构件 用GTK LABEL 宏转换 第二个参数是新 字符串 如果需要 新字符串所需的空间会做自动调整 在字符串中放置换行 符 可以创建多行标签 6 笔记本构件 GtkNotebook 笔记本构件 是互相重叠的页面集合 每一页都包含不同的信 息 且一次只有一个页面是可见的 该构件在GUI 图形用户接口 编程中很常用 要说明大量的相关信息 同时把它们分别显示时 使用这种构件是一个很好的 方法 许多应用程序的 选项 对话框都使用了这个构件 用下面的函数可以 创建新笔记本构件 GtkWidget gtk notebook new void 向笔记本构件中添加页面 主要有两种方法 而且非常相似的 如下 在笔记本构件中追加页面 void gtk notebook append page GtkNotebook notebook GtkWidget child GtkWidget tab label 在笔记本构件中前插页面 void gtk notebook prepend page GtkNotebook notebook GtkWidget child GtkWidget tab label 其中child参数是放在笔记本构件上的子构件 tab label是要添加的页面 的标签 子构件必须分别创建 一般是一个容器构件 比如说表格构件 7 分栏列表构件 GtkCList 分栏列表构件 是GtkList 列表构件 的替代品 但它提供更多的 特性 分栏列表构件是多列列表构件 它有能力处理数千行的信息 每一列都 可以有一个标题 而且可以是活动的 还可以将函数绑定到列选择上 创建GtkClist构件的方法和创建其他构件的方法类似 因为GtkCList可以 有多列 因而在创建它之前 必须确定要创建的列表的列数 创建分栏列表的 函数 GtkWidget gtk clist new gint columns GtkWidget gtk clist new with titles gint columns gchar titles 创建列表后 需要向构件中添加一些要显示和操作的数据 用下面的函数 可以向列表中添加一些数据行 gint gtk clist prepend GtkCList clist gchar text 第 6 页 共 33 页 gint gtk clist append GtkCList clist gchar text 用下面的函数可以删除一些数据行 void gtk clist remove GtkCList clist gint row 与其他构件一样 GtkCList有一些信号供我们使用 GtkCList构件是从容 器构件GtkContainer派生的 它有容器所具有的一些信号 还有下面这些附加 信号 select row 选中一行时引发 该信号传递信息 依次是GtkCList clist gint row gint column GtkEventButton event unselect row 用户对一行取消选择 引发这个信号 传递的信息与上一 个信号一样 click column 选中某一列时引发 传递信息 依次是 GtkCList clist gint column 所以 要将一个回调函数连接到select row信号上 回 调函数应该像下面这样 void select row callback GtkWidget widget gint row gint column GdkEventButton event gpointer data 回调函数用下面的形式连接到信号 gtk signal connect GTK OBJECT clist select row GTK SIGNAL FUNC select row callback NULL 以上只是简单介绍了本课题在客户端界面编写的时候可用到的GTK库函数 但实际的GTK比上面的操作还要复杂得多 3 3LinuxLinux 系统调用系统调用 3 13 1 LinuxLinux 系统系统文件文件 在 Linux 中最主要的资源就是文件 很多设备都是以文件形式存在的 所 以大多数输入 输出都要通过文件读写来实现 也就是说通过一个单一的接口就 可以处理外围设备和程序之间的通信 Linux 文件类型常见的有 普通文件 目录 字符设备文件 块设备文件 符号链接文件等 很多系统服务和应用服 务的配置文件都是以普通文件的形式存在 这些文件很容易通过 Linux 的系统 调用来配置和修改 也可以用文档文件的修改方式来修改 3 23 2 如何从文件中读取数据如何从文件中读取数据 Linux 文件读取有两种方法 一种是通过 C 语言的标准库函数调用来完成 另一种是通过对 Linux 的系统调用来完成 文件读取分 3 步完成 第一步是打 开要读取的文件 第二步是把文件读取到内存中去 第三步是关闭打开的文件 第 7 页 共 33 页 在 Linux 中打开一个文件可以通过系统调用 open 函数来实现 int fd open char name int how 其中参数 name 是要打开的函数名字 how 是打开的方式 返回值 1 为错误 成功就返回一个文件描述符 Linux 系统读取文件内容通过系统调用 read 函数来实现 函数原形 ssize t numread read int fd void buff size t qty 第 1 个参数是打开的文件描述符 第 2 个参数是存储文件数据的内存地址 第 3 个参数是读取数据大小 如果读取成功返回值是读取的字节数 失败就返 回 1 系统调用 write 函数将内存中的数据写入到文件中去 函数原形 ssize t resut write int fd void buff zize t amt 这个系统将调用 buff 的数据写到文件中 第 1 个参数是打开的文件描述符 第 2 个参数是要写入文件数据的内存地址 第 3 个参数是写入文件的大小 进程不需要再对文件进行读写操作时 就要关系文件打开的文件 close 能关闭打开的文件 其函数原形 int result close int fd 这个系统调用会关闭进程和文件之间的连接 参数是打开的文件描述符号 关闭成功返回 0 失败返回 1 3 33 3 进程和线程的使用进程和线程的使用 1 Linux 进程 Linux 进程创建很特别 很多其他操作都提供了产生进程的机制 在新的 进程空间中创建进程 读取可执行文件 但是 Linux 不同 它创建的子进程具 有和父进程相同的数据 代码段 父进程和子进程间的区别就是进程的 pid 不 同 其他的都一样 pid t result fork void 该函数比较特殊 它返回两次函数值 一次返回值是向父进程返回子进程 的 PID 还有一次是返回 0 子进程 在使用 fork 函数创建进程的时候经常父进程等待子进程结束 系统调用 wait 2 Linux 线程 进程为线程提供了运行环境 多个函数可以同时运行 但是他们都是运行 第 8 页 共 33 页 在相同的进程中的 pthread cearte 函数可以创建一个线程 int pthread ceate pthread t thread pthread attr t attr void func void void arg 4 4基本的套接口编程基本的套接口编程 4 14 1 概述概述 让同一网络的不同计算机的进程能够相互通信 首先要确定这些程序如何 进行通信 本课题所用的协议是 TCP IP 协议 如果客户和服务器处于同一以太 网 如图 1 所示 图 1 网络示意图 4 24 2 简单的简单的网络编程网络编程 1 socket 函数 socket 函数功能是创建一个套接口描述符 并且指定希望的通信协议 使 用 IPV4 的 TCP 或者使用 IPV6 的 UPD 等 int socket int family int type int protocol 其中 family 参数指明协议族 type 参数指明套接口类型 protocol 参数 为某个协议的常数 函数调用成功时候返回一个非负的描述符 2 connect 函数 TCP 客户程序用 connect 函数来发起和 TCP 服务程序的连接 这个函数通 常是在客户程序中使用 int connect int sockfd const sgruct sockaddr servaddr socklen t addrlen 应用层协议 客户应用程序服务器应用程序 TCPTCP IP IP 以太网驱动 以太网驱动 以太网驱动 TCP 协议 IP 协议 以太网协议 第 9 页 共 33 页 sockfd 是有 socket 函数返回的一个套接口描述符 第 2 个和第 3 个参数 分别是一个指向套接口地址结构指针和结构的大小 当函数调用成功的时候返 回 0 出错就返回 1 3 bind 函数 该函数是把一个本地协议地址赋予一个套接口 对于网际协议 协议地址 是一个 32 位的 IPV4 地址和一个 16 位的 TCP 端口号的组合 int bind int sockfd const struct aockaddr myadd socklen t addrlen 第 2 个参数是一个指向特定协议的地址结构的指针 第 3 个参数是该地址 结构的长度 调用成功返回 0 错误返回 1 4 listen 函数 listen 函数只能由 TCP 服务器调用 他完成两件事 一是当 socket 函数创建一个套接口时它是一个主动的套接口 该函数就是 把它转换成一个被动的套接口 二是该函数规定了为相应套接口排队的最大的连接个数 int listen int sockfd int backlog 本函数通常都是在调用 socket 和 bind 这两个函数之后 5 accept 函数 int accept int sockfd struct sockaddr cliaddr socklen t addrlen 参数 cliaddr 和 addrlen 用来返回已经连接的客户端的协议地址 函数返 回值为一个非负的描述符表示成功 出错为 1 这里需要指出的是参数的描述符为监听套接口 就是在等待连接的时候还 没有建立连接的套接口 而返回值是连接的新的套接口 也就是能和客户端通 信的套接口 区分这两个东西是很重要的 6 close 函数 套接口编程通常都需要一个 close 函数来关闭套接口 来中断 TCP 的连接 int close int sockfd 7 send 函数 当连接建立了后自然就需要数据的传送和接收 send 函数是用来想连接 的另外一端发送数据 int send int sockfd void buf int len int flags 第 1 个参数是已经连接的套接口的描述符 第 2 个参数是发送的数据的内 存地址 第 3 个参数是发送数据的大小 第 4 个参数是选项 第 10 页 共 33 页 8 recv 函数 数据发送到接收端了后 就可以用 recv 函数来接收由发送端发送过来的 数据了 int recv int sockfd void buf int len int flags 第 1 个参数是已经连接的套接口的描述符 第 2 个参数是发送的数据的内 存地址 第 3 个参数是发送数据的大小 第 4 个参数是选项 5 5程序设计和流程图程序设计和流程图 5 15 1 设计思路设计思路 本课题是采用 C S 模式 客户程序功能是界面的编写 并和服务程序通信 采用 GTK 编写界面 采用 Sock 编程实现通信 服务器程序功能是接收客户程序 的数据 并且通过收到的数据来完成系统或应用服务程序文件的配置 在 Linux 中服务配置文件主要是以文本文件的形式存在的 所以通过 Linux 系统 调用很容易修改配置文件 流程如图 2 图 2 程序总体流程 5 25 2 服务程序服务程序 5 2 15 2 1 流程设计流程设计 服务程序功能有两个 一是监听端口 接收数据和向客户程序发送数据 二是根据客户程序发送过来的数据对文件修改 其流程图如图 3 所示 图 3 显示了服务程序的流程 accept 是监听端口 等待客户程序的连接 连接建立好后 init clinet 函数从配置文件读取服务器的当前配置文件数据 然后再发送到客户程序 让客户程序通过这些数据来初始化界面 然后再接收 客户程序的数据 流程控制字符串 通过判断字符串来控制服务程序的流程 处理 请求 否 是 初始化数据 退出 连接不成功 main 连接界面 输入服务器 IP 建立连接 TCP3 次握手 用户主界面 用户操作 等待连接 TCP 接口 退出 TCP 接口 结束 结束 连接 成功 第 11 页 共 33 页 图 3 中的虚线部分 第 12 页 共 33 页 图 3 服务程序的流程图 5 2 25 2 2 功能模块功能模块 1 系统用户管理操作 和客户程序建立了连接 并且收到了 user 字符串后 服务程序进入系统用 户管理操作模块 接着接收客户程序发送过来的数据 字符串 通过数据来判 断是对用户的添加 删除 浏览或修改操作 接收到了 adduser 字符串就进 入添加用户流程 接收到 deluser 字符串就进入删除用户流程 接收到 scanuser 字符串就进入了浏览用户流程 接收到 property 字符串就进 入到了修改用户流程 系统用户管理操作流程如图 4 所示 dnsconfig vsftpcon group control InitAction Net DNS Config Apache Config Ftp Config sysconfigapachecongroup 程序入口 sock bind listen accep t 一直阻塞到 客户连接到 达 连接建立 TCP3 次握 手 init clinet user recv 对字符 判断 exit close user control 字符串 判断处理 第 13 页 共 33 页 图 4 用户操作流程 对用户的操作是添加 删除和修改用户 Linux 用户都是记录在 把 temp 的数据 fputs 到文件 退出用户操作到 图 3 的 recv exit adduser scauser property fclose fopen 把 temp 中的数 据 fputs 到文 件中 fputs str fopen 是 否 否 是 把 temp 中的数 据 fputs 到文 件中 把读取数据 存到 2 维数 组 temp中 把 str 存到 2 维 数组 temp 中 fclose fopen 相同 接收的字 符和读取 字符 不同 否 为空 把读取数据存 到 2 维数组 temp 中 fopen fget 为空 fopen 把接受的数 据格式化存 储在字符串 str 中 fclose 把接受的数 据格式化存 储在字符串 str 中 fopen fget user control recv 字符 recv recv recv fopen fget send fget 为空 相同 把读取数据存 到 2 维数组 temp 中 接收的字 符和读取 字符 不同 第 14 页 共 33 页 etc passwd 文件中 对用户添加 删除和修改都是通过修改 etc passwd 文件 来实现 etc passwd 的用户都是按照统一存格式来存储 格式举例如下 terrycheops x 500 500 terrycheop home terrycheops bin bash 存储中每个字段都用 隔开的 第一字段 用户名 也被称为登录名 在上面的例子中 我们看到用户的用户名是terrycheops 第二字段 口令 在 例子中我们看到的是一个x 其实密码已被映射到 etc shadow 文件中 第三字 段 用户的ID 第四字段 用户组的ID 第五字段 用户名全称 可选项 第 六字段 用户的家目录所在位置 该用户的是 home terrycheops 第七字段 用户所用Shell的类型 一般设置为 bin bash 程序进入到了添加用户后 接收客户程序传过来要添加的用户信息 用户名 密码 全名 把客户程序发送过来的用户密码用 MD5 算法加密 把加密后的密 码和用户其他数据按照 etc passwd 的格式复制到字符串变量 str 中 用 C 语 言的流的读操作打开文件 etc passwd 读取 etc passwd 中的每一行 把每次 读取的数据都复制到二维数组 temp 中 关闭文件 再以写的形式打开文件 然后把上面二维数组 temp 的内容写到文件中 最后再把变量 str 写到文件中 这样就实现了用户的添加 程序进入到了删除用户流程后 接收客户程序要删除用户的用户名 用 C 中流的操作打开文件 etc passwd 判断读取的数据 当要删除的用户名和读取 的用户名一致时就不把这个用户信息复制到二维数组 temp 读取用户名和删 除用户名不一样就把读取数据复制到 temp 中 然后关闭这个流 重新以写文件 的操作打开文件 etc passwd 然后把二维数组 temp 中的数据的以流的形式在 写入到文件 etc passwd 中 这样就实现了用户的删除 用户修改过程 接收客户程序发送过来的数据后 把接收的数据格式化复 制到 str 中 以 C 语言中流的操作打开并且读取文件 etc passwd 的数据 判断 读取的数据 当要修改的用户名和读取的用户名一致时把 str 数据复制到二维 数组 temp 读取用户名和修改的用户名不一致时就把读取数据复制到 temp 中 然后关闭这个流 重新以写文件的操作打开文件 etc passwd 然后把二维数组 temp 中的数据以流的形式再写入到文件 etc passwd 中 这样就完成了修改 用户的操作 当进入浏览用户的流程后 打开 etc passwd 文件 把文件的数据读取到 buff 中 再关闭文件 把 buff 的数据发送的到客户程序 让客户程序显示当 前的用户信息 2 系统用户组的操作 用户组 Group 配置文件主要有 etc group 和 etc gshadow 其中 第 15 页 共 33 页 etc gshadow 是 etc group 的加密信息文件 etc group 文件是用户组的配置 文件 内容包括用户和用户组 并且能显示出用户是归属哪个用户组或哪几个 用户组 因为一个用户可以归属一个或多个不同的用户组 同一用户组的用户 之间具有相似的特征 对组的操作都是通过修改 etc group 来实现的 主要是 对组的添加删除和修改 进入到组添加流程后 接收客户端发送过来要添加的组的信息 然后把接 收的数据格式按照 etc group 存储格式格式化后复制到 str 中 然后打开文件 etc group 读取文件中组的数据复制到二维数组 temp 中 关闭文件 在打开 文件 etc group 把 temp 的数据写到文件中去 最后把 str 写入到文件中 关 闭文件 这样就实现了组的添加 组的删除过程 读取客户程序发送过来的数据 然后打开 etc group 文件 读取文件的数据 当读取的数据和发送过来的组名一样 就不把读取数据复制 到二维数组 temp 中 其它都把读取的数据复制到 temp 中 关闭打开的文件 再次打开文件 etc group 把 temp 的数据都写到文件中 关闭文件 这样就完 成组的删除操作 组的修改过程 接收客户端发送过来要添加组的信息 然后把接收的数据 格式按照 etc group 存储格式格式化后存复制到 str 变量中 然后打开 etc group 文件 读取文件的数据 当读取的数据和发送过来的组名一样 就 把 str 复制到 temp 中 其它都把读取的数据复制到 temp 中 关闭打开的文件 再次打开文件 etc group 把 temp 的数据都写到文件中 关闭文件 这样就完 成组的修改操作 浏览组的过程 当程序到了浏览组的流程后 打开 etc group 文件 把文 件的数据读取到 buff 中 再关闭文件 把 buff 的数据发送的到客户程序 让 客户程序显示当前的用户信息 用户组操作的流程如图 5 所示 第 16 页 共 33 页 图 5 组操作流程 3 系统服务启动管理 系统服务启动管理和其他的操作不大一样 其他的操作是通过修改配置文 fopen fget 把读取数据存 到 2 维数组 temp 中 为空 fopen exit groupadd groupsca n group control recv 字符 recv recv property 把接收的数 据格式化存 储在字符串 str 中 fclose fopen 把 temp 中的数 据 fputs 到文 件中 fputs str fopen fget 为空 相同 把读取数据存 到 2 维数组 temp 中 接收和读 取字的符 不同 是 否 否 是 fclose 把 temp 中的数 据 fputs 到文 件中 recv 把接收的数 据格式化存 储在字符串 str 中 fopen 把读取数据 存到 2 维数 组 temp 中 fget 把 str 存到 2 维 数组 temp 中 fclose fopen 把 temp 中的数 据 fputs 到文 件中 相同 接收和读 取的字符不同 否 为空 是 fopen fget send 退出组的操作到 图 3 的 recv 函 数 第 17 页 共 33 页 件来实现的 而系统服务的启动是通过添加和删除链接文件来完成的 其流程 如图 6 所示 图 6 系统启动服务管理流程 服务程序进入到图 3 的 InitAction 函数就进入了系统服务启动管理流程 接收客户程序发送过来的数据 这里发送过来的是一个有 5 个字符串的数组 InitAction recv 第 1 个 字符 1 0 link etc init d named etc rc d rc5 d S11named unlink etc rc d rc5 d S11name d 第 2 个 字符 1 0 link etc init d httpd etc rc d rc5 d S85httpd unlink etc rc d rc5 d S85http d 第 3 个 字符 1 0 link etc init d sendmail etc rc d rc5 d S80sendmail unlink etc rc d rc5 d S80sendmail 第 4 个 字符 1 0 link etc init d dhcp etc rc d rc5 d S65dhcpd unlink etc rc d rc5 d S65dhcpd 第 5 个 字符 1 0 link etc init d smb etc rc d rc5 d S91smb unlink etc rc d rc5 d S91smb 退出系统启动 服务管理到图 3 的 recv 第 18 页 共 33 页 判断字符串的第 1 个字符 如果是 1 的话就调用系统调用 link 把 etc init d named shell 脚本链接为 etc rc d rc5 d S11named 文件 如果 字符是 0 就调用 unlink 取消 etc rc d rc5 d S11named 文件的链接 然后再 判断第 2 个字符 是 1 就把 etc init d http shell 文件链接为 etc rc d rc5 d S85httpd 文件 如果第 2 个字符是 0 就取消文件 etc rc d rc5 d S85httpd 的链接 然后判断第 3 个字符 是 1 就调用系统 linnk 函数把 etc init d sendmail 链接到 etc rc d rc5 d S80sendmail 是 0 就取消对 etc rc d rc5 d S80sendmail 的链接 然后就判断第 4 个字符 的值 如果是 1 话就把 etc init d dhcp hell 脚本链接为文件 etc rc d rc5 d S65dhcpd 是 0 就取消对 etc rc d rc5 d S65dhcpd 的链接 最后再判断第 5 个字符 是 1 就把文件 etc init d smb 为文件 etc rc d rc5 d S91smb 否则就取消对 etc rc d rc5 d S91smb 的链接 4 DNS 管理操作 图 3 的程序流程到 Net DNS Config 函数就进入 DNS 功能模块了 该模块 主要是为在 DNS 中添加和删除 zone 在 zone 中添加和删除 domain 进入该模 块后 服务程序会接收一个客户程序发送的数据 该数据用来控制 DNS 模块的 流程 其流程如图 7 所示 图 7 DNS 流程图 添加 zone 操作先接收客户程序发送过来的数据 要添加的 zone 名字和类型 通过 zone 的名字加入点格式后在判断配置文件中有没有 zone 存在 如果存在 退出系统启动 服务管理到图 3 的 recv 字符 Net DNS Config recv addzone delzonel addtozone delinzone 删除 domain 操作 添加 zone 操作 删除 zone 操作 删除 domain 操作 退出系统启动 服务管理到图 3 的 recv 退出系统启动 服务管理到图 3 的 recv 退出系统启动 服务管理到图 3 的 recv 第 19 页 共 33 页 就发送一个 zone name is exist 字符串到客户端 退出 DNS 配置 不存在 再把 zone 字和类型格式化为 var named chroot etc named conf 中 zone 存储 格式 然后把格式化后的数据存储到配置文件中 存储成功后发送 zone add succseed 到客户程序 删除 zone 操作先接收客户程序发送过来的数据 要删除的 zone 名 判断 配置文件中是否有发送过来 zone 名存在 如果没有就向客户发送 zone name is not exist 字符串 如果有就读取配置文件的数据到内存 buff 中 再把 buff 内存中的数据删除要删除的部分 然后再把 buff 中的数据写入到配置文 件中 写入成功后发送 zone delete succsed 字符串到客户程序 添加 domian 操作先接收客户程序发送过来的数据 要添加的 domain 名 IP 和 zone 名 然后判断 var named chroot etc named conf 中是否有这个 zone 存在 没有就发送 zone name is not exist 到客户程序 如果有就得到其 数据文件名字 然后把 domian 和 IP 格式化后写入到数据文件中 删除 domain 操作先接收客户程序发送的数据 要删除的 domain 和 zone 然后判断 var named chroot etc named conf 中是否有这个 zone 存在 如果 没有就发送 zone name is not exist 到客
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度山西省高校教师资格证之高等教育心理学通关考试题库带答案解析
- 2024年观光型酒店项目资金需求报告代可行性研究报告
- 2023年中级安全工程师《安全生产技术基础》考试真题(试题及答案)
- 水利水电工程管理与实务一级建造师考试试题及答案指导(2024年)
- 2024年度家居油漆翻新工程承包协议
- 2024年员工保密义务协议精简
- 2024年家居装修垃圾处理协议
- 2024年土地抵押融资协议样本
- 2024年叉车操作工劳动协议
- 2024年繁华街区门面房销售协议
- 《深化运用监督执纪“第一种形态”实施细则(试行)》测试题【附答案】
- 新媒体视听节目制作 第八章 剪辑的法则
- 张晓风散文自选集
- 环境、社会与公司治理(ESG)
- 餐饮行业初期投资预算分析
- A12.工程初验终验报审表
- 新探索研究生英语(基础级)读写教程参考答案Language-focus
- 工程管理基础知识
- 酥性饼干成型机棍印饼干成型机安全操作及保养规程
- 跨境电商交际英语(修订版) 课件 UNIT-1-Visiting-an-E-shop
- 相对湿度与露点对照表
评论
0/150
提交评论