系统环境:FC20
1.安全访问机制分析。
1.1 DAC
Discretionary Access Control(DAC)。
DAC是由对象的所有者来决定文件的访问权限。
1.2 MAC
Mandatory Access Control(MAC)。
MAC由系统来决定文件的访问权限。
MAC是DAC系统的一个补充。在MAC的环境下面,每一个程序都在一个仅仅开放了相关权限的sandbox里面执行,所以即使出现问题,也仅仅是这个sandbox里面出现问题,不会影响到sandbox外面的资源。
1.3 MAC优势
MAC授权给程序,不是用户,DAC往往是授权给用户。
MAC的权限不会被对象的所有者修改。
MAC还可以保护DAC不能保护的资源,比如socket,或者进程。
MAC模块示例:
-
policy_module(myapp,1.0.0)
-
-
########################################
-
#
-
# Declarations
-
#
-
require {
-
type unconfined_t;
-
type usr_t;
-
attribute entry_type;
-
type fs_t;
-
type setroubleshootd_t;
-
role unconfined_r;
-
attribute ttynode;
-
attribute ptynode;
-
attribute domain;
-
}
-
type myapp_t;
-
type myapp_exec_t;
-
type myapp_file_t;
-
-
domain_type(myapp_t)
-
domain_entry_file(myapp_t, myapp_exec_t)
-
-
allow unconfined_t myapp_file_t : file manage_file_perms;
-
allow myapp_t myapp_file_t : file manage_file_perms
展开为单行的规格描述如下:
-
policy_module(myapp,1.0.0)
-
-
########################################
-
#
-
# Declarations
-
#
-
require {
-
type unconfined_t;
-
type usr_t;
-
attribute entry_type;
-
type fs_t;
-
type setroubleshootd_t;
-
role unconfined_r;
-
attribute ttynode;
-
attribute ptynode;
-
attribute domain;
-
}
-
type myapp_t; #myapp运行时的domain
-
type myapp_exec_t; #可执行文件,用于切换domain
-
type myapp_file_t; #myapp私有的文件
-
-
typeattribute myapp_t domain; #基本腰声明的domain
-
-
allow unconfined_t myapp_file_t : file manage_file_perms; #read write to file myapp_file_t,当前的shell可以查看,此类型的文件
-
allow unconfined_t myapp_file_t : file { relabelto }; #user can change file to myapp_file_t,当前的shell可以切换文件的type
-
allow myapp_file_t fs_t : filesystem {associate}; #切换文件type,必须要包含此类
-
-
allow unconfined_t myapp_exec_t : file {getattr execute manage_file_perms}; #read wirte to file myapp_exec_t, execture file, 对可执行文件有执行权限
-
allow setroubleshootd_t myapp_exec_t : file {getattr}; #一个selinux需要的
-
allow unconfined_t myapp_exec_t : file { relabelto }; #可以将一个可执行文件的type设置为myapp_exec_t user can change file to myapp_exec_t
-
allow myapp_exec_t fs_t : filesystem {associate};
-
-
#domain transfer
-
allow myapp_t myapp_exec_t : file entrypoint; #文件的entry point
-
allow unconfined_t myapp_t : process transition; #两个domain可允许切换
-
role unconfined_r types myapp_t; #role are authorized to domain myapp_t
-
-
type_transition unconfined_t myapp_exec_t : process myapp_t; #执行时,可以进行自动切换
-
-
allow myapp_t unconfined_t : process sigchld;
-
-
allow myapp_t {ttynode ptynode} : chr_file rw_file_perms; #for access tty pty file for log
-
allow myapp_t myapp_exec_t : file {getattr execute manage_file_perms}; #read wirte to file myapp_exec_t, execture file
-
allow myapp_t myapp_file_t : file manage_file_perms; #for acess myapp private file
编译方式:
su
cd /usr/share/selinux/devel
make load 或者 make reload
阅读(2525) | 评论(0) | 转发(0) |