《Linux系统应用与开发教程》所有课后习题和答案 下载本文

内容发布更新时间 : 2024/12/22 22:06:48星期一 下面是文章的全部内容请认真阅读。

1. 安全增强的内涵都有哪些? 第一、受保护的程序只允许访问它们正确地工作所需的文件系统能够部分,意味着程序的执行被严格监控,不能再访问或者修改它不需要的文件;第二、进行严格的访问控制审查,利用SELinux策略定义来实施具体的保护;第三、更为严格的权限升级核定,避免不恰当的类型迁移;第四、引入角色概念,赋予用户不同的角色,系统根据角色设置访问权限。 1. SELinux与Linux系统原有的访问控制之间有什么关系? 安装并启用SELinux之后,Linux系统的原有安全机制,即基于―所有者——组——其他‖的访问控制机制仍然有效,二者可以共存。当在系统中执行某一操作时,原有的访问控制机制首先起作用。如果原有的访问控制规则允许了该操作,那么SELinux将会检查并且根据自己的安全策略允许或拒绝访问;但是如果原有的访问控制机制拒绝了该操作,那么Linux系统直接拒绝该操作,而与SELinux检查无关。

1. 如何查看安全上下文?

执行命令―ps –Z‖则列出了当前运行进程的安全上下文,执行命令―ls -Z‖可以列出文件对应的安全上下文。

1. 如何修改一个目录中默认文件的安全上下文?

chcon命令设置或者更改一个或多个文件的安全上下文。若文件原来没有安全上下文则设置新的安全上下文,否则修改为指定值。

1. SELinux的策略如何选择?用户如何根据自己的需要去定制SELinux策略?

SELinux访问控制策略的制定、更改非常复杂。一般是下载安装缺省策略,然后在此基础上进行细微调整。制定或更改策略可以通过控制台命令实现。Fedora系统默认安装了一个图形化的SELinux管理工具,可以非常方便地设置、修改SELinux的安全策略。用户可以使用此工具来依据自己的需要定制SELinux策略。

1. SELinux AVC消息有什么作用?如何查看AVC消息?

AVC消息是由SELinux因访问拒绝或者因制定的审计规则而产生的审核消息,edora10默认安装并且打开了SELinux 诊断工具 setroubleshoot,这个工具为桌面用户提供了 SELinux 访问受限的通知和详细信息,以及如何处理它们的建议。当系统中的某个操作违反了SELinux的安全策略时,该工具在桌面上弹出AVC警报。当看到AVC警报时,可以双击该通知图标,以打开SeTroubleshoot浏览器,也可以通过菜单项【应用程序/系统工具/SELinux故障排除工具】来打开SeTroubleshoot浏览器,在SeTroubleshoot浏览器上面列出了所有检查到的AVC消息。

第11章 shell程序设计

1.shell程序就是把用户键入的shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行。

2.安装有bash、bash、sh、nologin等多种shell解释器,可以通过命令:cat /etc/shells命令查看系统中安装有哪些shell,及这些shell的安装路径。

3.与C语言等高级语言程序需要最终形成二进制可执行文件不同,shell程序是通过shell命令解释器解释执行的,不生成二进制的可执行代码,这点和Dos下批处理程序(.BAT文件)的特性类似。

4.包括:(1)命令解释器路径;(2)函数声明;(3)程序主体;

5.Bash脚本语言是一种弱类型的脚本语言。所谓弱类型脚本语言是指这种语言对类型的要求不严格,同一个变量随着使用场合的不同,可以存储不同类型的数据。 给一个变量赋值采用如下的格式:

变量=值 (注意:等号两侧不能有空格)

6.如果在函数内部需要使用传递给函数的参数,一般用$0、$1、......、$n,以及$#、$*、$@这些特殊变量。$0为执行脚本的函数名,$1是传递给函数的第1个参数,依次类推,$n为传递给函数的第n个参数;$#为传递给函数的参数个数;$*和$@为传递给函数的所有参数,两者的区别在于$*把所有参数作为一个整体,而$@把所有参数看作拥有多个参数的集合,可以单独访问每个参数。 7.常见的运算符:

整数的算术运算符:+、-、*、/、%; 赋值运算符:+=、-=、*=、/=、%=; 位运算符:<<、>>、&、|、~、^;

位运算赋值运算符:<<=、>>=、&=、|=、~=、^=; 逻辑运算符:&&,||,!,>,>=,<,<=,!=,== 8.有if、case、for、while、until等。

9.通过$n(n=0、1、2......),$#,$*,$@特殊变量和shift等命令实现。 10./etc/bashrc脚本负责进行一些全局变量的设置工作。 11.代码清单及程序注释如下: #!/bin/bash #可执行文件的路径

COMMAND_PATH=/usr/lcoal/bin/myserver #得到文件的文件名,本例中为:myserver COMMAND_FILE=${COMMAND_PATH##*/} #通过ps命令获取运行程序的经常标识符即pid function grep_proc_id() {

ps -C ${COMMAND_FILE} -o pid --no-headers }

#启动可执行文件 function start_svc() {

echo \starting\ ${COMMAND_PATH} }

#停止可执行文件 function stop_svc() {

pid=`grep_proc_id`

if [ -n \] && [ 0 -ne ${pid} ];then kill -9 ${pid} echo \${pid} \ fi

echo \stoped\}

#重新启动可执行文件 function restart_svc() {

stop_svc start_svc

echo \restart\}

#输出程序使用方法及简单实例 function USAGE() {

echo \svc [start] [restart] [stop]\ echo \start,restart or stop service \

echo ${COMMAND_PATH}

echo \svc restart \}

#程序主要路径 if [ $# -lt 1 ] ; then USAGE else

#根据传入参数完成启动、重启、终止程序的功能 case $1 in

start) start_svc ;; restart) restart_svc ;; stop) stop_svc ;; *) USAGE ;; esac fi

第12章 gcc的使用与开发

1.一个C/C++程序从开始编码到生成可执行的二进制文件至少要经过4个步骤:(1)预处理(Preprocessing);(2)编译(Compilation);(3)汇编(Assembly);(4)链接(Linking) 2.略。

3.略,可参见正文表12-1。

4.默认路径放在/usr目录下,其中库文件在/usr/lib下,头文件在/usr/include目录下。 5.为了简化生成代码的步骤,GNU提供了make工具。

make工具读入一个文本文件,文本文件中主要记录了一些规则。规则说明了生成最终的二进制代码依赖哪些模块以及这些模块如何生成的信息。为了简化,这个文件通常命名为makefile。

makefile文件的一般格式是: 目标:依赖项列表 (Tab缩进)命令...

其中,―依赖项‖一般为生成目标所需的其他目标或者文件名。

6.略,可参见正文表12-3。

第13章 gtk+图形界面程序设计

1.在Xlib之上出现了很多更高层的开发工具包。它们将底层的Xlib的API进行封装,提供更高级的接口,达到降低开发难度,提高开发效率的目标。此外,这些工具包大多并非完全专注于界面的开发,在常用数据结构(树、链表等)甚至数据库操作等方面都提供了接口。下面将介绍的GTK+就是这样一个开发工具包。

2.GTK+由3个库组成:(1)GLib:是GTK+和Gnome的底层核心库,提供了可以供C语言处理的数据结构、可移植的封装接口和用来处理事件循环、线程、动态加载的接口,构成了一个类似对象的体系结构。(2)Pango:是处理界面布局和国际化的库,构成了GTK+2.0处理字符和字体的核心。(3)Atk:提供了一些其他功能的接口。一个实现对Atk接口支持的应用软件,可以实现屏幕阅读、放大、使用其他输入设备等功能。

3.除了GIMP外,大量使用GTK+的著名软件还有图形桌面系统GNOME、字处理软件Abiword、图表软件Dia以及辅助开发GTK+程序的Glade等。 4.

(1)头文件源代码: #include //btnOne的点击事件处理函数

void on_btn_One_clicked(GtkWidget *widget,gpointer data){ g_print(\from btn_One!\\n\}

//btnTwo的点击事件处理函数

void on_btn_Two_clicked(GtkWidget *widget,gpointer data){ g_print(\from btn_Two!\\n\}

//btnThree的点击事件处理函数

void on_btn_Three_clicked(GtkWidget *widget,gpointer data){ g_print(\from btn_Three!\\n\}

//窗口关闭事件处理函数

void on_delete(GtkWidget *widget, GdkEvent *event,gpointer data){ g_print(\Closed.\\n\