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:file{ioctl 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:file{ioctl 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不可以修改密码
在这里插入图片描述

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰西啊杰西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值