搜档网
当前位置:搜档网 › SELinux概述

SELinux概述

SELinux概述
SELinux概述

SELinux使用了分级的强制访问控制,是Linux核的重要安全措施。SELinux的安全策略工具可从oss.tresys./projects下载。本章分析了SELinux的安全机制,介绍了安全策略配置语言、核策略库的结构,简述了SELinux核模块的实现,还分析了用户空间的客体管理器。

3.1SELinux概述

SELinux是安全增强了的Linux,是Security-enhanced Linux的简写,SELinux改进了对核对象和服务的访问控制,改进了对进程初始化、继承和程序执行的访问控制,改进了对文件系统、目录、文件和打开文件描述的访问控制,还改进了对端口、信息和网络接口的访问控制。早期的Linux核只提供了经典的UNIX自主访问控制(root用户,用户ID,模式位安全机制),以及部分地支持了POSIX.1e标准草案中的capabilities安全机制,这对于Linux系统的安全性是不够的,NSA(the National Security Agency)和SCC(Secure Computing Corporation)共同开发了强大的基于类型加强(Type Enforcement)的强制访问控制(mandatory access control,简称MAC)机制,提供了动态的安全策略机制。

Linux核增加了一个通用的安全访问控制框架,它通过hook函数来控制程序的执行,这个框架就是Linux安全模块(LSM),在LSM上可使用各种安全控制机制(如:Flask机制)来实现对程序的控制。

SELinux应用了类型加强(Type Enforcement,TE)和基于角色访问控制(role-based access control,RBAC)技术。

TE给每个主体(进程)和系统中的客体定义了一个类型,这些类型定义在SELinux的安全策略文件中,以安全标签形式存放在文件本身的扩展属性(extended attributes,简称xattrs)里。

当一个类型与一个进程相关时,这个类型称为域(domain),例如:后台进程httpd的域为httpd_t。

主体(subject)对客体(object)的操作在SELinux中默认下是不允许的,而由策略定义允许的操作。TE使用主体的域和客体类型从策略文件中查找操作许可。例如:策略中的一条规则如下:

allow httpd_t net_conf_t:file { read getattr lock ioctl };

这条规则表示httpd_t域对net_conf_t类型客体的文件有“{}”中所表示的操作权限。SELinux的访问控制规则存放在安全策略文件中,策略文件分为二进制和源代码文件,源代码以策略配置语言的形式描述,由编程者创建和维护。源代码经策略配置工具编译后生成二进制文件。二进制策略被装载到核空间,形成在存中的策略库及缓存,核就可以使用访问控制规则了。

SELinux可以实现非常小颗粒的访问控制,这些细小颗粒的访问控制也造成了安全策略的复杂性。

Linux核的SELinux安全体系由Flask和LSM框架共同组成,LSM是由hook函数组成的安全控制框架,Flask框架将SElinux的策略规则转换成访问控制许可。

在安全策略配置语言中经常用到的名称术语说明如下。

subject 主体,常指一个进程

object 客体,常指一个文件

object class客体的类

permission 许可

context上下文

user用户

role角色

type 类型

Type Attributes 类型属性

Type Enforcement 类型增强

dormain 域,它是一个进程的类型

source type源类型

target type目标类型

labeling标识

access vector cache (AVC) 访问向量缓存

access decision 访问决策

3.1.1Linux与SELinux在安全管理上的区别

在传统的Linux自由访问控制(Discretionary Access Controls,DAC)之后,SELinux在核中使用强制访问控制机制(MAC)检查允许的操作。

在DAC下,文件客体的所有者提供了客体上的潜在风险控制。用户可以通过错误配置的chmod命令和一个非期望的访问权限传递,暴露一个文件或目录给一个恶意信任者。这个用户启动的进程,如:CGI脚本,可在这个用户拥有的文件做任何的操作。

DAC实际上仅有两个主要的用户分类:管理者和非管理者。为了解决权限分级,它使用了访问控制列表(access control lists,简称ACL),给非管理者用户提供不同的权限。而root 用户对文件系统有完全自由的控制权。

MAC访问控制框架可以定义所有的进程(称为主体)对系统的其他部分(如:文件、设备、socket、端口和其他进程,它们被称为客体或目标对象)进行操作的权限或许可。这些许可由进程和客体的安全策略来定义,通过核实现控制。这种方式可给一个进程仅授予操作所需要的权限,这遵循了最小权限原则。在MAC下,即使用户用chmod暴露了他们的数据,但进程还是无法修改在策略中没有许可的文件。

DAC和MAC分别使用自己的访问控制属性,两者独立,但都必须通过权限检查。它们的区别有以下二个:

1.在主体的访问控制上:

DAC:真实有效的用户和组ID

MAC:安全上下文(user:role:type)

DAC和MAC的UID是独立的。

2.在客体的访问控制上:

DAC:(文件)访问模式(rwx r-x r-x)和用户及组ID

MAC:安全上下文(user:role:type)

3.1.2Flask安全框架概述

1.Flask框架对操作许可的判定过程

图3-1描述了Flask框架,图中,一个主体进程对系统中的客体(如:设备文件)进行操作,如:读写文件。这个操作通过DAC权限检查之后,再进行SELinux的权限检查。在DAC检查中,主体通过基于ACL常规文件权限获得了对客体的操作许可。SELinux权限检查的过程如下:

策略强制服务器(policy enforcement server)从主体和客体收集安全上下文,并发送安全上下文标签对给安全服务器(security server),安全服务器负责产生策略的决策。

策略强制服务器首先检查AVC,如果AVC有高速缓存的策略决策,它返回决策给策略强制服务器。如果没有,它转向到安全服务器,安全服务器使用系统初始化期间装载到核的二进制策略作出决策,将决策放到AVC的cache中进行缓存,并将决策返回给策略强制服务器。如果决策为允许操作,则主体对客体进行操作,否则,操作被禁止,禁止操作信息被记录到log文件,log文件一般为/var/log/messages。

图3-1Flask框架

安全服务器产生策略决策的同时,强制服务器处理任务的其他部分。从这个角度来看,强制服务器部分可以看作客体管理器,客体管理包括用安全上下文件标识客体、管理存中的标签、管理客户端和服务器的标识行为。

2.Flask框架组成说明

Flask安全体系结构由客体管理器和安全服务器组成。客体管理器实施安全策略的判定结果,安全服务器作出安全策略的判定。

Flask安全体系结构提供从安全服务器检索访问、标记和多例化判定的接口。访问判定指主体对客体操作的一个权限是否得到批准。标记指分配给一个客体的安全属性标签。多例化判定指一个特定的请求应该从多例化资源中选取哪一个。

Flask安全体系结构还提供一个访问向量缓存(AVC)模块,该模块允许从客体管理器缓存中直接取出缓存的判定结果,以提高执行速度。

Flask框架的安全服务器的安全策略由四个子策略组成:多级安全(MLS)策略、类型加强(TE)策略、基于标识的访问控制(IBAC)策略和基于角色的访问控制(RBAC)策略。安全服务器提供的访问判定必须满足每个子策略的要求。

安全服务器定义了一个由类型加强(TE)策略、基于角色的访问控制(RBAC)策略和多级安全(MLS)策略组合成的策略决策系统。其中,TE和RBAC策略是安全策略的必要部分,MLS策略是可选的,当核配置选项CONFIG_FLASK_MLS打开时,系统提供MLS策略支持。Flask体系结构为安全标记定义了两个独立于策略的数据类型:安全上下文(context)和安全标识符(SID)。安全上下文是由可变长字符串表示的安全标记,存在于文件的扩展属性中。SID是被安全服务器映射到对应安全上下文的整数。Flask 客体管理器负责将安全标签绑定到客体上、绑定SID到核对象上。

一个安全上下文(或称为标签)由用户ID、角色、类型和可选的MLS分级属性或分类属性组成。角色仅与进程相关,因而文件安全上下文有一个通用的object_r的角色。安全服务器仅为安全上下文提供SID。

SELinux系统提供一个与安全服务器相配套的安全策略配置语言,该语言用于对安全服务器中安全策略的配置进行描述。策略配置语言描述的规则策略存于策略文件中,策略文件源代码由工具编译成二进制策略文件,安全服务器在引导时读取二进制形式策略文件,形成策略库。

3.MLS分级机制

MLS(Multi-Level Security)机制给用户提供了可以用不同等级的安全水平来访问系统。例如:MLS安全分级从低到高为Confidential、Secret、Top Secret和Individuals,不同级别可查看不同的分类信息。低级别不可查看高级别的文档。

SELinux支持分级保护数据,它使用BLP(Bell-LaPadula Model:BLP)模型,这个模型定义了系统的信息是如何基于粘附在每个主体和客体的标签来进行流动的。如:在Secret级别的用户可与其他同级别用户共享数据,并能提取来自Confidential级(比Secret级低)的信息。但在Secret级别的进程不能查看Top Secret级别(比Secret级高)的数据。它还阻止高级别进程随便给低级别的数据写入信息。即“不能读较高级别的数据,不能写较低级别的数据”模型。

在多级别系统中,高级别用户不自动获得管理者权限,但它们对计算机上的所有信息可以有访问权。

安全上下文中,主体和客体用安全级别(Security Levels,SL)标识,SL由敏感属性和分类属性组成。Sensitivity(敏感属性)是安全体系的属性,它将数据等分成不同安全级别,如:

“Secret”或“Top Secret”。Categories(分类属性)是一套非体系的属性,如:“US Only”或“UFO”,表示仅US使用。分类属性将数据分隔成几个独立的小组,每个小组可归属于不同的用户等。

一个SL必须有一个敏感属性和0个或多个分类属性。例如:SL是{ Secret / UFO, Crypto }、{ Top Secret / UFO, Crypto, Stargate } 或{ Unclassified }。体系的敏感属性跟踪着0个或多个分类属性,因为敏感属性还可以分隔成彼此独立的分类属性。

客体上的安全级别称为分级(Classifications),主体上的安全级别称为Clearances。

3.1.3安全模块(LSM)框架

为了加入安全机制,Linux核从以下五个方面进行了修改:

1.在核的构件描述数据结构中加入了安全域。

2.在核不同的构件中加入了对安全钩子函数的调用。

3.提供了通用安全模块。

4.将capabilities逻辑的大部分移植为一个可选的安全模块。

5.加入了安全系统调用。

安全域是一个void*类型的指针,它指向安全模块操作函数,从而将安全信息和核对象联系起来。下面列出加入了安全域的核数据结构:

task_struct进程结构

linux_binprm二进制程序运行结构

super_block文件系统超级块结构

inode文件系统节点结构,表示文件、目录、管道、设备文件或socket套接字

file打开的文件结构

sk_buff网络包缓冲区结构

net_device网络设备结构

kern_ipc_perm IPC(进程间通信)权限结构

msg_msg:消息结构

Linux安全模块(LSM)提供了各种安全钩子(hook)函数,都在全局类型security_operations 结构中,这些函数管理核对象的安全域,仲裁对这些核对象的访问。Linux安全模块提供了一个通用的安全系统调用,允许安全模块为安全相关的应用编写新的系统调用。

在核引导的过程中,Linux初始化了一系列的虚拟钩子函数,当加载一个安全模块时,使用register_security()函数注册安全模块:这个函数将设置全局表security_ops,使其指向安全模块的钩子函数指针,从而核可向这个安全模块询问访问控制决策。

Linux安全模块将capabilities能力机制移植到安全模块中,保留了对原有使用capabilities 的应用程序的支持。

Linux安全模块的钩子函数包括任务钩子、程序装载钩子、进程间通信IPC钩子、文件系统钩子、网络钩子及模块钩子和顶层的系统钩子。

3.1.4核SELinux的组织结构

SELinux模块由安全服务器、AVC(Access Vector Cache)、网络接口表、netlink事件通知代码、selinuxfs伪文件系统和hook函数应用六个部分组成。安全服务器为获得安全策略决定提供通用接口,使模块的其余部分保持独立的安全策略。这些接口定义在include/security.h 中,安全服务器的特定应用能在不改变模块其他部分的情况下被改变。

安全服务器的应用有RBAC(基于角色的访问控制Role-Based Access Control)、TE(类型加强Type Enforcement)的生成和可选的MLS(多级安全Multi-Level Security)。其中,RBAC 和TE策略是高度可配置的,能用于许多不同的安全对象。安全服务器的源代码在security/selinux/ss目录下载。

AVC提供了从安全服务器获得的访问策略的缓冲区(cache),提高了安全机制的运行性能。它提供了hook函数高效检查授权的接口,提供了安全服务器管理cache的接口。与hook 函数的接口定义在include/avc.h中,与服务器的接口定义在include/avc_ss.h中,AVC代码在avc.c中。

网络接口表将网络设备映射到安全上下文中。维护一个独立的表是必要的,因为LSM网络设备没有安全成员。当网络设备被hook函数第一次查找到时该网络设备就被加入到这个表中,当设备被设置取消或策略重载时移出这个表。网络接口表提供了查找hook函数以及获得网络设备条目引用或释放引用的接口函数。该接口定义在include/netif.h中,回调函数在设备配置变化或策略重载时注册。网络接口表的代码在netif.c中。

netlink事件通知让SELinux模块在策略重载以及强制状态改变时通知进程。这些通知被用户空间的AVC(libselinux的一部分)用来保持与核一致的状态。用户空间AVC被用户空间策略强制器(enforces)使用,代码在netlink.c中。

Selinux伪文件系统给进程提供安全服务器的策略API。selinux提供基于策略API的调用,它包括进程属性、文件属性和策略API三个部分,并被高层的libselinux API封装起来,代码在selinuxfs.c中。

hook函数应用管理与核对象相关的安全信息以及执行核每个操作的访问控制。hook函数调用安全服务器和AVC得到安全策略并运用这些策略来标识和控制核对象。hook函数还调用文件系统扩展属性代码获得和设备文件上面的安全上下文。hook函数在hooks.c中,与核对象相关的安全信息的数据结构定义在include/objsec.h中。SELinux安全模块及接口如图3-2所示。

图3-2SELinux安全模块及接口

linux核对于程序的运行、文件系统的超级块和节点以及文件操作、任务操作、网络连接、socket、System V进程间通信等提供了对应安全操作函数,这些函数指针都放在安全操作函数结构中,由于结构很大,这里只列出了程序运行的操作函数指针,这些操作函数指针的前缀bprm是bin program的缩写,其他的操作函数具有类似结构。

security_operations安全操作函数结构在include/linux/security.h中,分析如下:

struct security_operations {

int (*ptrace) (struct task_struct * parent, struct task_struct * child);

int (*capget) (struct task_struct * target,

kernel_cap_t * effective,

kernel_cap_t * inheritable, kernel_cap_t * permitted);

int (*capset_check) (struct task_struct * target,

kernel_cap_t * effective,

kernel_cap_t * inheritable,

kernel_cap_t * permitted);

void (*capset_set) (struct task_struct * target,

kernel_cap_t * effective,

kernel_cap_t * inheritable,

kernel_cap_t * permitted);

int (*acct) (struct file * file);

int (*sysctl) (ctl_table * table, int op);

int (*capable) (struct task_struct * tsk, int cap);

int (*quotactl) (int cmds, int type, int id, struct super_block * sb);

int (*quota_on) (struct file * f);

int (*syslog) (int type);

int (*vm_enough_memory) (long pages);

int (*bprm_alloc_security) (struct linux_binprm * bprm);

void (*bprm_free_security) (struct linux_binprm * bprm);

void (*bprm_apply_creds) (struct linux_binprm * bprm, int unsafe);

int (*bprm_set_security) (struct linux_binprm * bprm);

int (*bprm_check_security) (struct linux_binprm * bprm);

int (*bprm_secureexec) (struct linux_binprm * bprm);

……

}

security_operations的结构很大,这里只列出了很少的一部分,下面就一些成员函数说明如下:

bprm_alloc_security:分配或附加上一个security结构到bprm->security成员上,操作成功时返回0。

bprm_free_security:释放或删除bprm->security field成员上的security结构。

bprm_apply_creds:计算或设置进程的安全属性,这个进程是由execve操作生成的,这个操作是基于旧属性(当前进程的安全属性current->security)和被set_security 函数设置存在bprm->security 里的信息。由于set_security 函数是void类型,这个函数不能返回错误,如果属性设置失败,则安全属性值不会被改变。

bprm_apply_creds:函数在任务锁住的情况下被调用,参数unsafe表示可能不安全地转换安全状态的各种原因。

bprm_set_security:将安全信息存放到bprm->security 成员中。

bprm_check_security:检查set_security 调用时设置的值是否设置到bprm->security中,返回0表示已授予设置的权限。

bprm_secureexec:返回值是1或0,表示是否是安全运行,这个标识传进ELF解释器的初始堆栈上的补充表里,用来表示libc是否能使用安全模式。

3.2SELinux策略配置语言

策略是一套指导SELinux安全引擎计算安全决策的规则,它定义了文件客体的类型、进程的域、使用限制进入域的角色及访问许可的规则表达式等。策略的源代码用SELinux配置语言进行描述。

3.2.1基本概念

1.主体和客体

主体(subject)和客体(object)是指系统中的元素,主体是访问客体的进程,客体是系统中的一类实体,在系统中定义好了30种不同的客体类别(class),每个class有定义好的许可。

在/etc/security/selinux/src/policy/flask/security_classes中有class的定义,SELinux定义了30个class,列出如下:

security process system capability filesystem

file dir fd lnk_file chr_file blk_file sock_file

fifo_file socket tcp_socke tudp_socket msgq semmsg

shm ipcnode netif netlink_socket packet_socket

key_socket rawip_socket unix_stream_socket

unix_dgram_socket passwd

每个class都定义了操作许可,如:客体file有19个操作许可,列出如下:

ioctl read write create getattr setattr lock relabelfrom

relabelto append unlink link rename execute swapon

quotaon mounton execute_no_trans entrypoint

2.安全上下文与安全标识符

SELinux给每个主体和客体定义了一个安全上下文(security context)。安全上下文是对主体或客体安全的描述,其格式为:user:role:type,如:root:sysadm_r:sysadm_t,其中root 为用户ID(user),sysadm_r为角色ID(role),sysadm_t为类型(type)ID。安全上下文代表了SELinux的访问控制属性。安全标识符(security identifier,简称SID)是核中激活的安全上下文的序号。

一般情况下,多个属性的组合形成类型,多个类型的组合形成角色,多个角色的组合形成用户。有的属性也可能覆盖多个类型的围,在安全上下文中最重要的是类型。

在文件系统中的每个文件或目录、网络的端口等都指定了一个安全上下文,安全策略则给出了各个安全上下文之间作用的规则。

例如:在policy/file_contexts/program/chroot.fc中,文件chroot的安全上下文被定义如下:/usr/sbin/chroot system_u:object_r:chroot_exec_t

3.类型和类型属性

一个进程的类型(type)又称为域dormain,客体的角色常称为object_r。类型在策略管理中是用得最多的部分,特别是在类型增强(TE)中。用户、角色、域类型和客体类型的关系图如图3-3所示,每个用户有相配的角色,角色有与用户组相关的域类型,而域类型又指定了对客体类型的访问控制权限。

图3-3用户、角色、域类型和客体类型的关系图

类型的属性(Type Attributes)是与一组类型相关的概念。它在TE规则里可代替类型,类型、别名、类型的属性共享同一个名字空间。类型属性定义的语法如下:

type type_name[aliasalias_name(s)] [,attrib1, …, attribn];

例如:type passwd_exec_t, file_type, sysadmfile, exec_type;

其含义是:将属性file_type、sysadmfile和exec_type定义给类型passwd_exec_t。

4.TE模型和RBAC模型

TE模型给进程和客体提供了良好的颗粒控制。RBAC提供了高层次的简化用户管理。SELinux 安全模型是TE模型和RBAC模型的联合体。

TE模型是支持程序运行和域转移的强大类型控制,主体为运行的进程,进程为域类型。TE 访问矩阵定义了域可以访问什么类型的客体,还定义了域类型转移。SELinux类型转移或访问控制基于一对安全上下文和类型的class。

RBAC是基于角色的访问控制(Role-based Access Control)模型,传统的RBAC模型是对角色进行授权,然后将一个或多个角色分配给一个授权用户。SELinux的RBAC模型是:给一个域类型指定授权,然后将域类型指定给角色,将一个或多个角色指定给一个授权用户。例如:root:sysadm_r:sysadm_t中的sysadm_r就是角色。在每个安全上下文中有一个角色ID,对主体来说,它代表了主体当前的角色,对客体来说,角色典型值为object_r,角色对客体来说没意义。

3.2.2TE规则的描述

主体对客体的访问在规则中需要有四个要素,分别说明如下:

源类型(source type):它是主体或者域(一个进程)的类型。

目标类型(target type):它是客体的类型。

对象类别(class):它是访问申请的某一类别资源,如:file。

许可(permission):表示主体对客体访问时允许的操作类型。如:read。

TE规则是策略中的主要部分,它包括

1.属性的定义

属性(Attribute)是具有相似特征的安全类型的组,它是一项工作(如:privmodule)的域类型或者系统中一类客体的所有类型(如:proc_fs),属性是从使用者角度考虑的一项特性。属性名可在策略配置中一直使用,属性名与类型在同一个名字空间中存在。但一个属性名不能放在安全上下文的类型的位置上。属性对可选的MLS策略来说很重要,它的定义样例如下:

attribute domain; #这个属性代表了能指定给进程的每种类型

attribute privuser;#代表能改变它的selinux用户ID

attribute privrole; #代表能改变它的selinux角色ID

attribute privmodule; #代表能运行modprobe

attribute privmem;#代表能访问核存设备

attribute proc_fs; #能指定给/proc下文件的所有类型

下面说明一些非常有用的属性:

1)httpdcontent

属性httpdcontent将与Apache HTTP的策略相关的各种类型组合在一起。它帮助Apache HTTP的PHP脚本等使用httpd的带有content字符的类型。httpdcontent定义如下:

# This is an aliasing relationship

httpd_sys_content_t: httpd_sysadm_content_t, \

httpd_user_content_t

# These types handle different permissions sets for scripts

httpd_sys_script_ro_t

httpd_sys_script_rw_t

httpd_sys_script_ra_t

httpd_sys_content_t是httpd_sysadm_content_t和httpd_user_content_t类型的别名。

2)file_type

属性file_type用于指定给文件的所有类型,当域访问所有的文件类型时,使用它是方便的。属性file_type包括超过170种类型,其部分类型列出如下:

...

device_t

xconsole_device_t

file_t

default_t

root_t

mnt_t

home_root_t

...

3)属性netif_type, port_type和node_type

这些属性与域的网络活动有关。netif_type表示与网络接口相关的类型,允许策略控制在一个接口的发送、接收和其他操作。它包括下面这些类型:

netif_t

netif_eth0_t

selinux学习理解

selinux学习理解 一、什么是selinux。 selinux全称是security enhanced linux,安全强化linux,是MAC (mandatory access control,强制访问控制系统)的一个实现,目的在于明确的知名某个程序可以访问哪些资源(程序,端口)。它的用户在于防范0—DAY攻击(利用尚未公开的漏洞实现攻击),所以它不是防火墙和ACL的替代品,功能也不重复。 举例来说,系统上Apache被发现存在一个漏洞,使得远程用户可以访问系统上的敏感文件(比如/etc/passwd),且修复该漏洞的补丁尚未发布,此时selinux可以起到弥补漏洞的方法。因为/etc/passwd 不具有apache的访问标签,所以Apache对于/etc/passwd的访问会被selinux阻止。 相比其他强制访问系统,selinux有如下访问优势: 1.控制策略是可以查询,而非程序比可见的。 2.可以热更改策略,无需或停止服务。 3.可以从程序初始化、继承、执行三个方面,使用策略进行控制。 4.控制范围广,包括:文件系统,目录,文件,文件启动描述符, 端口,消息接口,网络接口。 二、了解和配置selinux。 1、获取当前selinux运行状态 getenforce:可能返回三种结果

Enforcing:记录报警且阻止可疑行为。 Permissive:记录告警,不阻止可以行为。 Disable:关闭selinux。 默认是Enforcing 2、改变selinux状态。 setenforce 1|0 1代表Enforcing,0代表Permissive。此时不需要重启系统就可以实现。 要永久改变selinxu的状态,在/etc/sysconfig/selinux实现。当从disable切换到enforcing或permissive时,要重启系统并为整个文件系统重新创建安全标签。 3、selinux运行策略。 配置文件/etc/sysconfig/seilnux还包含了selinux运行策略的信息,通过改变SELINUXTYPE值实现,该值有两种可能:targeted代表仅针对预制的几种网络服务和访问请求都要使用selinux。strict代表所有网络服务和访问请求要经过selinux。默认为targeted,包含了几乎所有的网络服务的selinux策略配置,已经默认安装并且无需更改可以直接使用。 4、coreutils工具的selinux模式 常见的属于coreutils的工具如ps\ls等,可以通增加-Z的方式查看selinux的信息。 例:ls -Z /etc/ 查看目录ps -auxZ 查看进程 三、Apache selinux配置实例

CentOS上的SELinux实验

SELinux实验 一、环境搭建 因为实验室的Ubuntu系统本身不带SELinux,加上没有源和网速问题,安装不上。因此建议在虚拟机中用CentOS做。 CentOS下载地址: 中国科学技术大学开源镜像站:https://www.sodocs.net/doc/8218961603.html,/centos/6/isos/x86_64/ 网易开源镜像站:https://www.sodocs.net/doc/8218961603.html,/centos/6/isos/x86_64/ 大家选择CentOS-6.5-x86_64-LiveCD.iso下载就好,650MB左右。 机房的电脑默认没开Intel-VT技术,开机按F12,选择System Setup,然后在Virtualization 选项下开起虚拟化支持。 最后用VMware player或者VirtualBox新建虚拟机即可。 二、实验内容 CentOS已经安装好了SELinux,而且默认开启,用sestatus命令查看SELinux状态, 然后用yum install httpd服务, 在/var/www/html/目录下建立a.html文件,内容随意写点什么。然后重启httpd服务, 在浏览器中访问127.0.0.1/a.html,结果如下:

然后在root目录下建立b.html,内容随意,建立好后把b.html文件移动到/var/www/html/目录下,重启httpd服务。 在浏览器中访问b.html,会提示没有权限,如下图所示: 在终端中用ls–Z命令查看/var/www/html/目录下的文件安全上下文:

可以看见区别,因为b.html文件是root用户创建的,因此没有权限访问。 用chcon -t 命令更改文件的上下文环境: 再次在浏览器中访问b.html,可见可以访问了: 大家可以同理完成“修改/var/www/整个目录的上下文环境,使其为httpd不允许访问的类型”,然后在浏览器中测试。

2.1.5 节点防火墙和SELinux配置.

2.1.5 节点防火墙和SELinux配置 1.防火墙设置 在控制和计算节点上分别执行以下操作进行防火墙设置。(1)停止iptables服务。 [root@controller ~]# service iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] (2)将iptables服务配置为开机不自动启动。 [root@controller ~]# chkconfig iptables off 2.SELinux设置 在控制和计算节点上分别执行以下操作进行SELinux设置。(1)编辑SELinux的配置文件。 [root@controller ~]# vi /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # 将SELinux配置为允许模式 # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted 配置完成后,重新启动控制节点和计算节点。

什么是SELinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,是 Linux? 上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。 SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制 (MAC)系统。对于目前可用的Linux 安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。 大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。 SELinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux 的补丁,最后还有一个相应的安全策略。 众所周知,标准的UNIX安全模型是"任意的访问控制"DAC。就是说,任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件仍到/tmp目录下,那么在DAC 情况下没人能阻止他! 而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。SELinux提供了比传统的UNIX权限更好的访问控制。 1.背景 SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以 GNU GPL 发布。 现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。 2.我们需要安全操作系统的理由 现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS系统自身的牢固性就显得非常的重要。 2.1传统的Linux OS的不足之处 虽然Linux 比起 Windows 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX 一样,有以下这些不足之处。 1)存在特权用户root 任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。2)对于文件的访问权的划分不够细

SELinux TE规则

1. 简介 SELinux策略语言主要描述policy.conf的相关语法,其相关部分如下图所示: 2. 类型强制概念 SELinux策略大部分内容都是由多条类型强制规则构成的,这些规则控制被允许的使用权,大多数默认转换标志,审核,以及固定部分的检查。 SELinux策略大部分都是一套声明和规则一起定义的类型强制(TE:Type Enforcement)策略,一个定义良好、严格的TE策略可能包括上千个TE规则,TE规则数量的巨大并不令人惊奇,因为它们表达了所有由内核暴露出的允许对资源的访问权,这就意味着每个进程对每个资源的访问尝试都必须至少要有一条允许的TE访问规则,如果我们仔细思考一下现代Linux操作系统中进程和资源的数量,就明白为什么在策略中有那么多的TE规则了。当我们添加由TE规则控制的审核配置和标志时,对于具有严格限制的SELinux策略,常常会见到它包含有上千条规则,在“创建和编写SELinux安全策略”中,我们将会讨论如何创建和管理这些大量的规则,本文旨在理解TE规则是如何工作的。 TE规则的绝对数量对理解SELinux策略是一个大的挑战,但是规则本身并不复杂,它们的分类相对较少,所有的规则基本上都属于两类范畴: ?访问向量(AV)规则 ?类型规则 我们使用AV规则允许或审核两个类型之间的访问权,我们在某些情况下使用类型规则控制默认的标记决定。 SELinux的一个重要概念是TE规则是将权限与程序的访问结合在一起,而不是结合用户。所有SELinux 策略语言特性都是处理主体(正常的运行中的进程)对客体(文件、目录和套接字等)的访问权的,主要集中于程序访问控制决策,这也是SELinux的主要益处,它允许SELinux策略编写者基于程序的功能和安

selinux试验

Selinux学习 学习目标:学习和掌握selinux相关管理命令。 学习效果:学会使用基础常用的selinux命令,来实现对selinux服务的管理和应用。一、SELinux简介 SELinux的全称是Security-Enhanced Linux,是由美国国家安全局NSA开发的访问控制体制。SELinux可以最大限度地保证Linux系统的安全。 至于它的作用到底有多大,举一个简单的例子可以证明:没有SELinux保护的Linux的安全级别和Windows一样,是C2级,但经过保护SELinux保护的Linux,安全级别则可以达到B1级。如:我们把/tmp目录下的所有文件和目录权限设置为0777,这样在没有SELinux保护的情况下,任何人都可以访问/tmp 下的内容。而在SELinux环境下,尽管目录权限允许你访问/tmp下的内容,但SELinux的安全策略会继续检查你是否可以访问。 NSA推出的SELinux安全体系结构称为 Flask,在这一结构中,安全性策略的逻辑和通用接口一起封装在与操作系统独立的组件中,这个单独的组件称为安全服务器。SELinux的安全服务器定义了一种混合的安全性策略,由类型实施 (TE)、基于角色的访问控制 (RBAC) 和多级安全(MLS) 组成。通过替换安全服务器,可以支持不同的安全策略。SELinux使用策略配置语言定义安全策略,然后通过checkpolicy 编译成二进制形式,存储在文件(如目标策略 /etc/selinux/targeted/policy/policy.18)中,在内核引导时读到内核空间。这意味着安全性策略在每次系统引导时都会有所不同。 SELinux的策略分为两种,一个是目标(targeted)策略,另一个是严格(strict)策略。有限策略仅针对部分系统网络服务和进程执行SELinux策略,而严厉策略是执行全局的NSA默认策略。有限策略模式下,9个(可能更多)系统服务受SELinux监控,几乎所有的网络服务都受控。 配置文件是/etc/selinux/config,一般测试过程中使用“permissive”模式,这样仅会在违反SELinux规则时发出警告,然后修改规则,最后由用户觉得是否执行严格“enforcing”的策略,禁止违反规则策略的行为。规则决定SELinux 的工作行为和方式,策略决定具体的安全细节如文件系统,文件一致性。 二、使用设置

Selinux配置详解

Selinux配置详解 1.背景 SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以GNU GPL 发布。 现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。 2.我们需要安全操作系统的理由 现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS 系统自身的牢固性就显得非常的重要。 2.1传统的Linux OS的不足之处 虽然Linux 比起Windows 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX 一样,有以下这些不足之处。 1)存在特权用户root 任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。 2)对于文件的访问权的划分不够细 在linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。 对于「其他」这一类里的用户再细细的划分的话就没有办法了。 3)SUID程序的权限升级 如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。

Linux安全中阶教程之SElinux(适合有一定水平的管理员) ...

Linux安全中阶教程之SElinux(适合有一定水平的管理员) 一:SElinux(安全增强linux简介) 1:使用SElinux可以将进程放入在特定的SElinux域,同时赋予系统上的资源(如文件,网络套接字,系统调用等)SElinux上下文。装入SElinux的策略(通常作为系统启动过程的一部分),然后决定哪个进程域可以访问哪些资源上下文。 2:在红帽企业版linux 5中,有关SElinux的选择有下面几种: (1) 我是否需要启用SElinux (2) 一旦启用,我需要SElinux处于允许(permissive)还是强制(enforcing)状态。 (3) 我需要在文件上赋予什么样的SElinux上下文。 3:在实际工作中,红帽企业版linux 5支持一种SElinux策略,叫目标策略(targeted).这个策略在大多数应用之中。在目标策略之中,只有目标进程受到SElinux的影响。而其他进程运行在非限制模式下。目标策略只影响常用的网络应用程序。受到限制的服务在200个以上,有增加的趋势。SElinux限制的典型应用程序如下: (1) dhcp (2) httpd (3) mysqld (4) named (5) nscd (???) (6) ntpd (???) (7) portmap (8) postgres (???) (9) snmpd (???) (10) squid (11)

syslogd 4:启用SElinux /etc/sysconfig/selinux setenforce getenforce /etc/sysconfig/selinux (1) 强制(enforcing):任何违法SElinux的操作都被禁止。 (2) 允许(permissive):任何违反SElinux的操作都会受到一个警告信息。但是行动可以继续。 (3) 停用(disabled):不启用SElinux策略。 Setenforce和getenforce命令 Setenforce 0/1 0 表示允许;1 表示强制 Getenforce 查看当前SElinux的状态。 5:查看SElinux上下文 使用命令 ps –Z 和 ls –Z 每个进程都属于个SElinux域; 每个文件都被赋予一个SElinux上下文。 相关的域和上下文可以使用ls和ps命令的命令选项–Z 来显示 进程SElinux域和SElinux上下文,具有以下格式: System_u:object_r:httpd_exec:s0 说明: 上面的字段以冒号作为分隔符, 第一个字段:用户 第二个字段:角色 第三个字段:类型 第四个字段:与MLS,MCS有关 说明: SEliunx目标策略只于第三个字段有关,即类型字段(TYPE). 二:SElinux介绍 SElinux是美国国家安全局为linux系统设计的一项开放源码项目,主要是希望将其作为系统的最后一道防线,来抵御黑客的攻击和入侵系统。 1. 常见的读取控制 1.1 DAC (Discretionary Access Control)”任意式读取控制”。在DAC的架构下,每个对像都会记录一个拥有者的信息。只要是对象的拥有者,就可以获得该对象的完全控制权限。DAC 允许拥有者完全权限。其他需要读取该对象时候,必须授予适当的权限。但是每个对象仅有一组拥有者的信息,如果需要更复杂的读取控制能力,必须使用ACL。ACL的全名是“访问

SELinux服务器不关闭配置 samba的方法

SELinux服务器不关闭配置samba的方法https://www.sodocs.net/doc/8218961603.html, 2010-03-02 10:28 佚名 CSDN 我要评论() ?摘要:点击一看,是SELinux报警,报警时间与每次客户机访问samba时间一致,估计是SELinux 太严谨的问题,将客户机的错误信息在网上搜索,查找到果然是samba与SELinux冲突的问题。 ?标签:SELinux ? 限时报名参加“甲骨文全球大会·2010·北京”及“JavaOne和甲骨文开发者大会2010” 给大家推荐一款很不错的SELinux系统很有学习价值,这里我主要讲解SELinux系统的应用,包括介绍SELinux知识等方面。前段时间在实验室的4*4核服务器上安装Samba 服务器,解决了服务器安装的硬件问题后,在服务器上配好了Samba,但在客户机访问Samba 时,显示错误。查看到主机机器上右上方有红色感叹号显示。 点击一看,是SELinux报警,报警时间与每次客户机访问samba时间一致,估计是SELinux太严谨的问题,将客户机的错误信息在网上搜索,查找到果然是samba与SELinux 冲突的问题。 PS:曹老师开始用挂载的方法配NSF时也没配成功,同样是SELinux的问题,关闭后可解决。方法一:关闭SELinux,并修改配置文件,使系统启动时不启动SELinux。(我采用的是这种方法) 1.Disable selinux 2.[root@Jie ~]# vi /etc/sysconfig/selinux 3.# This file controls the state of SELinux on the system. 4.# SELINUX= can take one of these three values: 5.# enforcing - SELinux security policy is enforced. 6.# permissive - SELinux prints warnings instead of enforcing. 7.# disabled - SELinux is fully disabled. 8.SELINUX=enforcing 9.# SELINUXTYPE= type of policy in use. Possible values are: 10.# targeted - Only targeted network daemons are protected. 11.# strict - Full SELinux protection. 12.SELINUXTYPE=targeted 把SELINUX设定为disable, 下次启动系统后将会停止SElinux。Linux核心参数(Kernel Parameter)或者可以在核心参数后加上:selinux=0 (停止)或selinux=1 (开启)参数档案/boot/grub/menu.lst 1.title Fedora Core ( 2.6.18-1.2798.fc6) 2.root (hd0,0)

selinux设置出错解决办法

1 永久方法–需要重启服务器 修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。 2 临时方法–设置系统参数 使用命令setenforce 0 禁用SELinux时配置错误导致rhel不能够启动的一种解决方法造成此次问题的原因: 1. 2. linux版本是RHEL5,关闭SELinux时,在修改配置文件 /etc/selinux/config过程中, 3. 4.本应设置: 5.# SELINUX=enforcing 6.SELINUX=disabled 7. 8. 9.不慎设置了SELINUXTYPE参数: 10.#SELINUXTYPE=targeted 11.SELINUXTYPE=disabled 12.重启RHEL的时候,提示: 13.unable to load selinux policy. machine is in enforcing mode. ha lting now. kernel panic-not syncing:attempted to kill init! 14.解决方法: 15. 16.系统启动的时候,按下‘e’键进入grub编辑界面,编辑grub菜单,选 择“kernel /vmlinuz- 2.6.2 3.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet”一 栏,按‘e’键进入编辑,在末尾增加selinux=0,即: 17.kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet enforcing=0 18.按‘b’键继续引导,顺利引导

selinux 中文手册

Getting Started with SE Linux HOWTO: the new SE Linux (简体中文版)

Getting Started with SE Linux HOWTO: the new SE Linux (译者注:本文的最原始版本为2004年3月所写,此份HOWTO是作者在今年2月根据最 新的SE Linux所作的修改后的版本。新的SE Linux与以前的有比较大的变化,而且这项技 术本身也正在飞速的发展,并未最后成熟。阅读本文是需要对Linux本身有一定深度的了解 作为基础的。本文并不是Linux的初级教程,但却是SE Linux技术的初级教程。) 原著:Faye Coker, March 2004. faye@https://www.sodocs.net/doc/8218961603.html, 中文译者:邹立巍, 2006年7月 mini.jerry@https://www.sodocs.net/doc/8218961603.html,; 重要的提示!注意! 我正在根据最新的SE Linux来根本的升级这份文档。我用了很长时间来做这件事情,不过 看来我好像永远没有足够的时间作完它。我现在正在继续做,请相信我! Faye Coker, Feb 04, 2006 (译者注:本人技术出身,英语实在比较差。翻译如有不当之处,敬请指正!) 这份文档已经根据最新的SE Linux做了更改。旧的"Getting Started with SE Linux HOWTO" 的内容将保留在此份文档里,不过绝大多数的内容是根据最新的SE Linux的特点作了修改。新的SE Linux是基于2.6.*内核的,但是仍然支持2.4.*的内核。这份文档的大部分内容是原 来的,我在需要修改的地方做了调整。 这份文档是美国国家安全局的安全加强的Linux(NSA SE Linux)的概述性的说明。我们主 要的环境是基于Debian Linux的,而且大部分的软件包的操作命令实例都是基于Debian的。这份文档主要是针对那些想要基础了解SE Linux的人,所以这里没有对SE Linux比较进介 的介绍。你可以在附录的资源部分找到其它介绍SE Linux的资料。 这份文档已经被Ivan Pesin翻译成了俄文。你可以在 https://www.sodocs.net/doc/8218961603.html,/rus/articles/intro_selinux.html找到俄文的版本。谢谢Ivan做了这些。 目录 1.介绍 1.1.欢迎反馈! 1.2.注意! 1.3.最新的SE Linux的特色 1.4.Fedora用户的策略(policy)源代码目录介绍 2.概览 2.1.为什么要使用SE Linux?

selinux管理和应用

1.1 SElinux概述 SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。大部分使用SELinux 的人使用的都是SELinux就绪的发行版,例如Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或Gentoo。它们都是在内核中启用SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。 1.1.1 SElinux特点 1.MAC 对访问的控制彻底化,对所有的文件、目录、端口的访问都是基于策略设定的,可由管理员时行设定。 2.RBAC 对于用户只赋予最小权限。用户被划分成了一些role(角色),即使是root 用户,如果不具有sysadm_r角色的话,也不是执行相关的管理。哪里role可以执行哪些domain,也是可以修改的。 3.安全上下文 当启动selinux的时候,所有文件与对象都有安全上下文。进程的安全上下文是域,安全上下文由用户:角色:类型表示。 (1)系统根据pam子系统中的pam_selinux.so模块设定登录者运行程序的安全上下文 (2)rpm包安装会根据rpm包内记录来生成安全上下文, (3)如果是手工他建的,会根据policy中规定来设置安全上下文, (4)如果是cp,会重新生成安全上下文。 (5)如果是mv,安全上下文不变。 1.1.2 安全上下文格式 安全上下文由user:role:type三部分组成,下面分别说明其作用: https://www.sodocs.net/doc/8218961603.html,er identity:类似linux系统中的UID,提供身份识别,安全上下文中的一部分。 三种常见的user: user_u-: 普通用户登录系统后预设; system_u-:开机过程中系统进程的预设; root-: root登录后预设; 在targeted policy中users不是很重要; 在strict policy中比较重要,的有预设的selinux users都以"_u"结尾,root除外。 2.role

SELinux概述

SELinux使用了分级的强制访问控制,是Linux核的重要安全措施。SELinux的安全策略工具可从oss.tresys./projects下载。本章分析了SELinux的安全机制,介绍了安全策略配置语言、核策略库的结构,简述了SELinux核模块的实现,还分析了用户空间的客体管理器。 3.1SELinux概述 SELinux是安全增强了的Linux,是Security-enhanced Linux的简写,SELinux改进了对核对象和服务的访问控制,改进了对进程初始化、继承和程序执行的访问控制,改进了对文件系统、目录、文件和打开文件描述的访问控制,还改进了对端口、信息和网络接口的访问控制。早期的Linux核只提供了经典的UNIX自主访问控制(root用户,用户ID,模式位安全机制),以及部分地支持了POSIX.1e标准草案中的capabilities安全机制,这对于Linux系统的安全性是不够的,NSA(the National Security Agency)和SCC(Secure Computing Corporation)共同开发了强大的基于类型加强(Type Enforcement)的强制访问控制(mandatory access control,简称MAC)机制,提供了动态的安全策略机制。 Linux核增加了一个通用的安全访问控制框架,它通过hook函数来控制程序的执行,这个框架就是Linux安全模块(LSM),在LSM上可使用各种安全控制机制(如:Flask机制)来实现对程序的控制。 SELinux应用了类型加强(Type Enforcement,TE)和基于角色访问控制(role-based access control,RBAC)技术。 TE给每个主体(进程)和系统中的客体定义了一个类型,这些类型定义在SELinux的安全策略文件中,以安全标签形式存放在文件本身的扩展属性(extended attributes,简称xattrs)里。 当一个类型与一个进程相关时,这个类型称为域(domain),例如:后台进程httpd的域为httpd_t。 主体(subject)对客体(object)的操作在SELinux中默认下是不允许的,而由策略定义允许的操作。TE使用主体的域和客体类型从策略文件中查找操作许可。例如:策略中的一条规则如下: allow httpd_t net_conf_t:file { read getattr lock ioctl }; 这条规则表示httpd_t域对net_conf_t类型客体的文件有“{}”中所表示的操作权限。SELinux的访问控制规则存放在安全策略文件中,策略文件分为二进制和源代码文件,源代码以策略配置语言的形式描述,由编程者创建和维护。源代码经策略配置工具编译后生成二进制文件。二进制策略被装载到核空间,形成在存中的策略库及缓存,核就可以使用访问控制规则了。 SELinux可以实现非常小颗粒的访问控制,这些细小颗粒的访问控制也造成了安全策略的复杂性。 Linux核的SELinux安全体系由Flask和LSM框架共同组成,LSM是由hook函数组成的安全控制框架,Flask框架将SElinux的策略规则转换成访问控制许可。 在安全策略配置语言中经常用到的名称术语说明如下。 subject 主体,常指一个进程 object 客体,常指一个文件 object class客体的类 permission 许可 context上下文 user用户 role角色 type 类型

linux-SElinux命令详解setsebool命令

配置VSFTPD时本地用户无法切换 用到命令 setsebool -P ftpd_disable_trans=1 setsebool命令查询了相关的资料 是selinux的相关设置项 这是SELinux的设置命令. 其实 man 一下setsebool也知道了: NAME setsebool– set SELinuxboolean value 在不熟悉SELnux前,把SELinux关掉也可以的。有时间研究下SELinux。 Redhat从FC3开始,就使用了SELinux来增强安全,但是使用起来有时候太繁琐,就想关闭它,但是如果安装服务器的时候开始没有图形界面,还真很难找到地方可以关闭。 正确方法如下:修改/etc/selinux/config文件中的SELINUX=”" 为 disabled ,然后重启。 2009年8。22更新 下面是一些收集来的设置命令 ===ftp=== //If you want to share files anonymously chcon -R -t public_content_t /var/ftp //If you want to setup a directory where you can upload files chcon -t public_content_rw_t /var/ftp/incoming You must also turn on the booleanallow_ftpd_anon_write setsebool -P allow_ftpd_anon_write=1 //If you are setting up this machine as a ftpd server and wish to allow users to access their home directorories

Selinux的了解

Selinux的了解 1.背景 SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以GNU GPL 发布。 现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。 2.我们需要安全操作系统的理由 现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS 系统自身的牢固性就显得非常的重要。 2.1传统的Linux OS的不足之处 虽然Linux 比起Windows 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX 一样,有以下这些不足之处。 1)存在特权用户root 任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。 2)对于文件的访问权的划分不够细 在linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。 对于「其他」这一类里的用户再细细的划分的话就没有办法了。 3)SUID程序的权限升级 如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。

实验11 selinux

实验11 SELinux 一、实验要求 掌握SELinux的配置方法。 掌握SELinux三种模式的切换方法。 掌握SELinux在ftp服务中的应用。 二、实验过程 1查看selinux状态 查看文件的security context值 这个就是我们文件的security context值 system_u:object_r:admin_home_t system_u指的是SElinux用户,root表示root账户身份,user_u表示普通用户无特权用户,system_u表示系统进程,通过用户可以确认身份类型,一般搭配角色使用。身份和不同的角色搭配时有权限不同,虽然可以使用su命令切换用户但对于SElinux的用户并没有发生改变,账户之间切换时此用户身份不变,在targeted策略环境下用户标识没有实质性作用。 object_r object_r一般为文件目录的角色、system_r一般为进程的角色,在targeted策略环境中用户的角色一般为system_r。用户的角色类似用户组的概念,不同的角色具有不同的身份权限,一个用户可以具备多个角色,但是同一时间只能使用一个角色。在targeted策略环境下角色没有实质作用,在targeted策略环境中所有的进程文件的角色都是system_r角色。 admin_home文件和进程都有一个类型,SElinux依据类型的相关组合来限制存取权限。 context值的类型会随着文件在不同的位置,会跟着发生变化。 大家进入到/home目录创建文件1,查看该文件的安全值,然后将该文件移动到/root目录下,再查看安全值,安全值是否发生变化。

从头开始生成 SELinux

从头开始生成SELinux 构建一个SELinux 就绪的Gentoo 系统 Serge E. Hallyn (sergeh@https://www.sodocs.net/doc/8218961603.html,), 专职程序员, EMC Serge Hallyn 是IBM Linux Technology Center 安全团队的一名专职程序员。他从College of William and Mary 获得了计算机科学博士学位。他实现了几个安全模型(dte、bsdjail),并对其他的安全模型(seclvl) 和SELinux 贡献了自己的力量。他实现了DTE 及相应的配置文件和分析工具,并在Type Enforcement(SELinux 中的主要技术)方面具有丰富的经验。 简介: SELinux 是美国国家安全局对于强制访问控制的实现,是Linux? 上最杰出的新安全子系统。SELinux 默认安装在Fedora 和Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。本文将向您展示如何手工转换一个非SELinux 的系统,目的是展示SELinux 是如何集成到系统中的。 SELinux 是 2.6 版本的Linux 内核中提供的强制访问控制(MAC)系统。对于目前可用的Linux 安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在20 年的MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。有关这些主题的更多信息的链接,请参见本文后面的参考资料部分。 大部分使用SELinux 的人使用的都是SELinux 就绪的发行版,例如Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或Gentoo。它们

SElinux以及防火墙的关闭

SElinux以及防火墙的关闭 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELINUX="" 为disabled ,然后重启。 如果不想重启系统,使用命令setenforce 0 注: setenforce 1 设置SELinux 成为enforcing模式 setenforce 0 设置SELinux 成为permissive模式 在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux #--------------------------------------------------------------- 查看selinux状态: /usr/bin/setstatus -v 如下: SELinux status: enabled SELinuxfs mount: /selinux Current mode: permissive Mode from config file: enforcing Policy version: 21 Policy from config file: targeted getenforce/setenforce查看和设置SELinux的当前工作模式。 Linux关闭防火墙 1) 重启后永久性生效: 开启:chkconfig iptables on 关闭:chkconfig iptables off 2) 即时生效,重启后失效: 开启:service iptables start 关闭:service iptables stop 需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。 在开启了防火墙时,做如下设置,开启相关端口, 修改/etc/sysconfig/iptables 文件,添加以下内容: -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 或者: /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着。 /etc/rc.d/init.d/iptables stop 关闭防火墙 建议的关闭防火墙命令是 iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F 注: fedora下:

相关主题