建设个网站多少钱,网站建设项目实践报告书,茂名h5网站建设,青岛网站优化排名SELinux 一、概念1、作用2、SELinux与传统的权限区别 二、SELinux工作原理1、名词解释主体#xff08;Subject#xff09;目标#xff08;Object#xff09;策略#xff08;Policy#xff09;安全上下文#xff08;Security Context#xff09; 2、文件安全上下文查看1… SELinux 一、概念1、作用2、SELinux与传统的权限区别 二、SELinux工作原理1、名词解释主体Subject目标Object策略Policy安全上下文Security Context 2、文件安全上下文查看1、命令2、分析 三、SELinux的启动、关闭与查看1、三种配置模式2、原理图3、模式管理3.1 查看当前工作模式3.2 临时开启selinux/临时关闭selinux3.3 永久性关闭3.4 注意 4、selinux的状态4.1 命令4.2 分析 5、selinux配置文件 四、修改安全上下文1、chcon命令1.1 作用1.2 格式1.3 示例 2、restorecon命令2.1 作用2.2 格式 3、semanage命令3.1 作用3.2 格式 4、常用命令组 五、实验实验1实验2 一、概念
SELinuxSecurity-Enhanced Linux是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制MACMandatory Access Control的安全子系统用于各个服务进程都受到约束使其仅获取到本应获取的资源例如电脑上下载了一个美图软件当您全神贯注地使用它给照片进行美颜的时候它却在后台默默监听着浏览器中输入的密码信息而这显然不应该是它应做的事情
1、作用
SELinux 域限制对服务程序的功能进行限制以确保服务程序做不了出格的事情SELinux 安全上下文对文件资源的访问限制确保文件资源只能被其所属的服务程序访问
2、SELinux与传统的权限区别
传统的文件权限与账号的关系属于自主访问控制DACDiscretionary Access Control当某个进程想要对文件进行访问时系统就会根据该进程的所有者/用户组并比较文件的权限若通过权限检查就可以访问该文件注意各种权限设置对root用户是无效的SELinux的以策略规则制定特定程序读取特定文件属于强制访问控制MACMandatory Access Control可以针对特定的进程与特定的文件资源来进行权限的控制即使你是root在使用不同的进程时你所能取得的权限并不一定是root而得要看当时该进程的设置而定则就可以针对进程来进行访问控制
二、SELinux工作原理
1、名词解释
主体Subject
主体就是想要访问文件或目录资源的进程。进程得到资源流程由用户调用命令由命令产生进程由进程去访问文件或目录资源。自主访问控制系统中Linux 默认权限中靠权限控制的主体是用户强制访问控制系统中SELinux 中靠策略规则控制的主体则是进程
目标Object
目标就是需要访问的文件或目录资源
策略Policy
Linux 系统中进程与文件的数量庞大限制进程是否可以访问文件的 SELinux 规则数量就更加烦琐如果每个规则都需要管理员手工设定那么 SELinux 的可用性就会极低所以SELinux 默认定义了两个策略来制订规则2个默认策略 -targeted默认策略用于限制网络服务dhcpdhttpdnamednscdntpdportmapsnmpdsquid以及 syslogd对本机系统的限制极少-mls多级安全保护策略该策略限制更为严格
安全上下文Security Context
所有进程、文件和目录都有自己的安全上下文进程是否能够访问文件或目录就要其安全上下文是否匹配例找对象时男人看作主体女人就是目标男人是否可以追到女人主体是否可以访问目标主要看两人的性格是否合适主体和目标的安全上下文是否匹配但两个人的性格是否合适是需要靠生活习惯、为人处世、家庭环境等具体的条件来进行判断的安全上下文是否匹配是需要通过策略中的规则来确定的关系图解释 当主体(进程)访问目标(文件)时首先和 SELinux 中定义好的策略进行匹配若符合定义的规则且主体的安全上下文和目标的安全上下文匹配则允许访问文件若安全上下文比较失败则拒绝访问并通过 AVCAccess Vector Cache访问向量缓存主要用于记录所有和 SELinux 相关的访问统计信息生成拒绝访问信息注意最终是否可以访问到目标文件还要匹配产生进程主体的用户是否对目标文件拥有合理的rwx权限
2、文件安全上下文查看
1、命令
[rootserver ~]# ls -Z
unconfined_u:object_r:admin_home_t:s0 公共 unconfined_u:object_r:admin_home_t:s0 下载
unconfined_u:object_r:admin_home_t:s0 模板 unconfined_u:object_r:admin_home_t:s0 音乐
unconfined_u:object_r:admin_home_t:s0 视频 unconfined_u:object_r:admin_home_t:s0 桌面
unconfined_u:object_r:admin_home_t:s0 图片 system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
unconfined_u:object_r:admin_home_t:s0 文档
[rootserver ~]# ll -Z
总用量 4
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 公共
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 模板
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 视频
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 图片
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 文档
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 下载
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 音乐
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0 6 3月 22 11:20 桌面
-rw-------. 1 root root system_u:object_r:admin_home_t:s0 1260 3月 22 11:19 anaconda-ks.cfg2、分析 重点为system_u:object_r:admin_home_t:s0 安全上下文用冒号分为四个字段 身份标识Identify相当于账号方面的身份标识有三种类型 root安全上下文的身份是 root默认会映射为unconfined_u 可以通过以下命令查看映射关系 [rootserver ~]# semanage login -lsystem_u系统用户身份其中“_u”代表 user 注意user 字段只用于标识数据或进程被哪个身份所拥有系统数据的 user 字段是 system_u用户数据 user 字段是 user_u seinfo 命令 作用查询身份、角色等信息需要安装才可使用 [rootserver ~]# yum install setools-console -y格式seinfo -参数 参数
-u 列出SELinux中所有的身份user
-r 列出SELinux中所有的角色role
-t 列出SELinux中所有的类型type
-b 列出所有的布尔值也就是策略中的具体规则名称
-x 显示更多的信息[rootserver ~]# seinfo -t | wc -l
5051角色role表示此数据是进程还是文件或目录包含了解就行 object_r代表该数据是文件或目录r代表 role角色的意思system_r进程r代表 role 类型type seinfo -t | more # 5049个类型最重要进程是否可以访问文件主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配 在默认的targeted策略中 类型字段在主体进程的安全上下文中被称作域domain 类型字段在目标文件或目录的安全上下文中被称作类型type 进程的域与文件的类型是否匹配需要查询策略规则 灵敏度用 s0、s1、s2 来命名数字为灵敏度分级数值越大灵敏度越高 例查看之前http的默认网页文件信息
[rootserver ~]# yum install httpd -y
[rootserver ~]# ls -Zd /var/www/html
system_u:object_r:httpd_sys_content_t:s0 /var/www/html三、SELinux的启动、关闭与查看
1、三种配置模式
enforcing强制模式启用SELinux将拦截服务的不合法请求permissive宽容模式启用SELinux遇到服务越权访问时只发出警告而不强制拦截disabled关闭模式SELinux没有运行
2、原理图 3、模式管理
3.1 查看当前工作模式
[rootserver ~]# getenforce3.2 临时开启selinux/临时关闭selinux
[rootserver ~]# getenforce
Enforcing
[rootserver ~]# setenforce 0 # 临时关闭进入宽容模式
[rootserver ~]# getenforce
Permissive
[rootserver ~]# setenforce 1 # 临时开启
[rootserver ~]# getenforce
Enforcing3.3 永久性关闭
[rootserver ~]# vim /etc/selinux/config
SELINUXdisabled 3.4 注意
enforcing状态与permissive状态之间切换时不需要重启系统enforcing、permissive与disabled之间切换时必须重启系统才会生效
4、selinux的状态
4.1 命令
[rootserver ~]# sestatus4.2 分析
[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: 335、selinux配置文件
[rootserver ~]# vim /etc/selinux/config
SELINUXenforcing # 设置模式
SELINUXTYPEtargeted # 设置策略类型
# 注意/etc/sysconfig/selinux文件与上述配置问价内容相同选择一个配置即可四、修改安全上下文
1、chcon命令
1.1 作用
手动修改目标的上下文策略
1.2 格式
# 方法1
chcon [-R] [-t type] [-u user] [-r role] 文件名
-R递归修改当前目录及目录下的所有文件都同时设置
-t后面接安全上下文件的类型字段重要
-u后面接身份标识
-r后面接角色
-v显示变动结果# 方法2
chcon -R --reference范例文件 文件名1.3 示例
例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例3使用httpd服务演示安全上下文值的设定
# 恢复快照
# 开启selinux
# 查看状态
[rootserver ~]# getenforce
Enforcing
[rootserver ~]# yum install httpd -y
[rootserver ~]# mkdir /web1
# 使用xftp将zy网页文件上传
[rootserver ~]# systemctl start httpd
[rootserver ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot /web1
Directory /web1
[rootserver ~]# systemctl restart httpd
# 测试Windows中浏览器中输入server主机的IP地址只会看到apache的欢迎页说明selinux对/web1的安全上下文检测未通过
[rootserver ~]# ls -Zd /var/www/html # 查看默认网页目录的上下文
system_u:object_r:httpd_sys_content_t:s0 /var/www/html
[rootserver ~]# ls -Zd /web1
unconfined_u:object_r:default_t:s0 /web1
# 将/web1的类型修改为默认网页目录的类型
[rootserver ~]# chcon -Rv -t httpd_sys_content_t /web1
[rootserver ~]# systemctl restart httpd
# 测试此时输入IP地址则可以浏览
# 注意也可以使用范例文件修改
[rootserver ~]# chcon -Rv --reference/var/www/html /web12、restorecon命令
2.1 作用
让文件的SELinux类型恢复为默认的SELinux类型默认的SELinux类型与semanage命令有关其参考semanage命令所查询的默认SELinux类型
2.2 格式
restorecon [-Rv] 文件或目录
-R连同子目录一起修改
-v将过程显示到屏幕上例1接上例将~/test 恢复默认类型
[rootserver ~]# cd ~
[rootserver ~]# ls -Z /root
[rootserver ~]# ls -Z ~/test
[rootserver ~]# restorecon -Rv ~/test
[rootserver ~]# ls -Z ~/test3、semanage命令
3.1 作用
用于管理 SELinux 的策略,查询/修改/增加/删除文件的默认SELinux安全上下文,管理网络端口、消息接口等
3.2 格式
semanage 选项 参数 文件选项login|user|port|interface|fcontext|translation|boolean 注意fcontext查询默认安全上下文(重要)参数 -l :查询-a :添加-m :修改-d :删除-D :全部删除-t :类型-r :角色-s :用户-f :文件文件设置对象文件或目录
4、常用命令组
查询默认安全上下文
# 格式
semanage fcontext -l | grep 文件名
[rootserver ~]# semanage fcontext -l | grep /etc/passwd查看允许访问的端口
# 格式
[rootserver ~]# semanage port -l | grep 协议五、实验
实验1
使用httpd服务的端口演示selinux的设定
[rootserver ~]# vim /etc/httpd/conf/httpd.conf
Listen 7777 # 修改80端口为7777
[rootserver ~]# systemctl restart httpd # 报错
[rootserver ~]# semanage port -l | grep http
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 # 7777端口未在放行列表中
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[rootserver ~]# systemctl status httpd.service # 查看日志
[rootserver ~]# semanage port -a -t http_port_t -p tcp 7777 # 添加新端口
[rootserver ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 7777, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[rootserver ~]# systemctl restart httpd # 重启服务成功
# 测试192.168.48.130:7777实验2
使用ssh设置新端口号设置selinux端口策略
[rootserver ~]# semanage port -l | grep ssh
ssh_port_t tcp 22
[rootserver ~]# vim /etc/ssh/sshd_config
Port 2222 # 去掉#修改端口号
[rootserver ~]# systemctl restart sshd # 失败
[rootserver ~]# semanage port -a -t ssh_port_t -p tcp 2222 # 添加新端口
[rootserver ~]# semanage port -l | grep ssh
ssh_port_t tcp 2222, 22
[rootserver ~]# systemctl restart sshd # 成功
# 打开node1输入以下内容测试
[rootnode1 ~]# ssh -p 2222 root192.168.48.130