前言:中文期刊网精心挑选了linux系统范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。
linux系统范文1
关键词:虚拟文件系统;内存技术设备;日志文件系统
中图分类号:TP316 文献标识码:A
嵌入式产品已经渗透到人们生活的方方面面,特别是在数字信息技术和网络技术高速发展的今天,手持信息产品正拓展着一片越来越大的市场。PDA、手机、掌上电脑、信息家电等各式手持产品已拥有了庞大的用户群。手持信息产品所运用的最关键的核心技术就是嵌入式操作系统。linux以其开源的内核和免费的应用程序、能够自由地移植和开发的优势,更迎合了嵌入式市场的需求。
嵌入式Linux的开发大致可分为三个层次:引导装载内核、构造文件系统和图形用户界面。作为操作系统重要组成部分的文件系统,它决定了操作系统本身的信息和用户的数据在存储设备上的组织形式。对嵌入式文件系统的研究、设计和开发也逐渐成为嵌入式系统研究领域的一个方向。
1 嵌入式Linux文件系统
1.1 简介
文件系统是指在一个物理设备上的任何文件组织和目录,它构成了Linux系统上所有数据的基础。Linux程序、库、系统文件和用户文件都驻留其中,因此它是系统中庞大复杂且又是最为基本和重要的资源。值得提出的是,Linux系统中的文件不仅包括普通的文件和目录,每个和设备相关的实际实体也都被映射为一个文件,例如磁盘、打印机、终端等。这样的设备文件又称为特殊文件。所以,Linux下的文件是操作系统服务和设备的简单而又统一的接口。从某种意义上可以说,Linux里的一切事物都是文件。
在Linux中,文件系统的结构是基于树状的,根在顶部,各个目录和文件从树根向下分支。
目录树的最顶端被称为根目录(/)。在后面介绍的所构造文件系统结构图(图1)即显示了树状的文件系统。Linux操作系统由一些目录和许多文件组成。
由于Linux是一个多任务、多用户的操作系统,因此它里面的文件还都被赋予了一定的权限,来决定谁能读、写或执行一个文件,以及这个文件的类型和如何执行。例如下面的文件列表:
-rw-r-r- 1 root root 1756 Sep 9 2005 inittab
其表示:这个名为inittab的文件是普通文件;所有者有读写的权限;所在组和其他人都只有读的权限;它的连接数为1;所有者及文件所属的组都是root 文件中字节数为1756;文件创建日期是2005年9月9日。可以通过对文件属性的设置,来满足文件在不同用户组、不同用户操作下的不同状态。
1.2 特点
由于嵌入式设备的一些特殊性,使得嵌入式文件系统除了满足一般文件系统的基本要求外,还有一些自身的特性:文件系统面对的存储介质特殊;文件系统有快速恢复的特殊要求;物理文件系统的多样性和动态可装配性;需要文件系统具有跨操作平台的安全性;文件系统要能满足整个系统的实时性要求。
2 文件系统的设计
2.1 实验主机和目标平台的连接
实验主机和目标平台的连接有两种方法:一种是以太网连接,这种连接方式可以进行内核文件、根文件系统映像文件的下载;另一种是串口连接,这样的连接方式可以供调试之用。
2.2 构建文件系统
构造基本目录首先建立一个文件系统的工作空间。创建目录/home/work,所构造的文件系统就在work这个目录中。建立基本目录,如bin、dev、etc、lib、mnt、proc、sbin、tmp、usr、vat、tools。具体结构见图l。
其中,tools是便于开发而创建的目录。因为整个系统要求尽量小,所以应只包含一些必须的二进制程序。开发过程中需要用到的命令就放在tools中。/etc目录下只包含了一些启动过程的配置文件。/ l i b 目录下的modules子目录包含了可动态加载到核心的各种模块。另外,目录var下还应创建两个子目录log和run,负责记录系统的日志和运行状态。整个文件系统中除了tmp和var 目录放在SDRAM内以外,其他所有目录都放在Flash中,因为trap和var中的内容需要经常写入,所以放在可读写的RAM里。 当在目标平台实现了一个嵌入式Linux之后,为了很好地管理操作系统和用户的数据文件,引入了文件系统。物理文件系统是JFFS2,考虑到扩充物理文件系统的要求,保留了Linux的VFS层次。考虑到存储设备扩充的要求,在Linux内核中加入了对MTD设备的支持。根据上面的叙述,可给出整个文件系统的体系结构图,如图2所示。
构建文件系统最基本的要求就是系统能够在此基础上启动运行起来,所以,/sbin下的init程序必不可少。init程序是引导过程完成后内核运行的第一个程序,它能启动全部其他程序。只要init完成运行全部必要的程序,该系统就开始建立并开始运行。当程序开始启动时,init读取一个配置文件inittab,这个文件位于/etc下,它确定了init在启动和关机时的工作特性。在开发的这个嵌入式系统中,所有的文件内容只需保留与开发要求有关的必须部分。所以inittab的内容根据需要重新写入。
这个系统运行单用户模式启动,启动后立即运行rc.sysinit脚本,进行系统初始化动作。rc.sysinit脚本也进行了精简,只保留了以读写的方式重新加载(mount)根文件系统的操作(内核启动时只以只读的方式加载了根文件系统)。具体rc.sysinit脚本中的内容如下:
# Remount the root filesystem read-write
# mount -n -o remount.rw /mount -o remount.rw -n /dev/mtdblock2/mount -a
为了在开发过程中让用户与系统能进行交互需要,启动/bin/bash 这个命令解释器。用户在键盘上输入某些命令,bash将读取输入加以解析然后执行该程序。/tools中的telnetd和/sbin中的pppd分别是远程登陆和串口通讯的后台程序,加入它们也是为了方便开发。另外,为了尽量精简内核,程序都以动态链接库文件的方式编译,即当程序运行到所需库文件时才动态加载。为确保运行各种程序都能在/lib目录中找到合适的库文件,就干脆对/lib中的库文件不作任何删减,而完整的/lib目录(含子目录及全部库文件)也不过2MB大小。
2.3 进一步开发
按照上一部份给出的文件系统体系结构,文件系统的实现主要在VFS层、物理文件系统层和MTD层。下面给出在MTD层Linux的源代码做的一些修改,同时介绍JFFS2物理文件系统映像文件的生成。
3 支持MTD设备
对MTD设备的支持要经过配置内核、编写设备驱动程序和建立MTD设备这几个步骤。
第一步,配置内核参数。选中Memory Technology Devices(MTD)support,下面的子项中至少要选择MTD partitioning support、Direct Char device access to M TD devices和Caching block device access to MTD devices这三项。其他的有关NFTL、CFI的支持根据需要选取。
第二步,编写针对目标平台Flash设备的MTD驱动程序,主要实现创建MTD 分区和删除MTD分区的函数。创建分区的流程见图3所示。删除分区的函数比较简单,如果存在MTD分区,就调用del_mtd_partitions(struct mtd info*)删除分区,并且删除为MTD设备创建的映射表。
第三步,将修改过的MTD驱动文件作为内核文件的补丁,并给内核文件打上这个补丁, 最后,编译生成内核文件。
第四步,使用mknod命令建立MTD设备。mknod命令的格式如下:
mknodc 90 //MTD字符设备
mknodb 31 //MTD块设备
4 网卡设置方法
首先需要Linux kernel 2.6.1+,其次需要在编译内核的时候选上CONFIG_NET_RADIO。
安装hostap-driver:
tar zxvf hostap-driver-0.1.3.tar.gz
cd hostap-driver-0.1.3
然后,用任意编辑器打开该目录下的Makefile文件,将第三行的KERNEL_PATH=加上你的内核source地址,保存。
然后Make
make install
接下来,先加载sysfs。修改/etc/fstab,加一行none /sys sysfs defaults 0 0。
在/etc/sysconfig/network-scripts/下建立一个ifcfg-eth1文件,内容如下:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Wireless
WIRELESS_ENC_KEY=“你的WEP加密字符串”
WIRELESS_ESSID=“AP网络名”
WIRELESS_CHANNEL=“”
WIRELESS_MODE=“”
这样就行了,其他的参数应该会自动从服务端获取。除了enc,还有几个常用的参数,essid mode channel nick,其他参数请用iwconfig-help或者man iwconfig查看。
启动你的无线网卡,需要启动hostap和ipw2100这两个模块。找到/etc/modprobe.preload
在文件的最后依此加上:hostapipw2100,保存后退出。
5 小结
我们构造了一个嵌入式版本的Linux文件系统,它使得内核在系统尽量精简的情况下能够运行起来,并满足产品和系统各方面的要求。在这个嵌入式文件系统中,引入了VFS的支持,虽然牺牲了一些空间,但是大大方便了今后各种物理文件系统的动态加载。
参考文献
[1]Karim Yaghmour著.韩存兵等译.构建嵌入式Linux系统[M].北京:中国电力出版社,2004.
[2]郑桦.嵌入式Linux文件系统的设汁与实现[M].武汉:武汉理工大学,2004.
linux系统范文2
关键词:Linux操作系统;安全策略;计算机技术;安全性问题
在计算机技术飞速发展的今天人们的学习、工作和生活与计算机联系得越来越紧密,与之相应的计算机安全性问题也被提到了前所未有的高度。随着具有开源特性的Linux操作系统的广泛应用,Linux操作系统在计算机安全策略中不但是一个易于移植程序的平台,而且是一个构建和运行程序的平台。本文针对Linux操作系统,通过总结和归纳Linux操作系统其中的共性,在技术性能和应用安装性能方面提出一些安全策略。
1、Linux操作系统编程安全模型设计
Linux操作系统是面向多用户的,在同一时间可以有许多用户向操作系统发出各种系统命令,在现代的操作系统里面都有编程安全的概念,编程程序是一个包含可以执行代码的文件,当编程程序被系统调用到内存以后,系统会给程序分配一定的资源,然后进行一系列的复杂操作使程序变成进程以供系统调用。在Linux操作系统里面为了区分各个不同的进程,Linux操作系统给每一个进程分配了一个ID以便识别,为了充分的利用资源,Linux操作系统还对编程进行了安全模型的设计。
1.1严格权限禁止非法切换,保障编程模型安全
在Linux中SU是一个很常用的命令,它可以完成从普通用户到root用户的切换也可以用于普通用户之间的切换,只要用户知道root密码就可以完成此项操作,使系统存在一定风险。因此,有必要限制使用SU进行用户切换,只有属于wheel组的用户才可以使用SU命令来切换用户。
SU命令限制是由PAM机制来限定的,PAM是由SUN提出的一种认证机制,它通过提供一系列动态链接库和一套统一的API,将系统提供的服务和认证方式分开。使得系统管理员可以灵活地根据服务需要配置不同的认证方式,同时也便于向系统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到Linux操作系统之中。
1.2 Linux信号系统安全策略访问控制模型
安全操作系统的访问控制模型,将密码服务与高级别存取控制机制有机地结合起来,形成一个适应各类安全实用的操作系统。该安全服务器将在Linux操作系统的基础上,目前Linux操作系统主要发行版本的安全性大致处于《TCSEC》标准, 该类模型是从访问控制的角度描述安全系统,主要针对系统中主体对客体的访问及其安全控制。
BLP模型的安全策略包括强制访问控制和自主访问控制两部分,强制访问控制中的安全特性,要求对给定安全级别的主体,对给定安全级别上的主体,仅被允许向相同安全级别或较高安全级别上的客体进行信息服务,任意访问控制允许用户自行定义是否让个人或组织存取数据;DTE模型它通过赋予文件不同的型(type)、赋予进程不同的域(domain)来进行访问控制,从一个域访问其他的域以及从一个域访问不同的型都要通过DTE策略的控制,DTE使域和每一个正在运行的进程相关联,型和每一个对象相关联,DTE 系统的内核在做标准的系统许可检查之前先做DTE许可检查,如果当前域拥有被访问文件所属的型所要求的访问权,那么这个访问得以批准,继续执行正常的系统检查。
2、安全策略科学化系统共享设计
随着Linux操作系统的广泛应用,它的安全性也越来越受到用户的关注。在实际的使用中用户希望Linux操作系统可以和360安全卫士等安装操作一样的简单、界面形象直观、易于管理。我们在应用Linux强大网络功能的同时,要同时着手于解决其安全性问题,在使用Linux操作系统时要将安全性、科学化的系统共享进行合理化的设计安装。
2.1合理规划实现多系统共存,创建使用库
在Linux操作系统的初步安装操作中用户可以先使用双硬盘,在硬盘中分别安装Windows和Linux操作系统。第一块硬盘安装Windows系统,第二块硬盘安装好Linux服务器版和默认安装GRUB(引导装载管理器),并确保GRUB安装在第二块硬盘的主引导扇区,接好两块硬盘的数据线,借助Linux的GRUB进行配置,自动接管双重系统的启动选单。
完成Linux系统的初步安装过程后,可以从一个静态库中直接拷贝函数到可执行二进制映像,或者在可执行程序正在运行时从共享库文件中读出,从而间接地应用到Linux操作系统之中。构建Linux系统数据库当多个进程同时使用一个共享库时,Linux将把共享库中存放可执行代码的内存进行共享。
2.2严谨系统操作,创建Linux操作系统编程安全策略
Linux操作要求在程序的应用中力求严谨、认真的态度,在系统的使用和运行时保证内部信息安全是设计系统安全的最为重要的核心部分。严谨的系统操作主要表现在隐藏文件夹的保护,在隐藏文件夹中如果有不想让别人直接看到的文件,最简单的办法就是对文件进行加密处理,也可以在终端通过MVTEST.TEST命令实现。“test”文件会出现在文件夹中但“.test”则不会出现,如果需要查看隐藏文件,就必须要在终端进入对应文件夹用Jsa命令查看,这样可以达到保护Linux系统内部隐藏文件的作用。
2.3设计密码保证Linux系统安全
无论是Linux系统的操作还是计算机的其他应用系统,密码是保证系统安全的第一道防线,因此在Linux系统的必须要有一个强健的密码设计。密码设置的原则是足够长不要用完整的单词,尽可能要包括数字、字母、特殊字符和大小写混写,经常进行修改,所以在Linux系统中必须要遵循以上原则外。
在此之外,启动和加载程序时,要尽量使用GRUB而不要使用LILO,这样可以防止使用被定制的内核来启动系统。此外Linux是一个多用户操作系统,为了保证系统安全,在登出和锁定屏幕的时候也是非常重要的,特别是在系统上是唯一用户时,建议锁定屏幕保证系统安全。在启动和加载程序时,ULO在配置文件中可以使用明文口令,这样可以防止使用被定制的内核来启动系统。
结语:本系统通过对Linux核心结构和操作系统安全体系的层次结构研究,并且遵循国内、外的相关安全标准,将Linux操作系统安全策略模型和已有技术有机地结合起来,增加了强制访问控制、可信路径等安全功能。Linux操作系统安全技术作为计算机信息安全的关键部分,对安全策略的研究和建模有重要意义,对Linux操作系统安全的研究在实际应用中还需要进一步地考验和完善。
参考文献:
[1]Michael K. Linux应用程序开发[M].电子工业出版社,2005.
linux系统范文3
关键词: Linux系统安全性能 非法黑客
中图分类号: TU714 文献标识码: A
一、Linux概述
Linux是免费使用和自由传播的类Unix操作系统,它是由全世界各地成千上万的程序员设计和实现的.其目的是建立不受任何商品化软件的版权制约的,全世界都能自由使用的Unix兼容产品.
Linux以它的高效性和灵活性著称.它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能力.Linux是在GNU公共许可权限下获得的,是一个符合POSIX(可移植操作系统接口规范)标准的操作系统.Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件.它还包括带有多个窗口管理器的X-Windows图形用户界面,同Windows一样,允许用户使用图形界面对系统进行操作,突破了只能使用命令行字符界面进行操作的局限。
二、Linux一般有四个主要部分:内核、Shell、文件系统和实用工具.
1Linux内核
内核是操作系统的核心部分,是运行程序和管理像磁盘和打印机等硬件设备的核心程序.操作系统的其余部分如Shell、实用工具等都是通过内核而起作用的.
2Linux Shell
Shell是系统的用户界面,是用户与内核进行交互操作的接口.Shell是一个命令解释器,它接收、解释由用户输入的命令并且把它们送到内核.不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果.
Linux提供T像Microsoft Windows那样的可视化的操作界面----X Window的图形用户界面(GUI).它提供了很多窗口管理器,其操作就象Microsoft Windows一样.
同Linux本身一样,Shell也有多种不同的版本.
每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的需要.
3 Linux文件系统
文件系统是文件存放在磁盘等存储设备上的组织方法.主要体现在对文件和目录的组织上.目录提供了管理文件的一个方便而有效的途径.
使用Linux,用户可以设置目录和文件的权限和共享程度,以便允许或拒绝其他人对其进行访问.Linux目录采用多级树形结构.用户可以浏览整个系统,可以进入任何一个己授权进入的目录,访问那里的文件.
文件系统的相互关联性使共享数据变得容易,几个用户可以访问同一个文件.Linux是一个多用户系统,操作系统本身的驻留程序存放在以根目录开始的专用目录中,有时被指定为系统目录.
内核,Shell和文件系统一起形成了基本的操作系统.用户可以运行程序,管理文件以及使用系统.此外,Linux操作系统还有许多被称为实用工具的程序,辅助用户完成一些特定的任务.
4 Linux实用工具
实用工具是能够完成特定功能的专门程序.标准的Linux都配备或多或少的实用工具.用户也可以开发自己的实用工具.
实用工具主要有三类:
过滤器:用于接收数据并过滤数据.
交互程序:允许用户发送信息或接收来自其他用户的信息.
四、关于Linux操作系统安全性的思考
1 从操作、使用、管理方面提高Linux的安全性问题
作为多用户的操作系统,Linux允许多个用户同时访问系统的资源,同一个用户也可以同时执行多个任务.同时,现在的计算机大都在网络环境下运行.多用户和网络环境必然存在安全问题.不仅要在理论上重视安全问题,实践上更不能忽视,在实际使用Linux时要加强安全管理.这个问题如果不重视,解决不好,则容易为系统留下安全隐患,轻则导致系统无法正常使用,影响工作,重则导致重大损失,这种损失程度视Linux的应用环境而异.在操作系统的实际使用、操作、管理中,主要存在如下安全隐患:
1)思想上不重视,认识不到操作系统安全的重要性及安全问题可能带来的风险;存在麻痹和侥幸心理,认为安全问题不会或不可能发生在自己身上.
2)有关计算机安全的规章制度不健全,甚至根本就无章可循:不认真贯彻和严格执行规章制度,甚至就根本不贯彻和执行,使制度形同虚设.
3)有意牺牲安全性来换取工作上的便利.
4)系统管理员和操作员技术水平差,不知怎样提高系统的安全性.
以上所说,也是造成计算机安全问题的主要原因.因此,必须重视Linux的安全使用与管理问题.
Linux的使用者,称为用户,按照权限分为两种:超级用户和普通用户.超级用户(root)是系统的管理者,具有任意权限,普通用户具有有限的权限.两种用户都是系统资源的使用者,此外超级用户还承担包括用户管理在内的整个系统的管理任务.两种用户均对安全使用操作系统负有责任,同时超级用户还应做好系统的安全管理工作,对整个系统的安全管理负有责任.为了保证系统的安全使用与管理,两种用户要密切合作,以提高系统的安全性,为系统的正常运行创造条件.
2关于对Linux的内核进行升级改造以提高其安全性问题
关于增加系统资源自我保护机制的思考
访问控制是操作系统安全的重要方面.访问控制是实现既定安全策略的系统安全技术,它对所有资源访问请求进行仲裁,即根据安全策略的要求,对每个资源访问请求作出是否许可的判断,能有效地阻止非法用户访问系统资源和合法用户非法使用资源.TCSEC(可信计算机系统评估准则)把访问控制作为评价系统安全的主要指标之一,具有不可替代的作用.
在Linux系统中增加或修改安全功能,有多种方案.一是在应用层实现,安全性差、效率低;二是在内核级对系统进行修改或增强,即在现有Linux基础上,对内核进行面向安全策略的分析,然后加入安全机制,经修改后的系统基本上与原有系统保持用户接口上的一致,且具有较高的系统效率.这种方法是在现有系统上进行开发,具有安全、高效和接口一致等优点,大多数基于Linux的开发都采用这种方法.在系统层进行安全增强和修改,有两种方式:一是直接修改内核,安全性控制较好,但内核版本升级后维护工作量大;二是采用软连接方式,用可加载的Linux内核模块实现安全功能的增强与扩充,然后将其插入Linux内核,实现与系统的平滑连接,同时保证原有系统的体系结构和源码不被永久性地改变.
五、提高Linux系统的安全性改进方法
本文将从增强操作系统访问控制功能的角度,提高Linux系统的安全性.在访问控制方面,将对Linux作如下改进:
在现有的安全策略基础之上,增加系统资源的自我保护机制:口令保护.这也就是本文研究的核心内容:基于系统资源自我保护口令的密码访问控制机制.文件或目录的口令保护,相当对文件或目录加上了一把锁,要想打开该锁来访问文件或目录,需要一把开锁的钥匙,这把钥匙就是知道该文件或目录的访问口令.每个文件或目录如果设置了访问保护口令,访问该文件或目录时,用户除了要有相应的权限外,还需知道该文件或目录的保护口令.
在内核级实现访问控制,系统调用是实施点,因为它是用户进程进入核心态的唯一入口,也是发出资源访问请求的地方.在系统调用中,截获用户对系统资源的访问请求后,根据访问控制策略,除了实施原有的权限检查外,还要实施新增的系统资源自我保护口令核对检查,判断操作是否可以继续进行,从而对文件、目录等资源进行保护.
改进后的系统,将在安全功能方面满足以下目标:
系统设计应该满足下面的特性:
(1)安全性:本系统的主要任务是设计安全模块,将其嵌入Linux系统,根据系统调用截获的访问请求,实施增强的访问控制。
(2)可靠性:可靠性是系统得以正常运行的基本前提.由于安全增强功能将在内核级实现,将作为内核的一部分运行,若出现问题,直接影响系统的可靠性,甚至导致系统崩溃.
(3)实用性:新增安全模块的设计要充分考虑应用需求,并提供方便的操作界面,进行相关设置.另外系统应在用户可接受的响应时间内,尽量具有较高的执行效率,在提高系统功能的同时,保证性能不明显下降.
(4)兼容性;新增的安全模块不影响原有系统的正常运行,在原系统上开发的软件能在新系统上正确运行.另外应使安全模块对系统的依赖性尽可能地小,使之能运行在不同的Linux版本上.
(5)灵活性:允许根据应用需求灵活地允许或禁止某种访问控制策略的实施,及采用哪种保护级别以限制不同的访问操作类型.新增的安全功能对用户来说应该是可选的,以适应对系统的安全性具有不同要求的场合.
参考文献:
[1]黑客分析与防范技术,张小斌、严望佳著,1999. 5,清华大学出版社
linux系统范文4
关键词:EXT4;日志;句柄;i节点
中图分类号:TP391文献标识码:A文章编号:1009-3044(2011)14-3443-04
The Analysis of Linux EXT4 File System
LU Ya-wen
(Hangzhou Vocational College of Science and Technology, Hangzhou 310016, China)
Abstract: Compared with EXT3 file system, the theory and data structure of EXT4 file system was introduced.By analyzing the WRITE operation,the procedcure of EXT4 file system was explained,and the study will supply some references for users who choosing core of Linux.
Key words: EXT4; daily record; handle; inode
EXT4文件系统是日志文件系统,100%兼容EXT3文件系统,与EXT3文件系统相比的主要区别是它能快速更新文件存储。计算机开始从磁盘上读取或写入数据都必须保证文件系统中文件与目录的一致性,所有日志文件中的数据均以数据块的形式存放在存储设备中,当磁盘分区时文件系统即被创建,按照文件形式、目录形式支持存储数据,组织数据的使用。EXT4提供并使用了一个通用日志层 (jbd) [1],该层既可在文件系统中使用,还能够应用到其它设备中,对NVRAM设备,EXT4就能支持。当由于软件或硬件错误导致文件系统崩溃时, EXT4使用与e2fsck同样代码来修复崩溃的文件系统,因此在出现数据崩溃时,EXT4具有和EXT3同样的防止数据丢失的优点[2]。但是,上述这些优点不是EXT4独有的,但只有EXT4才尽数具备,这正是EXT4的优势。
1 EXT4文件系统的重要数据结构
以下的数据结构都来自2.6.28内核。
1.1 超级块super_block
/include/linux/EXT4_fs.h
struct EXT4_super_block {
/*00*/ __le32 s_inodes_count; /* 节点数目 */
__le32 s_blocks_count; /* 文件块数 */
__le32 s_r_blocks_count; /* 保留未用的文件块数 */
__le32 s_free_blocks_count; /* 可用的文件块数 */
/*10*/ __le32 s_free_inodes_count; /* 可用的节点数 */
__le32 s_first_data_block; /* 第一个数据块的索引 */
__le32 s_log_block_size; /* 数据块大小 */
__le32 s_log_frag_size; /* 文件碎片大小 */
/*20*/ __le32 s_blocks_per_group; /* 每一组文件块的数目 */
__le32 s_frags_per_group; /* 每一组碎片数目 */
__le32 s_inodes_per_group; /* # 每一组节点数目 */
__le32 s_mtime; /* 最近被安装到内存的时间 */
…………
/*150*/ __le32s_blocks_count_hi;/* 文件块数的高32位 */
__le32s_r_blocks_count_hi;/*保留未用的文件块数高32位*/
__le32s_free_blocks_count_hi;} /* 可用文件块数高32位 */
合适的特定设备和不适合的特定设备的不同是在,如果在不合适的特定设备中有一位设备是内核无法识别的,内核将会拒绝启动文件系统。在EXT4中,e2fsck的要求更加严格,如果他既不能在合适的特定设备中,也不能在不合适的特定设备中识别出一个设备 ,他一定会终止程序并且不会将它所不能识别的设备模块化。
与日志相关的数据结构,只有在EXT4文件系统中才会起作用,同样在EXT3文件系统中也有定义,但是在EXT4文件系统中配合日志文件数据结构才能起到日志文件的功能。
1.2 组描述符 Group Descriptor
组描述符合超级块一样,记录的信息与整个文件系统相关。当某一个组的超级块或inode受损时,这些信息可以用于恢复文件系统。因此,为了更好的维护文件系统,每个块组中都保存关于文件系统的备份信息。
struct EXT4_group_desc
{__le32 bg_block_bitmap; /* 文件块位图所在的块的索引*/
__le32 bg_inode_bitmap; /* 存放文件节点位图的块的索引*/
__le32 bg_inode_table; /* 文件节点表在外存中的第一个块的索引*/
__le16 bg_free_blocks_count; /* 可用的文件块数 */
__le16 bg_free_inodes_count; /* 可用的节点数 */
__le16 bg_used_dirs_count; /* 使用中的目录数 */
__u16 bg_flag;/*用于32位地址对齐*/
__u32 bg_reserved[3];
__le32bg_block_bitmap_hi; /*文件块位图所在的块的索引的高32位*/
__le32bg_inode_bitmap_hi; /*存放文件节点位图的块的索引高32位*/
__le32bg_inode_table_hi;};/*文件节点表在外存中的第一个块的索引高32位*/
1.3i节点数据结构
struct EXT4_inode {
__le16 i_mode; /* 文件模式,表示文件类型以及存取权限 */
__le16 i_uid; /* 所属用户的id的低16位 */
__le32 i_size; /* 节点字节大小 */
__le32 i_atime; /* 节点存取时间 */
__le32 i_ctime; /* 节点创建时间 */
__le32 i_mtime; /* 节点修改时间 */
__le32 i_dtime; /* 节点时间 */
__le16 i_gid; /* 组标志的低16位 */
__le16 i_links_count; /* 连接数目 */
__le32 i_blocks; /* I节点文件块数 */
__le32 i_flags; /* 文件标志 */
union {
struct {
__le32l_i_reserved1;
} linux1;
struct {
__le32h_i_translator;
} hurd1;
struct {
__le32m_i_reserved1;
} masix1;
} osd1; /* OS dependent 1 */
__le32 i_block[EXT4_N_BLOCKS];/* 文件块索引数组,数组大小15*/
__le32 i_generation; /* 文件修改 (for NFS) */
__le32 i_file_acl; /* 文件 ACL */
__le32 i_dir_acl; /* 目录 ACL */
__le32 i_faddr; /* 碎片地址 */
union {
struct {
__le8 l_i_frag; /* 碎片号 */
__le8 l_i_fsize; /* 碎片大小 */
__le16 i_pad1;
__le16 l_i_uid_high; /* I节点用户id高位 */
__le16 l_i_gid_high; /* I节点组号高位 */
__le32 l_i_reserved2;
} linux2;//1级间接指针数据结构
struct {
__le8 h_i_frag; /* 碎片号 */
__le8 h_i_fsize; /* 碎片大小 */
__le16 h_i_mode_high;
__le16 h_i_uid_high;
__le16 h_i_gid_high;
__le32 h_i_author;
} hurd2; //直接指向物理块的节点的数据结构的补充
struct {
__le8 m_i_frag; /* 碎片号 */
__le8 m_i_fsize; /* 碎片大小 */
__le16 m_pad1;
__le32 m_i_reserved2[2];
} masix2;//2级间接指针数据结构
} osd2; /* OS dependent 2 */
__le16i_EXTra_isize;
__le16i_pad1;
__le32i_ctime_EXTra;/* 节点扩展的创建时间(nsec
__le32i_mtime_EXTra;/* 扩展的修改时间(nsec
__le32i_atime_EXTra;/* 扩展的存储时间(nsec
__le32i_crtime; /* 文件创建时间*/
__le32i_crtime_EXTra;};/* 扩展文件创建时间 (nsec
上述结构体中有两个联合体,是为了节省空间考虑,因为i节点的索引有三种情况前12个直接指向物理块,第13个是一级间接指针,第14个是二级间接指针,第15个是三级间接指针,将这三种情况都写在一个联合体中,根据实际的情况选择节点号,根据节点的类型来选择用联合体中的那个数据结构。与EXT3不同的是,在 EXT4 文件系统中,增加了5个项,用于扩充索引节点,通过这个结构解决了这对于对精度要求很高的程序的要求。
1.4 i节点的扩展信息的数据结构
这个结构体是日志式文件系统所特有的,用来支持完成日志文件的各种操作[3]。也是2.6内核与2.4内核的不同之处。i节点文件块组是包含一系列文件节点的块组。包含了节点的生命期,它通常用于为分配文件块的决定。我们将文件的数据块放到他的i节点块的附近,新的节点放到它的父目录节点的附近。存放i节点大小的栈不在内存中而在外存上。在缩减的过程中,节点的大小被虚拟文件系统调用EXT4_truncate函数而设置成新的大小,但是文件系统不会将节点的磁盘大小设为0,除非这样的缩减真的执行了。目的在于节点的大小总是表示正在使用的文件的块数。当节点数据写入的时候我们要重新改写节点磁盘的大小来代替节点的大小[4]。只有在缩减的进行时节程执点的大小和节点所在的磁盘空间的大小才会不一样,其他情况都应该是一致的。只有在执行文件块增长或缩减的时候存放节点大小的栈才会被改动。
struct EXT4_inode_info {
__le32 i_data[15];
__le32 i_flags; //i节点标志
#ifdef EXT4_FRAGMENTS
__le32 i_faddr; //第一个碎片的索引
__le8 i_frag_no;//碎片数目
__le8 i_frag_size;//碎片大小
#endif
__le32 i_file_acl;
__le32 i_dir_acl;
__le32 i_dtime;
__le32 i_block_group;//i节点文件块组
__le32 i_state; /* EXT3的动态的状态标志 */
__le32 i_nEXT_alloc_block;
/* i_nEXT_alloc_block 是在该文件中最近分配的块的逻辑号。当然,他没
有命名,我们用这个来决定相关的分配请求所分配的文件块的逻辑号。
/*
__le32 i_nEXT_alloc_goal;
/* i_nEXT_alloc_goal是下一个分配块号的物理标志。他是与此文件分配的文件块号最相近的物理块号。当用户请求分配一个新的物理块的时候将这个物理块分配给用户*/
struct semaphore truncate_sem;//元数据块,数据的修改信息等
struct inode vfs_inode;
/*虚拟文件系统的节点,通过这个数据可以将日志文件系统EXT4和linux文件系统的顶层虚拟文件系统连接起来*/
};
1.5 句柄handle_t数据结构
此结构是EXT4文件系统用来实现日志式文件操作的有利的数据结构。
struct handle_s
{ transaction_t *h_transaction;//文件操作过程
int h_buffer_credits;//要被弄脏的缓冲区的数目
int h_ref;//句柄中的参照数
int h_err;//出错数
struct list_head h_jcb;// 磁盘操作的头节点
unsigned int h_sync: 1; /* sync-on-close */
unsigned int h_jdata: 1; /* 日志数据 */
unsigned int h_aborted: 1; /* 句柄中致命的错误 */
};
transaction_t 类型是日志系统的一个内容。它记录下了数据在各种状态下的改变情况。
各种状态为:
* RUNNING: 正在进行新的修改
* LOCKED: 修改在进行但是句柄不接受这样的改变
* RUNDOWN: 修改在整理中但是还没有完成对缓冲区的修改。
* FLUSH: 所有的修改完成了但是我们还没有写到磁盘上。
* COMMIT: 所有的数据都在磁盘上,写操作执行
* FINISHED: 完成保持准备接受下一次修改
2 EXT4的文件操作
2.1 EXT的文件操作的数据结构
struct file_operations EXT3_file_operations = {
.llseek = generic_file_llseek,
.read = do_sync_read,
.write = do_sync_write,
.aio_read = generic_file_aio_read,
.aio_write = EXT3_file_write,
.readv = generic_file_readv,
.writev = generic_file_writev,
.ioctl = EXT3_ioctl,
.mmap = generic_file_mmap,
.open = EXT3_open_file,
.release = EXT3_release_file,
.fsync = EXT3_sync_file,
.sendfile = generic_file_sendfile,
};
这个结构体说明了EXT4文件系统的read操作是由do_sync_read函数来实现的,write操作是由do_sync_write函数来实现的,以此类推。只要我们找到相关的函数就能分析EXT4文件系统是怎么实现读写操作的。
2.2 EXT4的写操作
以下分析写操作的过程,因为日志式的文件的写操作和其他的文件系统有很大的不同所以以写操作为例:
图1是写操作执行时各个函数嵌套的顺序图。
① file->f_op->write即调用EXT4文件系统中的write操作,在operation结构的解释中指出write操作用do_sync_write操作完成。
② filp->f_op->aio_write即调用EXT4文件系统中的aio_write操作,在operation结构的解释中指出aio_write操作用EXT4_file_write操作完成。
LINUX中写操作是通过sys_write系统调用来实现的,在sys_write函数中完成对文件file 的读入,判断正确后调用了vfs_write函数进一步判断文件的模式是否为写是否与其他写操作冲突,如果判断正确后调用file->f_op->write,这个调用其实是去调用EXT3文件系统中的write操作(即do_sync_write)再调用aio_write(即EXT4_file_write)来完成读写制定大小的文件内容到缓冲区中包括对日志的写。
EXT4_file_write函数的分析如图2。
3 结束语
本文讨论的对象是Linux操作系统中EXT4内核程序,介绍了EXT4的主要数据结构,并通过分析写操作来解释日志的工作方式。日志文件系统提高了文件系统的效率,但是也增加了系统的开销。2.6.28内核中的EXT4文件系统比2.4内核做了较多的改动,如前面介绍的节点的扩展信息,和Htree结构的修正(文中没有介绍),NTFS文件系统的修正等。总体来说EXT4文件系统是比较完善的日志文件系统。
参考文献:
[1] 李善平,陈文智.边学边干LINUX内核指导[M].浙江:浙江大学出版社,2002.
[2] 涂健,孙辉.Linux2.6(内核下)EXT3文件系统的数据结构及性能分析[J].南昌水专学报,2004(6):8-10.
[3] 李巍.Ext―扩展文件系统的研究[J].信息系统工程,2010(8):133-136.
linux系统范文5
关键词: Linux操作系统;安全策略
一、引言
1.安全目的:要目的包括机密性、完整性、和可用性,机密性是保障用户的数据不被别人所知道,完整性为了让数据具有它本身所具有的健壮性,可用性是指数据不能被破坏,应该具有它本身所具有的作用,即可执行性。
2.安全策略:关注信息系统中的信息控制、管理和分发,规定信息系统或产品对敏感信息的处理和使用方式的法律,存在两种最重要的安全策略模型BLP模型和Biba模型,此处不做详细介绍。
二 、Linux操作系统安全机制分析
1.身份标识和鉴别,在Linux系统中身份标识与鉴别机制是基于用户名和口令来实现的,允许系统管理员通过useradd命令为用户指定唯一用户名和初始口令,将这个信息放在/etc/passwd文件里面,其实密码信息文件是在/etc/shadows文件中存储的。
2.文件访问控制,Linux对文件包括设备都是通过访问控制机制来实现的,这种简单自主访问控制机制的基本思想,系统每一个用户拥有自己唯一的UID,并且属于某一用户组,而且用户组都有一个唯一的组号,这些信息存放在/etc/group文件里面,系统中的文件权限主题分为所属用户、所属组、其他用户,并且在这个基础之上,每一个文件权限都对应有三个系统权限,分别为r、w、x,称作读权限、写权限、执行权限,可以通过命令进行修改文件或者目录的权限,所以在这里需要对个文件权限进行妥善管理
3.特权管理,因为Linux操作系统是类Unix系统,所以普通用户没有任何特权,而超级用户拥有系统内的所有特权,所以,在很多现有的基于Linux操作系统内核的操作系统都没有开放root用户,这样很大一部分的原因就是root用户具有至高无上的权利,它要是被黑客攻击,那么后果不堪设想,所以建议对root用户使用的时候,要多加防范。
4.安全审计,它的基本思想就是将审计事件分为系统事件和内核事件两部分M行维护与管理,系统事件有审计进程syslogd来维护和管理,而内核事件由审计线程klogd来维护和管理。
三、从安全的角度管理和使用Linux系统
1.口令管理,顶起更换口令,而且使用口令的标准是大小写字母加数字和标点符号混用,提高用户本身的安全性,这是用户做的最基本的安全性防护措施。
2.不要将口令轻易告诉别人,而且不建议在很多地方使用同一个口令。可以使用口令管理软件,将自己的用户密码进行管理。
3.用户权限管理,通过正确限制所有用户对文件的区别访问来控制用户权限安全性。
4.定期升级系统补丁和应用程序补丁。
5.对系统用户文件进行备份,普通用户对自己的数据,超级用户需要备份系统重要配置文件的数据主要配置文件数据在/etc文件夹下面。
6.定期查看日志文件,日志文件是记录整个操作系统的使用状况,可以帮助我们安全使用以及排除错误的信息支持,例如以下文件:
7.关闭不必要的系统服务,Linux操作系统在安装的时候包括了较多的网络服务,如果作为服务器来讲的话,这样使用起来会很方便,但作为用户的工作站就不太好,会出现安全问题。用户应该关闭不需要的服务。/etc/ined服务器程序承担网络服务的任务,它同时监听多个网络端口,一旦收到外界网络传来的连接信息,就执行响应的TCP或者UDP网络连接任务。
8.要确保操作系统端口安全,TCP或者UDP网络数据通过使用端口号才能够被正确的指向相应的应用程序,这样才能正确的访问该应用程序,而其中的每个程序也被赋予了特别的TCP或者UDP端口号,网络数据进入计算机后,操作系统会根据它包含的端口号,将其发送到相对应的应用程序中,攻击者会利用各种手段对目标主机的端口进行扫描和探测,这样就能确定一些信息,这样给攻击者增加了攻击的可能性,建议使用网络工具,定期检测网络端口的异常,如果发现有可疑端动,立即做出安全性防护措施。
9.用户在管理自己的目录的时候,不会让自己私有的目录给予别的用户访问的权限,除非特定需求的用户,而且原则是,只能让其他用户具有读取的权限,一般不会赋予写和执行的权限。在管理目录的时候,应该遵循各个用户数据建立自己的用户目录,这样系统便于管理。
10.设置用户密码之外,还需要给Linux上每个账户可以被赋予不同的权限,因此在建立一个新用户账户时候,系统管理员应该根据需要赋予该账户不同的权限,并且管理到不同的用户组。
linux系统范文6
2、为了解决官方版钉钉不被开源版覆盖,实现与开源版共存,并且保证图标放大后不失真,对deb包进行了重新打包:
3、钉钉主程序文件没有任何变动,保证使用的原汁原味(也没有能力改动)。
4、添加了一个高清的图标文件,为了区分开源版的钉钉,修改图标为“初音绿”。
5、实现与开源版共存,仿造安卓版钉钉的包名称,定义官方的Linux钉钉打包的名称为com.alibaba.linux.rimet。