h5自响应式网站模版,新品发布会结束语,河北省住房和建设厅网站首页,徐州建设工程网目录 概念
作用
SELinux与传统的权限区别
SELinux工作原理
名词解释
主体#xff08;Subject#xff09;
目标#xff08;Object#xff09;
策略#xff08;Policy#xff09;
安全上下文#xff08;Security Context#xff09;
文件安全上下文查看
先启用…目录 概念
作用
SELinux与传统的权限区别
SELinux工作原理
名词解释
主体Subject
目标Object
策略Policy
安全上下文Security Context
文件安全上下文查看
先启用selinux
命令
分析
SELinux的启动、关闭于查看
三种配置模式
原理图
模式管理
查看当前模式
临时开启/关闭
永久关闭
注意
SElinux的状态
命令
SELinux配置文件
修改安全上下文
chcon命令
作用
格式
示例
restorecon命令
作用
格式
semanage命令
作用
安装
格式
常用命令组
布尔值的查询于修改
实验
实验1
实验2
实验3
概念 SELinuxsecurity-Enhanced Linux是美国国家安全局在linux开源社区的帮助下开发的一个强制访问控制MACMandatory access control的安全子系统用于各个服务进程都受到约束使其仅获取到本应获取的资源 例如电脑上下载了一个美图软件当你使用的时候你却不知道它在后台默默监听这浏览器中输入密码信息
作用 SELinux 域限制对服务程序的功能进行限制以确保服务程序做不了出格的事情 SELinux 安全上下文对文件资源的访问限制确保文件资源只能被其所属的服务程序访问
SELinux与传统的权限区别 传统文件权限与账号的关系属于自主访问控制DACDiscretionary Access Control当某个进程想要对文件进行访问时系统就会根据该进程的所有者/用户组并比较文件的权限若通过权限检查就可以访问该文件注意各种权限设置对root用户是无效的 SElinux的以策略规则指定特定程序读取特定文件属于强制访问控制MACMandatory access control可以争对特定的进程与特定的文件资源来进行权限的控制即使你是root在使用不同的进程时你所能取得的权限并不一定时root而使你时root在使用不同的进程时你所能取得的权限并不一定是root而得要看当时该进程得设置而定则就可以针对进程来进行访问控制
SELinux工作原理
名词解释
主体Subject 主题就是访问文件或目录资源得进程 进程得到资源流程由用户调用命令由命令产生进程由进程去访问文件或目录资源 自主访问控制系统中Linux默认权限中靠权限控制得主题使用户 强制访问控制系统中SELinux中靠策略规则控制得主体则时进程
目标Object 目标就是需要访问得文件或目录资源
策略Policy Linux 系统中进程与文件得数量庞大限制进程是否可以访问文件得SELinux规则数量就更加烦琐如果每个规则都需要管理员手工设定那么selinux的可用性就会极低所以SELinux默认定义了两个策略来制订规则 2个默认策略 -targeted默认策略用于限制网络服务DHCPDhttpdnamednscdnptdportmapsnmpdsquid以及syslogd对本机系统的限制极少 -mls多级安全保护策略该策略限制更为严格
安全上下文Security Context 所有进程、文件和目录都有自己的安全上下文 进程是否能够访问文件目录就要其安全上下文是否匹配 关系图 解释 当主体进程访问目标文件时首先和SELinux中定义好的策略进行匹配 若符合定义规则且主体的安全上下文和目标的安全上下文匹配则允许访问文件 若安全上下文比较失败则拒绝访问并通过AVCAccess Vector Cache访问向量缓存主要用于记录所有和SELinux 相关的访问统计信息生成拒绝访问信息 注意最终是否可以访问到目标文件还要匹配产生进程主体的用户是否对目标文件拥有合理的RWX权限
文件安全上下文查看
先启用selinux 安装 # 安装所需软件
[rootserver ~]# dnf install selinux-policy selinux-policy-targeted -y
[rootserver ~]# vim /etc/selinux/config # 先转为临时模式
SELINUXpermissive
[rootserver ~]# touch /.autorelabel # 重建文件
[rootserver ~]# reboot
[rootserver ~]# vim /etc/selinux/config # 改为强制模式
SELINUXenforcing
[rootserver ~]# reboot
命令 命令 [rootserver ~]# ls -Z
system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
[rootserver ~]# ll -Z
总用量 4
-rw-------. 1 root root system_u:object_r:admin_home_t:s0 1231 11月 15 12:00 anaconda-ks.cfg
分析 重点为system_u:object_r:admin_home_t:s0 安全上下文用冒号分为四个字段 身份标识Identify相当于账号方面的身份标识有三种类型 root安全上下文的身份时root默认会映射为unconfined_u system_u:系统用户身份其中“_u”代表user 注意user字段只用于标识数据或进程被哪个身份所拥有系统数据的user字段时system_u用户数据user字段时user_u seinfo命令 作用查询身份、角色等信息需要安装才可使用 [rootserver ~]# dnf install setools-console -y 格式seinfo -参数 参数 -u 列出SELinux中所有的身份user
-r 列出SELinux中所有的角色role
-t 列出SELinux中所有的类型type
-b 列出所有的布尔值也就是策略中的具体规则名称
-x 显示更多的信息 角色role表示此数据是进程还是文件或目录包含 object_r代表该数据是文件或目录r代表role角色 system_r进程r代表role 类型 [rootserver ~]# seinfo -t | more # 4991个类型 最重要进程是否可以访问文件主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配 在默认的targeted策略中 类型字段在主体进程的安全上下文中被称作域domain 类型字段在目标文件或目录的安全上下文中被称作类型type 进程的域与文件的类型是否匹配需要查询策略规则 灵敏度用 s0、s1、s2 来命名数字为灵敏度分级数值越大灵敏度越高 例查看之前http的默认网页文件信息 [rootserver ~]# dnf install nginx -y
[rootserver ~]# systemctl start nginx
[rootserver ~]# ls -Zd /usr/share/nginx/html
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html
SELinux的启动、关闭于查看
三种配置模式 enforcing强制模式启用SELinux将拦截服务的不合法请求 permissive宽容模式启用SELinux遇到服务越权访问时只发出警告而不强制拦截 disabled关闭模式SELinux没有运行
原理图 图
模式管理
查看当前模式 getenforce [rootserver ~]# getenforce
临时开启/关闭 临时 [rootserver ~]# setenforce 0 # 临时关闭selinux转为宽容模式重启系统失败
[rootserver ~]# getenforce
permissive
[rootserver ~]# setenforce 1 # 临时开启selinux转为强制模式重启失败
[rootserver ~]# getenforce
Enforcing
永久关闭 配置文件修改
注意 enforcing于permissive之间切换时需要重启系统 enforcing、permissive于disabled之间切换时必须重启系统才会生效
SElinux的状态
命令 查看 [rootserver ~]# sestatus
SELinux status: enabled # 是否启用
SELinuxfs mount: /sys/fs/selinux # selinux临时文件系统的挂载点
SELinux root directory: /etc/selinux # 启动目录配置文件位置
Loaded policy name: targeted # 当前加载的策略类型# 策略类型# targeted只保护目标运行默认# minimum少数选定进程进行保护# mls多级安全保护最高级
Current mode: enforcing # 执行的模式重要
Mode from config file: enforcing # 配置文件的模式
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
SELinux配置文件 /etc/selinux/config [rootserver ~]# vim /etc/selinux/config
SELINUXenforcing # 设置模式
SELINUXTYPEtargeted # 设置策略类型
# 注意/etc/sysconfig/selinux文件与上述配置问价内容相同选择一个配置即可
修改安全上下文
chcon命令
作用 手动修改目标的上下文策略
格式 参数 # 方法1
chcon [-R] [-t type] [-u user] [-r role] 文件名
-R递归修改当前目录及目录下的所有文件都同时设置
-t后面接安全上下文件的类型字段重要
-u后面接身份标识
-r后面接角色
-v显示变动结果
# 方法2
chcon -R --reference范例文件 文件名
示例 例1单独修改 [rootserver ~]# touch test
[rootserver ~]# ls -Z test
unconfined_u:object_r:admin_home_t:s0 test
[rootserver ~]# ls -Z /etc/hosts
system_u:object_r:net_conf_t:s0 /etc/hosts
[rootserver ~]# chcon -v -t net_conf_t test
正在更改 /root/test 的安全上下文
[rootserver ~]# ls -Z test
unconfined_u:object_r:net_conf_t:s0 test 例2按照范例文件修改 [rootserver ~]# touch temp
[rootserver ~]# ls -Z temp
unconfined_u:object_r:admin_home_t:s0 temp
[rootserver ~]# ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd
[rootserver ~]# chcon -v --reference/etc/passwd temp
正在更改 /root/temp 的安全上下文
[rootserver ~]# ls -Z temp
system_u:object_r:passwd_file_t:s0 temp
restorecon命令
作用 让文件的SELinux类型恢复为默认的selinux类型 默认的selinux类型于semanage命令有关其参考semanage命令所查询的默认seliunx类型
格式 参数 restorecon [-Rv] 文件或目录
-R连同子目录一起修改
-v将过程显示到屏幕上 例街上例将test恢复默认类型 [rootserver ~]# cd ~
[rootserver ~]# ls -Z /root
[rootserver ~]# ls -Z test
[rootserver ~]# restorecon -Rv test
[rootserver ~]# ls -Z test
semanage命令
作用 用于管理selinux的策略查询、修改、增加、删除文件的默认selinux安全上下文管理网络端口、信息接口等
安装 dnf 安装 [rootserver ~]# dnf install policycoreutils-python-utils -y
格式 参数 semanage 选项 参数 文件-l :查询-a :添加-m :修改-d :删除-D :全部删除-t :类型-r :角色-s :用户-f :文件 选项login|user|port|interface|fcontext|translation|boolean 注意fcontext查询默认安全上下文(重要)
常用命令组 查询文件的默认安全上下文 [rootserver ~]# semanage fcontext -l | grep # 文件名
[rootserver ~]# semanage fcontext -l | grep e/tc/passwd
/etc/passwd[-\]? regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.OLD regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.adjunct.* regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.lock regular file system_u:object_r:passwd_file_t:s0 查看允许访问的端口 [rootserver ~]# semanage port -l | grep gttp
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[rootserver ~]# semanage port -l | grep dns
dns_port_t tcp 53, 853
dns_port_t udp 53, 853
dnssec_port_t tcp 8955
布尔值的查询于修改 作用布尔值可以作为文件规则的开关来控制权限的给予放行阻塞 常用命令 getsebool -a # 列出目前系统上面的所有布尔值条款
getsebool 规则名
setsebool -P 规则名1|0 # 设置写入文件
实验
实验1 使用nginx服务演示安全上下文值得设定 服务端操作 # 恢复快照
# 开启selinux
[rootserver ~]# vim /etc/selinux/config
SELINUXenforcing
[rootserver ~]# reboot
[rootserver ~]# getenforce
Enforcing
[rootserver ~]# dnf install nginx -y
[rootserver ~]# mkdir /www/zy
[rootserver ~]# vim /etc/nginx/nginx.confroot /www/zy;[rootserver ~]# systemctl restart nginx
# 测试返回403说明selinux对/www/zy的安全上下文件检测未通过
# 将/www/zy的策略类型改为已知可以访问的策略
[rootserver ~]# ls -Zd /usr/share/nginx/html/
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html/
[rootserver ~]# ls -Zd /www/zy
unconfined_u:object_r:default_t:s0 /www/zy
[rootserver ~]# chcon -Rv -t httpd_sys_content_t /www/zy
# 注意chcon命令也可以使用参照范例文件修改来实现访问
[rootserver ~]# chcon -R --reference/usr/share/nginx/html/ /www/zy
[rootserver ~]# ls -Zd /www/zy
system_u:object_r:httpd_sys_content_t:s0 /www/zy
[rootserver ~]# systemctl restart nginx
# 测试
实验2 使用nginx服务的端口号修改演示selinux的设定 # 基于上例
# 检查selinux的状态
[rootserver ~]# getenforce
Enforcing
[rootserver ~]# vim /etc/nginx/nginx.confserver {listen 7777;}
# 重启失败
[rootserver ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.
See systemctl status nginx.service and journalctl -xeu nginx.service for details.
# 查看selinux允许的端口号
[rootserver ~]# semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
# 使用semanage命令将7777端口号添加到http_port_t类型列表中
[rootserver ~]# semanage prot -a -t http_port_t -t tcp 7777
[rootserver ~]# systemctl restart nginx
# 测试
实验3 演示ssh端口号修改的selinux设定 [rootserver ~]# vim /etc/ssh/sshd_config # 修改ssh的端口号为2222
port 2222
[rootserver ~]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code.
See systemctl status sshd.service and journalctl -xeu sshd.service for details.
[rootserver ~]# semanage port -l | grep ssh_port_t # 查看ssh的的端口号策略
ssh_port_t tcp 22
[rootserver ~]# semanage port -a -t ssh_port_t -p tcp 2222 # 策略中添加新端口
[rootserver ~]# semanage port -l | grep ssh_port_t
ssh_port_t tcp 2222, 22
[rootserver ~]# systemctl restart sshd