[其它课程]第7章Linux基础编程amp网络安全.ppt

上传人:sccc 文档编号:4953852 上传时间:2023-05-25 格式:PPT 页数:73 大小:3.57MB
返回 下载 相关 举报
[其它课程]第7章Linux基础编程amp网络安全.ppt_第1页
第1页 / 共73页
[其它课程]第7章Linux基础编程amp网络安全.ppt_第2页
第2页 / 共73页
[其它课程]第7章Linux基础编程amp网络安全.ppt_第3页
第3页 / 共73页
[其它课程]第7章Linux基础编程amp网络安全.ppt_第4页
第4页 / 共73页
[其它课程]第7章Linux基础编程amp网络安全.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《[其它课程]第7章Linux基础编程amp网络安全.ppt》由会员分享,可在线阅读,更多相关《[其它课程]第7章Linux基础编程amp网络安全.ppt(73页珍藏版)》请在三一办公上搜索。

1、第7章 Linux程序设计基础,7.1 概述,7.1.1 Linux编程 Linux软件开发一直在Internet环境下讲行。这个环境是全球性的,编程人员来自世界各地。只要能够访问Web站点,就可以启动一个以Linux为基础的软件项目。Linux开发工作经常是在Linux用户决定共同完成一个项目时开始的。当开发工作完成后,该软件就被放到Internet站点上,任何用户都可以访问和下载它。由于这个活跃的开发环境,新的以Linux为基础的软件功能日益强大,而且呈现爆炸式的增长态势。大多数Linux软件是经过自由软件基金会(Free Software Foundation)提供的GNU(GNU 即

2、GNUs not UNIX)公开认证授权的,因而通常被称作GNU软件。GNU软件免费提供给用户使用,并被证明是非常可靠和高效的。许多流行的Linux实用程序如C编译器、shell和编辑器都是GNU软件应用程序。,Linux程序需要首先转化为低级机器语言即所谓的二进制代码以后,才能被操作系统执行。例如编程时,先用普通的编程语言生成一系列指令,这些指令可被翻译为适当的可执行应用程序的二进制代码。这个翻译过程可由解释器一步步来完成,或者也可以立即由编译器明确地完成。shell编程语言如BASH、TCSH、GAWK、Perl、Tcl和Tk都利用自己的解释器。用这些语言编制的程序尽管是应用程序文件,但可

3、以直接运行。编译器则不同,它将生成一个独立的二进制代码文件然后才可以运行。,1GNU风格(1)函数返回类型说明和函数名分两行放置,函数起始字符和函数开头左花括号放到最左边。(2)尽量不要让两个不同优先级的操作符出现在相同的对齐方式中,应该附加额外的括号使得代码缩进可以表示出嵌套。(3)按照如下方式排版do-while语句:(4)每个程序都应该以一段简短的说明其功能的注释开头。(5)请为每个函数书写注释,说明函数是做什么的,需要哪些入口参数,参数可能值的含义和用途。如果用了非常见的、非标准的东西,或者可能导致函数不能工作的任何可能的值,应该进行特殊说明。如果存在重要的返回值,也需要说明。(6)不

4、要声明多个变量时跨行,每一行都以一个新的声明开头。(7)当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。(8)要在同一个声明中同时说明结构标识和变量或者结构标识和类型定义(typedef)。先定义变量,再使用。,7.1.2 Linux编程风格,(9)尽量避免在if的条件中进行赋值。(10)请在名字中使用下划线以分割单词,尽量使用小写;把大写字母留给宏和枚举常量,以及根据统一惯例使用的前缀。例如,应该使用类似ignore_space_change_flag的名字;不要使用类似iCantReadThis的名字。(11)用于表明一个命令行选项是否给出的变量应该在选项含义的

5、说明之后,而不是选项字符之后被命名。2Linux 内核编程风格(1)Linux内核缩进风格是8个字符。(2)Linux内核风格采用K&R标准,将开始的大括号放在一行的最后,而将结束的大括号放在一行的第一位。(3)命名尽量简洁。不应该使用诸如ThisVariableIsATemporaryCounter之类的名字。应该命名为tmp,这样容易书写,也不难理解。但是命名全局变量,就应该用描述性命名方式,例如应该命名“count_active_users()”,而不是“cntusr()”。本地变量应该避免过长。,(4)函数最好短小精悍,一般来说不要让函数的参数多于个,否则应该尝试分解这个过于复杂的函数

6、。(5)通常情况,注释说明代码的功能,而不是其实现原理。避免把注释插到函数体内,而写到函数前面,说明其功能,如果这个函数的确很复杂,其中需要有部分注释,可以写些简短的注释来说明那些重要的部分,但是不能过多。7.2 IDE使用 7.2.1 VIM编辑器 1VIM的简介 VI是Linux世界里最常用的全屏编辑器,所有的Linux机器都提供该编辑器,而Linux里提供的是VI的加强版VIM,但同VI是完全兼容。VI的原意是“visual interface”,即可视编辑器,用户键入的内容会立即被显示出来、而且其强大的编辑功能可以同任何一种最新的编辑器相媲美。它在Linux上的地位就仿佛Edit程序在

7、DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据需要对其进行定制,这是其他编辑程序所没有的。VI不是一个排版程序,不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。,2VIM 的基本观念 VIM有三种操作方式,分别是:命令方式插入方式命令行方式 3VIM的进入与离开 在系统提示符“$”下键入命令VIM,后面跟上想要编辑(或者建立)的文件名,VIM 可以自动载入所要编辑的文件或是开启一个新文件。VIM的退出,可以在命令行方式下使用命令“:wq”或者“:q!”,前者的功能是写文件并从VIM中退出,后者的功能是从VIM中退

8、出,但不保存所作的修改(注意冒号)。,7.2.2 emacs的简介 emacs文本编辑器可以用来编辑文本、剪辑和粘贴文本内容、提供个人日历和日记,阅读Usenet新闻、发送电子邮件,同时还是一种程序语言解释器,可以编辑C、Lisp、Tev源代码文件、以及Linux的Shell。在编辑文件时,如果用户在编辑一些特殊类型的文件,例如当用户编辑扩展名为.c的C语言文件时,emacs会产生菜单选项c,向用户提供一些针对编辑c程序特别有用的一些命令。当用户编辑扩展名为.txt的文件则会多出菜单选项tex,让用户在编辑完tex文件后可以即时地观看输出并打印。,2emacs的启动和退出 emacs可以用两种

9、方法启动。第一种启动emacs的方法是不装载任何文本文件启动emacs,输入以下命令行:#emacs 在屏幕上会出现无任何文本emacs编辑窗口所示。,如果用户是初学者,最好的学习方法是:按下Ctrl-h键(即按住Ctrl键后不放,再按下h字母键),就会自动进入emacs的联机帮助,在屏幕底部emacs命令行中会出现一个提示符,这时再按下字母键t和回车键,便进入了简捷有效的emacs文本编辑器的教程。参照此教程的步骤,用户将对如何使用emacs有个概括的了解。,第二种启动emacs的方法是通过装载某一个文本文件启动emacs,输入以下命令行:#emacs filename如果装载的文件不在当前

10、目录时必须输入该文件名的全称(包括所在目录)。例如,当前目录下有一个文本文件myfile.txt,用emacs对其编辑时,输入命令行启动emacs:#emacs myfile.txt屏幕上将出现emacs编辑窗口。,7.2.3 使用Kdevelop开发C程序,1Kdevelop的简介Kdevelop是一套功能强大的集成开发环境,其整合了开发程序所需的编译器、连接器、除错工具、版本控制工具等,可以用Kdevelop快速地建立各式各样的应用程序。,2启动Kdevelop,如果是第一次使用Kdevelop,Kdevelop会先启动“Kdevelop设置”进行Kdevelop的环境设定,共需要完成9个

11、步骤的设置工作。,单击“Kdevelop设置”欢迎画面对话框中的【下一步】按钮开始进行Kdevelop的设定。“Kdevelop设置”的第二项设定为“选择语法高亮风格”,这里选择缺省的“Kdevelop 2.0 风格”。,选择喜欢的语法高亮表示风格后,单击【下一步】按钮进入“用户交换界面模式”的选择窗口。,同样选择好用户交换界面模式后,单击【下一步】按钮进入“Kdevelop中所使用的工具检测窗口”。,单击“工具程序检测窗口”对话框中的【下一步】按钮,进行下一个步骤。下一个步骤为“寻找Qt文档”,并设定文件路径,一般而言这个步骤应该会成功完成,将见到对话框。,单击“寻找Qt文档”对话框之中的【

12、下一步】按钮,进入下一个步骤。下一个步骤为“寻找KDE程序库文件”,同样,一般而言这个步骤也应该会成功完成。再缺省完成两步以后,Kdevelop设置将显示“安装过程成功完成”的对话框,此为Kdevelop设置的最后步骤,单击【下一步】按钮,稍待一会Kdevelop便会启动。,3新建一个新项目,在Kdevelop中开发C程序,需要用创建项目的方式进行。请执行“项目/新建”命令,打开应用程序向导对话框。,选择要创建程序的种类,这里选择C程序,然后单击【下一步】按钮进行下一步骤。下一个步骤为关于项目资讯的设定,在此输入项目的名称、目录、版本号码、作者姓名、以及作者电子邮件地址。,单击【创建】按钮开始

13、产生项目档案,此处可能会看到一些警告信息,但是一般而言并不影响项目的建立。,4修改项目,创建项目后,在Kdevelop窗口的左边选择源程序,开始编写程序。Kdevelop会将程序加上一些默认的内容,可视需求自行修改。,5项目的编译与执行,写好程序后,执行“建立-编译”命令进行程序的编译。如果程序没有出错,将看到Kdevelop下方的信息框之中显示编译成功的信息。,接着便可以执行应用程序了,执行“建立-执行”命令进行程序的连接。若没有发生问题,就会在另一个窗口中看到程序的执行结果。,7.3 使用GNU cc开发应用程序,7.3.1 使用GNU cc,1gcc的简介,gcc可以使程序员灵活地控制编

14、译过程。编译过程一般可以分为下面四个阶段,每个阶段分别调用不同的工具进行处理,如图9-18所示。,2gcc的版本信息,一般来说,系统安装后就已经安装和设定好了gcc。在shell的提示符下键入gcc v,屏幕上就会显示出目前正在使用的gcc的版本,同时这可以确定系统所支持的是ELF还是a.out可执行文件格式。,Linux系统中可执行文件有两种格式。第一种格式是a.out格式,这种格式用于早期的Linux系统以及 Unix系统的原始格式。a.out来自于Unix C编译程序默认的可执行文件名。当使用共享库时,a.out格式就会发生问题。把a.out格式调整为共享库是一种非常复杂的操作,由于这个

15、原因,一种新的文件格式被引入Unix系统5的第四版本和Solaris系统中。它被称为可执行和连接的格式(ELF)。这种格式很容易实现共享库。ELF格式已经被Linux系统作为标准的格式采用。gcc编译程序产生的所有的二进制文件都是ELF格式的文件(即使可执行文件的默认名仍然是a.out)。较旧的a.out格式的程序仍然可以运行在支持ELF格式的系统上。,3gcc的使用,gcc的使用格式如下:$gcc optionsfilenames其中filenames为所要编译的程序源文件。当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三步分别生成目标文件,连接时,把生成的目标文件链接成可执行文件

16、。gcc可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别。,4使用优化选项,当用gcc编译C代码时,它会试着用最少的时间完成编译并且使编译后的代码易于调试.易于调试意味着编译后的代码与源代码有同样的执行次序,编译后的代码没有经过优化。有很多选项可用于告诉gcc,在耗费更多编译时间和牺牲易调试性的基础上,产生更小更快的可执行文件。这些选项中最典型的是-O和-O2选项。-O选项告诉gcc对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。-O2选项告诉gcc产生尽可能小和尽可能快的代码。-O2选项将使编译的速度比使用-O 时慢。但通常产生的代码执行速度会更快。,5

17、使用调试和剖析选项,GCC 支持数种调试和剖析选项。在这些选项里最常用的是-g和-pg选项。-g选项告诉gcc产生能被GNU调试器使用的调试信息以便调试程序。gcc 提供了一个很多其他C编译器里没有的特性,在gcc里能使-g和-O(产生优化代码)连用。这一点非常有用,因为能在与最终产品尽可能相近的情况下调试代码。同时使用这两个选项时必须清楚所写的某些代码已经在优化时被gcc作了改动。-pg选项告诉gcc在程序里加入额外的代码,执行时,产生gprof用的剖析信息以显示程序的耗时情况。,7.3.2使用GNU make编辑makefile,1准备工作,要使用make,必须编写一个叫做Makefile

18、的文件,这个文件描述了软件包中文件之间的关系,提供更新每个文件的命令。一般在一个软件包里,通常是可执行文件靠目标文件来更新,目标文件靠编译源文件来更新。Makefile写好之后,每次改变了某些源文件,只要执行make命令:#make 所有必要的重新编译将执行。Make程序利用makefile中的数据和每个文件的最后修改时间来确定那个文件需要更新,对于需要更新的文件,make程序执行makefile数据中定义的命令来更新。,2makefile文件的基本结构,GNU make的主要功能是读进一个文本文件makefile并根据makefile的内容执行一系列的工作。makefile的默认文件名为GN

19、Umakefile、makefile或Makefile,当然也可以在make的命令行中指定别的文件名。如果不特别指定,make命令在执行时将按顺序查找默认的makefile文件。多数Linux程序员使用第三种文件名Makefile。因为第一个字母是大写,通常被列在一个目录的文件列表的最前面。,Makefile是一个文本形式的数据库文件,其中包含一些规则来告诉make处理哪些文件以及如何处理这些文件。这些规则主要是描述哪些文件(称为target目标文件,不要和编译时产生的目标文件相混淆)是从哪些别的文件(称为dependency依赖文件)中产生的,以及用什么命令(command)来执行这个过程。

20、依靠这些信息,make会对磁盘上的文件进行检查,如果目标文件的生成或被改动时的时间(称为该文件时间戳)至少比它的一个依赖文件还旧的话,make就执行相应的命令,以更新目标文件。目标文件不一定是最后的可执行文件,可以是任何一个中间文件并可以作为其他目标文件的依赖文件。一个Makefile文件主要含有一系列的规则,每条规则包含以下内容。一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。一系列命今(command),是make执行的动作,通常是

21、把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符。,除非特别指定,否则make的工作目录就是当前目录。target是需要创建的二进制文件或目标文件,dependency是在创建target时需要用到的一个或多个文件的列表,命令序列是创建target文件所需要执行的步骤,比如编译命令。Makefile规则的一般形式如下:target:dependency dependency(tab),例如,有以下的Makefile文件:#一个简单的Makefile的例子#以#开头的为注释行test:prog.o code.ogcc o test prog.o c

22、ode.oprog.o:prog.c prog.h code.hgcc c prog.c o prog.ocode.o:code.c code.hgcc c code.c o code.oclean:rm f*.o,上面的Makefile文件中共定义了四个目标:test、prog.o、code.o和clean。目标从每行的最左边开始写,后面跟一个冒号(:),如果有与这个目标有依赖性的其他目标或文件,把它们列在冒号后面,并以空格隔开。然后另起一行开始写实现这个目标的一组命令。在Makefile中,可使用续行号()将一个单独的命令行延续成几行。但要注意在续行号()后面不能跟任何字符(包括空格和键)

23、。一般情况下,调用make命令可输入:#make targettarget是Makefile文件中定义的目标之一,如果省略target,make就将生成Makefile文件中定义的第一个目标。对于上面Makefile的例子,单独的一个“make”命令等价于:#make test 因为test是Makefile文件中定义的第一个目标,make首先将其读入,然后从第一行开始执行,把第一个目标test作为它的最终目标,所有后面的目标的更新都会影响到test的更新。第一条规则说明只要文件test的时间戳比文件prog.o或code.o中的任何一个旧,下一行的编译命令将会被执行。,但是,在检查文件pro

24、g.o和code.o的时间戳之前,make会在下面的行中寻找以prog.o和code.o为目标的规则,在第三行中找到了关于prog.o的规则,该文件的依赖文件是prog.c、prog.h和code.h。同样,make会在后面的规则行中继续查找这些依赖文件的规则,如果找不到,则开始检查这些依赖文件的时间戳,如果这些文件中任何一个的时间戳比prog.o的新,make将执行“gcc c prog.c o prog.o”命令,更新prog.o文件。以同样的方法,接下来对文件code.o做类似的检查,依赖文件是code.c和code.h。当make执行完所有这些套嵌的规则后,make将处理最顶层的tes

25、t规则。如果关于prog.o和code.o的两个规则中的任何一个被执行,至少其中一个.o目标文件就会比test新,那么就要执行test规则中的命令,因此make去执行gcc命令将prog.o和code.o连接成目标文件test。在上面Makefile的例子中,还定义了一个目标clean,它是Makefile中常用的一种专用目标,即删除所有的目标模块。现在来看一下make做的工作:首先make按顺序读取makefile中的规则,然后检查该规则中的依赖文件与目标文件的时间戳哪个更新,如果目标文件的时问戳比依赖文件还早,就按规则中定义的命令更新目标文件。如果该规则中的依赖文件又是其他规则中的目标文件

26、,那么依照规则链不断执行这个过程,直到Makefile文件的结束,至少可以找到一个不是规则生成的最终依赖文件,获得此文件的时间戳,然后从下到上依照规则链执行目标文件的时间戳比此文件时间戳旧的规则,直到最顶层的规则。,通过以上的分析过程,可以看到make的优点,因为.o目标文件依赖.c源文件,源码文件里一个简单改变都会造成那个文件被重新编译,并根据规则链依次由下到上执行编译过程,直到最终的可执行文件被重新连接。例如,当改变一个头文件的时候,由于所有的依赖关系都在Makefile里,因此不再需要记住依赖此头文件的所有源码文件,make可以自动的重新编译所有那些因依赖这个头文件而改变了的源码文件,如

27、果需要,再进行重新连接。,3Makefile中的变量,Makefile里的变量就像一个环境变量。事实上,环境变量在make中也被解释成make的变量。这些变量对大小写敏感,一般使用大写宇母。几乎可以从任何地方引用定义的变量,变量的主要作用如下:保存文件名列表。在前面的例子里,作为依赖文件的一些目标文件名出现在可执行文件的规则中,而在这个规则的命令行里同样包含这些文件并传递给gcc做为命令参数。如果使用一个变量来保存所有的目标文件名,则可以方便地加入新的目标文件而且不易出错。保存可执行命令名,如编译器。在不同的Linux系统中存在着很多相似的编译器 系统,这些系统在某些地方会有细微的差别,如果项

28、目被用在一个非gcc的系统 里,则必须将所有出现编译器名的地方改成用新的编译器名。但是如果使用一个变量来代替编译器名,那么只需要改变该变量的值。其他所有地方的命令名就都改变了。,保存编译器的参数。在很多源代码编译时,gcc需要很长的参数选项,在很多情况下,所有的编译命令使用一组相同的选项,如果把这组选项使用一个变量代表,那么可以把这个变量放在所有引用编译器的地方。当要改变选项的时候,只需改变一次这个变量的内容即可。,Makefile中的变量是用一个文本串在Makefile中定义的,这个文本串就是变量的值。只要在一行的开始写下这个变量的名字,后面跟一个“”号,以及要设定这个变量的值即可定义变量,

29、下面是定义变量的语法:VARNAME=string使用时,把变量用括号括起来,并在前面加上$符号,就可以引用变量的值:$VARNAME,make解释规则时,VARNAME在等式右端展开为定义它的字符串。变量一般都在Makefile的头部定义。按照惯例,所有的Makefile变量都应该是大写。如果变量的值发生变化,就只需要在一个地方修改,从而简化了Makefile的维护。,现在利用变量把前面的Makefile重写一遍:OBJS=prog.o code.oCC=gcctest:$OBJS$CC o test$OBJS prog.o:prog.c prog.h code.h$CC c prog.c

30、o prog.ocode.o:code.c code.h$CC c code.c o code.oclean:rm f*.o,除用户自定义的变量外,make还允许使用环境变量、自动变量和预定义变量。使用环境变量的方法很简单,在make启动时,make读取系统当前已定义的环境变量,并且创建与之同名同值的变量,因此用户可以像在shell中一样在Makefile中方便的引用环境变量。需要注意的是,如果用户在Makefile中定义了同名的变量,用户自定义变量将覆盖同名的环境变量。此外,Makefile中还有一些预定义变量和自动变量,但是看起来并不像自定义变量那样直观。表9-3中给出了常见的自动变量。,

31、除了自动变量外,Makefile中还有一些预定义的内部变量,用于定义编译命令名、编译参数等,如表9-4所示:,4Makefile的隐含规则,在上面的例子中,几个产生目标文件的命令都是从“.c”的C语言源文件和相关文件通过编译产生“.o”目标文件,这也是一般的步骤。实际上,make可以使工作更加自动化,也就是说,make知道一些默认的动作,它有一些称作隐含规则的内置的规则,这些规则告诉make当用户没有完整地给出某些命令的时候,应该怎样执行。例如,把生成prog.o和code.o的命令从规则中删除,make将会查找隐含规则,然后会找到并执行一个适当的命令。由于这些命令会使用一些变量,因此可以通过

32、改变这些变量来定制make。象在前面的例子中所定义的那样,make使用变量CC来定义编译器,并且传递变量CFLAGS(编译器参数)、CPPFLAGS(C语言预处理器参数)、TARGET_ARCH(目标机器的结构定义)给编译器,然后加上参数-c,后面跟变量$(第一个依赖文件名),然后是参数-o加变量$(目标文件名)。综上所述,一个C编译的具体命令将会是:$CC$CFLAGS$CPPFLAGS$TARGET_ARCH c$-o$,在上面的例子中,利用隐含规则,可以简化为:OBJS=prog.o code.oCC=gcctest:$OBJS$CC o$prog.o:prog.c prog.h cod

33、e.hcode.o:code.c code.hclean:rm f*.o,5、常用的make命令行选项,make命令有丰富的命令行选项。表9-5中列出了常用的部分。,7.3.3 使用automake和autoconf产生Makefile,在开始使用Automake和autoconf之前,请先确认系统已经安装以下的软件:GNU Automake GNU Autoconf GNU m4 Perl GNU Libtool(如果你需要产生 shared library),Automake 所产生的 Makefile 除了可以做到程序的编译和连接,也已经把如何产生程序文件的操作,以及把安装程序都考虑进去

34、了,所以源程序所存放的目录架构最好符合GNU的标准惯例,下面用hello.c 来作为例子进行说明。在工作目录下建立一个新的子目录devel,再在devel下建立一个hello的子目录,这个目录将作为存放 hello 这个程序及其相关文件的地方:,用编辑器写个hello.c文件:#include int main(int argc,char*argv)printf(Hello,GNU!n);return 0;接下来就要使用 Autoconf 及 Automake 来产生Makefile文件,步骤如下:(1)autoscan 产生一个configure.in的模板,执行 autoscan 后会产生

35、一个configure.scan 的文件,可以用它做为configure.in文件的模板:(2)编辑configure.scan文件,如下所示,并且把文件名改成configure.in(3)执行aclocal和autoconf,分别会产生 aclocal.m4 及 configure 两个文件:(4)编辑Makefile.am文件,内容如下:(5)执行automake-add-missing,Automake 会根据 Makefile.am产生一些文件,包含最重要的Makefile.in:,(6)最后执行./configure:现在你的目录下已经产生了一个Makefile文件,执行make命令

36、就可以开始编译hello.c 成执行文件,最后执行./hello:#makegcc-DPACKAGE=hello-DVERSION=1.0-I.-I.-g-O2-c hello.cgcc-g-O2-o hello hello.o#./helloHello!GNU!,第8章 网络安全,8.1 计算机网络安全基础知识,8.1.1 网络安全的含义,网络安全从其本质上来讲就是网络上的信息安全,其所涉及的领域相当广泛。这是因为在目前的公用通信网络中存在着各种各样的安全漏洞和威胁。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论,都是网络安全所要研究的领域。下面给出

37、网络安全的一个通用定义:网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。因此,网络安全在不同的环境和应用中会得到不同的解释。(1)运行系统安全,即保证信息处理和传输系统的安全。包括计算机系统机房环境的保护,法律、政策的保护,计算机结构设计上的安全性考虑,硬件系统的可靠安全运行,计算机操作系统和应用软件的安全,数据库系统的安全,电磁信息泄露的防护等。它侧重于保证系统正常的运行,避免因为系统的崩溃和损坏而对系统存储、处理和传输的信息造成破坏和损失,避免由与电磁泄漏,产生信息泄露,干扰他人(或受他人干扰

38、),本质上是保护系统的合法操作和正常运行。,(2)网络上系统信息的安全。包括用户口令鉴别、用户存取权限控制、数据存取权限、方式控制、安全审计、安全问题跟踪、计算机病毒防治、数据加密等。(3)网络上信息传播的安全,即信息传播后的安全。包括信息过滤等。它侧重于防止和控制非法、有害的信息进行传播后的后果。避免公用通信网络上大量自由传输的信息失控。它本质上是维护道德、法律或国家利益。(4)网络上信息内容的安全,即讨论的狭义的“信息安全”。它侧重于保护信息的保密性、真实性和完整性。避免攻击者利用系统的安全漏洞进行窃听、冒充和诈骗等有损于合法用户的行为。它本质上是保护用户的利益和隐私。计算机网络安全的含义

39、是通过各种计算机、网络、密码技术和信息安全技术,保护在公用通信网络中传输、交换和存储信息的机密性、完整性和真实性,并对信息的传播及内容具有控制能力。网络安全的结构层次包括:物理安全、安全控制和安全服务。可见,计算机网络安全主要是从保护网络用户的角度来进行的,是针对攻击和破译等人为因素所造成的对网络安全的威胁。而不涉及网络可靠性、信息的可控性、可用性和互操作性等领域。,8.1.2 网络安全的特征,网络安全应具有以下四个方面的特征:(1)保密性是指信息不泄露给非授权的用户、实体或过程,或供其利用的特性。(2)完整性是指数据未经授权不能进行改变的特性,即信息在存储或传输过程中保持不被修改、不被破坏和

40、丢失的特性。(3)可用性是指可被授权实体访问并按需求使用的特性,即当需要时应能存取所需的信息。网络环境下拒绝服务、破坏网络和有关系统的正常运行等都属于对可用性的攻击。(4)可控性是指对信息的传播及内容具有控制能力。,8.1.3 对网络安全的威胁,与网络连通性相关的有三种不同类型的安全威胁:(1)非授权访问(Unauthorized Access)指一个非授权用户的入侵。(2)信息泄露(Disclosure of Information)指造成将有价值的和高度机密的信息暴露给无权访问该信息的人的所有问题。(3)拒绝服务(Denial of Service)指使系统难以或不能继续执行任务的所有问题

41、。,8.1.4 网络安全的关键技术,从广义上讲,计算机网络安全技术主要有:(1)主机安全技术:(2)身份认证技术:(3)访问控制技术:(4)密码技术:(5)防火墙技术:(6)安全审计技术:(7)安全管理技术:,8.1.5 Linux系统的网络安全策略,1简介,随着InternetIntranet网络的日益普及,采用Linux网络操作系统作为服务器的用户也越来越多,这一方面是因为Linux是开放源代码的免费正版软件,另一方面也是因为较之微软的Windows NT网络操作系统而言,Linux系统具有更好的稳定性、效率性和安全性。在InternetIntranet的大量应用中,网络本身的安全面临着重

42、大的挑战,随之而来的信息安全问题也日益突出。以美国为例,据美国联邦调查局(FBI)公布的统计数据,美国每年因网络安全问题所造成的经济损失高达75亿美元,而全球平均每20秒钟就发生一起Internet计算机黑客侵入事件。一般认为,计算机网络系统的安全威胁主要来自黑客攻击和计算机病毒2个方面。那么黑客攻击为什么能够经常得逞呢?主要原因是很多人,尤其是很多网络管理员没有起码的网络安全防范意识,没有针对所用的网络操作系统,采取有效的安全策略和安全机制,给黑客以可乘之机。由于网络操作系统是用于管理计算机网络中的各种软硬件资源,实现资源共享,并为整个网络中的用户提供服务,保证网络系统正常运行的一种系统软件

43、。如何确保网络操作系统的安全,是网络安全的根本所在。只有网络操作系统安全可靠,才能保证整个网络的安全。因此,详细分析Linux系统的安全机制,找出可能存在的安全隐患,给出相应的安全策略和保护措施是十分必要的。,2Linux网络操作系统的基本安全机制,Linux网络操作系统提供了用户帐号、文件系统权限和系统日志文件等基本安全机制,如果这些安全机制配置不当,就会使系统存在一定的安全隐患。因此,网络系统管理员必须小心地设置这些安全机制。(1)Linux系统的用户帐号(2)Linux的文件系统权限(3)合理利用Linux的日志文件,3Linux网络系统可能受到的攻击和安全防范策略,Linux操作系统是

44、一种公开源码的操作系统,因此比较容易受到来自底层的攻击,系统管理员一定要有安全防范意识,对系统采取一定的安全措施,这样才能提高Linux系统的安全性。对于系统管理员来讲特别是要搞清楚对Linux网络系统可能的攻击方法,并采取必要的措施保护系统。(1)Linux网络系统可能受到的攻击类型“拒绝服务”攻击、“口令破解”攻击、“欺骗用户”攻击、“扫描程序和网络监听”攻击。,(2)Linux网络安全防范策略 仔细设置每个内部用户的权限、确保用户口令文件/etc/shadow的安全、加强对系统运行的监控和记录、合理划分子网和设置防火墙、定期对Linux网络进行安全检查、制定适当的数据备份计划确保系统万无

45、一失。,4加强对Linux网络服务器的管理,合理使用各种工具,(1)利用记录工具,记录对Linux系统的访问(2)慎用Telnet服务(3)合理设置NFS服务和NIS服务(4)小心配置FTP服务(5)合理设置POP-3和Sendmail等电子邮件服务(6)加强对WWW服务器的管理,提供安全的WWW服务(7)最好禁止提供finger 服务,8.1.6 Linux网络安全工具,1sudo,sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果用户需要每天以root身份做一些日常工作,经常执行固定的几个只有root身份才能执行的命令,

46、那么用sudo是非常适合的。下面以Redhat 9.0为例,介绍sudo的安装及设置过程:一般情况下,Redhat 9.0中都已经缺省安装了当前较新的版本sudo-1.6.6-3。如果你的系统中没有安装,你能从下面的地址中下载for Redhat Linux的rpm package。ftp:/ftp.rediris.es/sites/-ivh sudo*进行安装,然后用/usr/sbin/visudo编辑/etc/sudoers文件。sudoers这个文件是由一个选择性的主机别名(hostalias)节区,一个选择性的指令别名(commandalias)节区以及使用者说明(userspecif

47、ication)节区所组成的。所有的指令别名或主机别名必须需以自己的关键字作为开始(Host_Alias/Cmnd_Alias)。,使用者说明节区格式:使用者接取群组:接取群组.接取群组:=主机象征=op指令象征,op指令象征.主机象征:=一个小写的主机名称或主机别名。指令象征:=一个指令或指令别名。op:=逻辑的!否定运算元。主机别名节区格式:Host_Alias主机别名=主机列表Host_Alias:=这是一个关键字。主机别名:=一个大写的别名。主机列表:=以逗号间隔的一些主机名称。指令别名节区格式:Cmnd_Alias指令别名=指令列表Cmnd_Alias:=这是一个关键字。指令别名:=

48、一个大写的别名。指令列表:=以逗号间隔的一些指令。,所有在“#”符号后面的文字都会被当作是注解。太长的行可以使用倒斜线“”字符来分成新的行。保留的别名“ALL”在“Host,Cmnd_Alias”里都可以使用。不要用“ALL”来定义一个别名,这个别名无效。注意到“ALL”暗示全部的主机和指令。可以使用这个语法从整个范围中减掉一些项目:userhost=ALL,!ALIAS1,!/etc/halt.,2Sniffit,sniffit 是一个有名的网络端口探测器,可以配置它在后台运行,以检测哪些TCP/IP端口上用户的输入/输出信息。最常用的功能是可以用它来检测系统的23(telnet)和110(

49、pop3)端口上的数据传送以轻松得到系统的登录口令和mail帐号密码,当然,sniffit基本上是被破坏者所利用的工具。sniffit 的主页在 http:/reptile.rug.ac.be/coder/sniffit/sniffit.html用户能从那里下载最新的版本,用户在根目录运行:#tar xvfz sniff*,解开所有文件到对应目录后,先仔细阅读其中的README.FIRST文件,可能有些版本需要预先进行编译才能使用。用户能运行sniffit-i以交互式图形界面查看所有在指定网络接口上的输入/输出信息。例如:为了得到所有用户通过某接口a.b.c.d接收邮件时所输入的pop3帐号和

50、密码,用户能运行:#sniffit-p 110-t a.b.c.d&#sniffit-p 110-s a.b.c.d&记录文件放在目录/usr/doc/sniffit*下面:log file根据访问者的IP地址,随机用高端端口号和用来检测的网络接口IP地址和检测端口来命名。它利用了TCP/IP协议天生的虚弱性,因为普通的telnet和pop3所传的用户名和密码信息都是明文,不带任何方式的加密。因此对telnet/ftp,可以用ssh/scp来替代。sniffit检测到的ssh/scp信息基本上是一堆乱码,因此不需要担心ssh所传送的用户名和口令信息会被第三方所窃取。,3、nmap,nmap 是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号