SELINUX+PASSWD实战
Posted 杰西啊杰西
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SELINUX+PASSWD实战相关的知识,希望对你有一定的参考价值。
对selinux的学习,系统为centos
文章目录
- (一)Selinux初探
- (二)查看安全上下文
- (三)安装selinux管理工具
- (四)精读策略文件
- (五)编写自定义策略
- (六)PASSWD案例实战
(一)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