Linux操作系统安全问题浅析摘要:在计算机技术飞速发展的今天,人们的学习、工作和生活与计算机联系得越来越紧密,与之相应的计算机安全性问题也被提到了前所未有的高度。
随着具有开源特性的Linux 操作系统的广泛应用,Linux操作系统在计算机安全策略中不但是一个易于移植程序的平台,而且是一个构建和运行程序的平台。
Linux是一类Unix计算机操作系统的统称,Linux 操作系统是自由软件和开放源代码发展中最为经典的案例。
Linux这个词本身只表示Linux 内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。
Linux是一个可以自由分发的操作系统,它包括内核、系统工具、应用程序,以及完整的开发环境。
本文针对Linux操作系统,通过总结和归纳Linux 操作系统其中的共性以及特点,在技术性能和应用安装性能方面提出一些安全策略。
关键词:Linux操作系统;安全策略;计算机技术;安全性问题1、Linux操作系统概述1.1 Linux的诞生和发展Linux和UNIX有密切的联系。
UNIX能成为世界范围内最有影响的操作系统之一,是由于它有庞大的支持基础和发行系统。
当初UNIX是作为小型机和大型机上的多任务操作系统而开发的,很快就发展成为广泛使用的操作系统[1]。
Linux系统是由芬兰赫尔辛基大学的Linux Torvalds先生于1991年开始开发的,Linux系统的开发得到了全世界的UNIX程序员和爱好者的帮助。
他们借助Internet参与Linux系统的开发。
Linux系统的核心部分是全新的代码,没有使用有专利的代码。
Linux操作系统是UNIX的一种典型的克隆系统。
在Linux诞生之后,借助于Internet 网络,在全世界计算机爱好者的共同努力下,成为目前世界上使用者最多的一种类似UNIX 的操作系统。
在Linux操作系统的诞生、成长和发展过程中,以下5个方面起到了重要的作用:UNIX操作系统、Minix操作系统、GNU计划、POSIX标准和Internet网络[2]。
1.2 Linux的系统架构Linux系统从应用角度来看,分为内核空间和用户空间两个部分。
内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。
丰富并且功能强大的应用程序包是一个操作系统成功的必要条件[3]。
1.2.1 Linux内核的主要模块Linux的内核主要由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。
(1) 进程调度SCHED进程调度指的是系统对进程的多种状态之间转换的策略。
Linux下的进程调度有3种策略:SCHED_OTHER、SCHED_FIFO和SCHED_RR。
SCHED_OTHER是用于针对普通进程的时间片轮转调度策略。
这种策略中,系统给所有的运行状态的进程分配时间片。
在当前进程的时间片用完之后,系统从进程中优先级最高的进程中选择进程运行。
SCHED_FIFO是针对运行的实时性要求比较高、运行时间短的进程调度策略。
这种策略中,系统按照进入队列的先后进行进程的调度,在没有更高优先级进程到来或者当前进程没有因为等待资源而阻塞的情况下,会一直运行。
SCHED_RR是针对实时性要求比较高、运行时间比较长的进程调度策略。
这种策略与SCHED_OTHER的策略类似,只不过SCHED_RR进程的优先级要高得多。
系统分配给SCHED_RR进程时间片,然后轮循运行这些进程,将时间片用完的进程放入队列的末尾。
由于存在多种调度方式,Linux进程调度采用的是“有条件可剥夺”的调度方式。
普通进程中采用的是SCHED_OTHER的时间片轮循方式,实时进程可以剥夺普通进程。
如果普通进程在用户空间运行,则普通进程立即停止运行,将资源让给实时进程;如果普通进程运行在内核空间,需要等系统调用返回用户空间后方可剥夺资源。
(2)内存管理MMU内存管理是多个进程间的内存共享策略。
在Linux系统中,内存管理的主要概念是虚拟内存。
虚拟内存可以让进程拥有比实际物理内存更大的内存,可以是实际内存的很多倍。
每个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。
虚拟内存的分配策略是每个进程都可以公平地使用虚拟内存。
虚拟内存的大小通常设置为物理内存的两倍。
(3)虚拟文件系统VFS在Linux下支持多种文件系统,如ext、ext2、minix、umsdos、msdos、vfat、ntfs、proc、smb、ncp、iso9660、sysv、hpfs、affs等。
目前Linux下最常用的文件格式是ext2和ext3。
ext2文件系统用于固定文件系统和可活动文件系统,是ext文件系统的扩展。
ext3文件系统是在ext2上增加日志功能后的扩展,它兼容ext2。
两种文件系统之间可以互相转换,ext2不用格式化就可以转换为ext3文件系统,而ext3文件系统转换为ext2文件系统也不会丢失数据。
(4)网络接口Linux是在Internet飞速发展的时期成长起来的,所以Linux支持多种网络接口和协议。
网络接口分为网络协议和驱动程序,网络协议是一种网络传输的通信标准,而网络驱动则是对硬件设备的驱动程序。
Linux支持的网络设备多种多样,几乎目前所有网络设备都有驱动程序[4]。
(5)进程间通信Linux操作系统支持多进程,进程之间需要进行数据的交流才能完成控制、协同工作等功能,Linux的进程间通信是从UNIX系统继承过来的。
Linux下的进程间通信方式主要有管道方式、信号方式、消息队列方式、共享内存和套接字等方法。
1.2.2 Linux的文件结构与Windows下的文件组织结构不同,Linux不使用磁盘分区符号来访问文件系统,而是将整个文件系统表示成树状的结构,Linux系统每增加一个文件系统都会将其加入到这个树中[5]。
操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。
所有一切都从“根”开始,用“/”代表,并且延伸到子目录。
DOS/Windows下文件系统按照磁盘分区的概念分类,目录都存于分区上。
Linux则通过“挂接”的方式把所有分区都放置在“根”下各个目录里。
一个Linux系统的文件结构如图1.1所示。
ux 图1.1 Lin文件系统不同的Linux发行版本的目录结构和具体的实现功能存在一些细微的差别。
但是主要的功能都是一致的。
一些常用目录的作用如下:/etc:包括绝大多数Linux系统引导所需要的配置文件,系统引导时读取配置文件,按照配置文件的选项进行不同情况的启动,例如fstab、host.conf等。
/lib:包含C编译程序需要的函数库,是一组二进制文件,例如glibc等。
/usr:包括所有其他内容,如src、local。
Linux的内核就在/usr/src中。
其下有子目录/bin,存放所有安装语言的命令,如gcc、perl等。
/var:包含系统定义表,以便在系统运行改变时可以只备份该目录,如cache。
/tmp:用于临时性的存储。
/bin:大多数命令存放在这里。
/home:主要存放用户账号,并且可以支持ftp的用户管理。
系统管理员增加用户时,系统在home目录下创建与用户同名的目录,此目录下一般默认有Desktop目录。
/dev:这个目录下存放一种设备文件的特殊文件,如fd0、had等。
/mnt:在Linux系统中,它是专门给外挂的文件系统使用的,里面有两个文件cdrom、floopy,登录光驱、软驱时要用到。
刚开始使用Linux的人比较容易混淆的是Linux下使用斜杠“/”,而在DOS/Windows下使用的是反斜杠“\”。
例如在Linux中,由于从UNIX集成的关系,路径用“/usr/src/Linux”表示,而在Windows下则用“\usr\src\Linux”表示。
在Linux下更加普遍的问题是大小写敏感,这样字母的大小写十分重要,例如文件Hello.c和文件hello.c在Linux下不是一个文件,而在Windows下则表示同一个文件[6][7]。
1.3Linux的特点Linux操作系统在短短的几年之内便得到了非常迅猛的发展,这与Linux具有的良好特性是分不开的。
Linux包含UNIX的全部功能和特性[8]。
简单地说,Linux具有以下主要特性:1.多用户多用户是指系统资源可以被不同用户各自拥有和使用,即每个用户对自己的资源(如文件、设备)有特定的权限,互不影响。
Linux和UNIX都具有多用户的特性。
2.多任务多任务是现代计算机操作系统的最主要的一个特点。
它是指计算机同时执行多个程序,而且各个程序的运行互相独立。
Linux系统调度每一个进程平等地访问处理器(CPU)。
由于CPU的处理速度非常快,从处理器执行一个应用程序中的一组指令到Linux调度处理器再次运行这个程序之间只有很短的时间延迟,用户是感觉不出来的,因而启动的应用程序看起来好像在并行运行。
3.良好的用户界面Linux向用户提供了两种界面:用户界面和系统调用。
Linux的传统用户界面是基于文本的命令行界面,即shell,它既可以联机使用,又可存储在文件上脱机使用。
shell有很强的程序设计能力,用户可方便地用它编制程序,从而为用户扩充系统功能提供了更高级的手段。
可编程shell是指将多条命令组合在一起,形成一个shell程序,这个程序可以单独运行,也可以与其他程序同时运行。
Linux还为用户提供了图形用户界面,利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强、友好的图形化界面。
4.设备独立性设备独立性是指操作系统把所有外部设备统一视为文件,只要安装它们的驱动程序,任何用户都可以像使用文件一样操纵、使用这些设备,而不必知道它们的具体存在形式。
具有设备独立性的操作系统通过把每一个外围设备看做一个独立文件来简化增加新设备的工作。
当需要增加新设备时,系统管理员在内核中增加必要的连接。
这种连接(也称做设备驱动程序)保证每次调用设备提供服务时,内核以相同的方式来处理它们。
当新的或更好的外设被开发并交付给用户时,只要这些设备连接到内核,就能不受限制地立即访问它们。
设备独立性的关键在于内核的适应能力。
其他操作系统只允许一定数量或一定种类的外部设备连接,而具有设备独立性的操作系统能够容纳任意种类及任意数量的设备,因为每一个设备都是通过其与内核的专用连接独立进行访问的。
Linux是具有设备独立性的操作系统,它的内核具有高度适应能力,随着更多的程序员利用Linux编程,会有更多的硬件设备加入到各种Linux内核和发行版本中。
另外,由于用户可以免费得到Linux的内核源代码,因此,用户也可以修改内核源代码,以便适应新增加的外部设备。