SELINUX+PASSWD实战

Posted 杰西啊杰西

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SELINUX+PASSWD实战相关的知识,希望对你有一定的参考价值。

对selinux的学习,系统为centos

文章目录

(一)Selinux初探

1、查看selinux是否已经开启

/usr/sbin/sestatus -v

2、selinux配置文件

路径:

# 随系统启动而启动
SELINUX=enforcing
# 目标进程被保护
SELINUXTYPE=targeted

(二)查看安全上下文

用户:角色:类型

用户: 这里的用户是指selinux的用户而不是指linux中登录的用户,多个Linux用户可以被映射成一个Selinux用户,反过来就不行
角色: 一个Selinux用户可以拥有多个角色,但是只能有一个角色处于活动状态
类型: 每个Linux的主体和客体都有对应的类型。

1、查看文件的安全上下文

 ls -Z shadow

2、查看进程的安全上下文

3、查看当前用户的安全上下文

id -Z

unconfined_t 没有受到任何限制的类型标签
什么是unconfined域?

4、修改文件安全上下文

chcon -t 文件类型 文件地址

如果是目录就要加-R

(三)安装selinux管理工具

# 查看策略提供的所有相关规则
seinfo 
# 查看策略的详细信息
sesearch
# 列出selinux所有布尔值
getsebool -a
# 设置selinux布尔值
setsebool
# -P 表示在重启之后依然有效
setsebool -P dhcpd_disable_trans=0

1、安装setools

yum install -y setools

2、使用sesearch查看规则

sesearch --role_source object_r --allow | more

显示出访问向量AV

3、使用配置工具

(但是不好用)

yum install policycoreutils-gui

安装完成后可以看到

输入root密码
可以看到该工具

4、使用semanage

(1)查看所有的selinux用户

semanage user -l

(2)查看selinux用户和linux登录账号用户的映射关系

semanage login -l

(3)查看布尔值

getsebool -a

(4)semanage图形化界面

system-config-selinux

tips:
① 策略模块也是一种内核模块,需要Makefile来编译

② 策略可以使用可视化界面添加,也可以使用命令来添加

(四)精读策略文件

1、安装策略分析管理器GUI

apol(即analyze policy【分析策略】)工具是一个成熟的SELinux策略分析工具,它位于setools工具包中。使用它打开policy.xx文件即可分析所有的相关策略。xx为策略编译器(checkpolicy)的版本号。

策略管理器apol本来是自动安装,但是为什么找不到嘞?

原因是需要安装图形化界面(哎)
如果是普通用户要切换到root用户才能执行

 yum install setools-gui


再次输入apol可以出现界面了

2、查看内核策略

centos系统下,内核二进制文件路径如下:

使用apol软件打开
终端运行apol命令:



找到刚才路径下的Police文件

加载完成

查看策略文件

可以看到策略统计的摘要信息

(五)编写自定义策略

1、创建项目文件夹

2、创建策略文档jessy.te

3、使用策略语言编写策略文档

(1)使用文本编辑器打开

(2)编写策略文件

为了简单说明,暂时没有编写角色

# 申明这是策略模块 ,模块名为jessy ,版本号(自己瞎取,方便以后修改后进行区别)1.0.0
policy_module(jessy,1.0.0)

# 申明类型,selinux中没有预先定义类型,我们必须自己申明
type jessy_t;
type jessy_exec_t;

# 编写访问向量(规则) 允许jessy_t类型的主体对jessy_exec_t类型的file客体进行读、写、执行、获取的操作
allow jessy_t jessy_exec_t:file read write execute getattr;

进行编译

make -f /usr/share/selinux/devel/Makefile 

没有报错就是成功

文件夹中多了jessy.pp文件(内核策略文件)

切换到root用户,查看所有已有的策略(内核策略模块)

semodule -l


加载内核策略模块(jessy.te)

semodule -i jessy.pp

等待一会,再进行查看,加载成功

如果不想要该模块,移除即可

semodule -r jessy


(六)PASSWD案例实战

1、查看客体类型

(1)shadow文件

可以看到shadow文件的客体类型是shadow_t

(2)passwd进程

在普通用户下运行passwd程序,输入当前密码但是不要输入新密码
另起终端,转换到root用户,查看passwd进程的类型是passwd_t

(3)passwd文件

passwd文件的类型是passwd_exec_t

2、创建策略文件

(1)创建文件夹以及空策略文件

(2)编写策略文件

① 这里初步编写类型强制和域转变有关的策略,还未涉及到角色和用户
j_passwd.te

policy_module(j_passwd,1.0.0)

# 使用系统里面的类型需要gen_require引用,不然就是重定义,会编译通过但无法安装
gen_require(`
	type user_t;
	type passwd_t;
	type passwd_exec_t;
	type shadow_t;
')

#允许passwd_t对shadow_t类型的文件进行如下操作
allow passwd_t shadow_t:fileioctl read write create getattr setattr lock relabelfrom relabelto append unlink link rename;

# 允许shell(user_t)在passwd可执行文件(passwd_exec_t)上启动execve()系统调用
allow user_t passwd_exec_t:file getattr execute;
# 提供了对passwd_t域的入口访问权
allow passwd_t passwd_exec_t:file entrypoint;
# 原始类型(user_t)到新的类型(passwd_t)进行域转变需要transition许可
allow user_t passwd_t:process transition;

# 设置默认的域转变
type_transition user_t passwd_exec_t :process passwd_t;

② 编译
tips: 改变了策略文件的任何一点都要重新make编译

编译成功可以看到文件夹中多了j_passwd.pp文件(内核策略文件)

3、安装策略模块j_passwd.pp

由于策略模块其实是内核模块,所以安装策略模块与内核加载模块方法类似。

切换到root用户,加载内核策略模块(j_passwd.pp)

semodule -i j_passwd.pp

查看所有已有(已安装)的策略(内核策略模块)

semodule -l

安装成功

4、创建LInux用户Alice和Bob

规定Alice可以修改自己的密码,Bob不可以修改自己的密码。

(1)创建登录用户

这里其实就是创建登录账号,注意区分Selinux用户。切换到root用户进行创建。

#创建Alice账号
adduser Alice

#创建Bob账号
adduser Bob

#修改Alice密码
passwd Alice

#修改Bob密码
passwd Bob

(2)为Alice和Bob授权

编辑sudoers文件,要先对sudoers文件加权,将文件权限改为可读写。

chmod 640 /etc/sudoers


如下修改文件


将文件权限改为只读

(3)登录测试


输入密码登录测试

5、创建新角色restricted_user_r

创建新角色Selinux角色,并且拥有restricted_user_r角色的用户(Selinux用户)不可以进行修改密码。

(1)创建RestrictedUser策略目录

(2)使用命令模板生成restricted_user_r角色策略文件


(3)查看restricted_user_r.te策略文件

(4)修改模板

policy_module(restricted_user, 1.0.2)

########################################
#
# Declarations
#
userdom_unpriv_user_template(restricted_user)

########################################
#
# restricted_user local policy
#

domain_use_interactive_fds(restricted_user_t)

files_read_etc_files(restricted_user_t)

miscfiles_read_localization(restricted_user_t)

# allow  restricted_user to execute core commands
corecmd_exec_bin(restricted_user_t)

# allow restricted_user to use a shell
corecmd_exec_shell(restricted_user_t)

# allow restricted_user to use sudo
sudo_role_template(restricted_user, restricted_user_r, restricted_user_t)

# allow restricted_user to know their SELinux context
selinux_getattr_fs(restricted_user_t)


gen_require(`
	type user_t;
	role user_r;
')
sudo_role_template(user, user_r, user_t)

(5)编译并安装restricted_user_r

(6)查看角色


使用策略编辑器查看

(7)完善j_passwd.te文件并生成restricted_user_u selinux用户

加入user_r,restricted_user_r相关策略文件的配置

policy_module(j_passwd,1.0.1)

# 使用系统里面的类型需要gen_require引用,不然就是重定义,会编译通过但无法安装
gen_require(`
	type user_t;
	type passwd_t;
	type passwd_exec_t;
	type shadow_t;
	
    # 引入user_r
	role user_r;
    # 引入restricted_user_r
	role restricted_user_r;
')

#允许passwd_t对shadow_t类型的文件进行如下操作
allow passwd_t shadow_t:fileioctl read write create getattr setattr lock relabelfrom relabelto append unlink link rename;

# 允许shell(user_t)在passwd可执行文件(passwd_exec_t)上启动execve()系统调用
allow user_t passwd_exec_t:file getattr execute;
# 提供了对passwd_t域的入口访问权
allow passwd_t passwd_exec_t:file entrypoint;
# 原始类型(user_t)到新的类型(passwd_t)进行域转变需要transition许可
allow user_t passwd_t:process transition;

# 设置默认的域转变
type_transition user_t passwd_exec_t :process passwd_t;

# user_r角色绑定user_t
role user_r types user_t;
# user_r角色绑定passwd_t
role user_r types passwd_t;

#继承user_r绑定的所有角色
dominance  role restricted_user_r role user_r;

#不绑定passwd_t
role restricted_user_r types -passwd_t;

# 当user_r角色执行passwd_exec_t文件时转换成角色restricted_user_r角色
role_transition user_r passwd_exec_t restricted_user_r;

#创建restricted_user_u selinux用户
gen_user(restricted_user_u, restricted_user, restricted_user_r, s0, s0)

(8)编译并安装


查看新生成的restricted_user_u用户


5、其他方法生成restricted_user_u

除了在j_passwd.te策略文件中一次性生成selinux用户restricted_user_u之外,还可以采用以下两个方法生成restricted_user_u.

(1)可视化界面操作法

①打开可视化管理界面

system-config-selinux

② 如下添加用户
为了方便,继承了user_r角色。在同一时间,用户只能是一种角色,但是角色之间可以相互转换。

添加完成

(2)semanage管理

semanage user -m  -R “user_r restricted_user_r” restricted_user_u 

添加完成

6、创建Selinux用户和Linux用户之间的映射

同样有可视化方法和semanage方法两种。

(1)可视化方法

将Alice Linux用户映射为staff_u Selinux用户

将Bob映射为restricted_user_u

(2)semanage管理方法

7、Passwd密码程序测试

Alice可以修改密码

Bob不可以修改密码

以上是关于SELINUX+PASSWD实战的主要内容,如果未能解决你的问题,请参考以下文章

SELinux的策略与规则管理相关命令seinfosesearchgetseboolsetseboolsemanage

SELinux系列(十六)—三种策略模式详解 TargetedMLS和Minimum

linux命令笔记

kvm 安全相关:selinux svirt

Linux学习61 企业军工级别安全策略-SELinux简介

linux管理员技术-01 -SElinux配置高级连接防火墙管理策略