SElinux
Posted www岩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SElinux相关的知识,希望对你有一定的参考价值。
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是基于内核级的系统安全防护,是 Linux历史上最杰出的新安全子系统,在这种访问控制体系的限制下,进程只能运行在他的任务中所需要的和不违背安全策略的任务。文件也是如此 ,若你想要访问一个文件, 你必须具有普通访问权限和 SELINUX 访问权限, 即使以超级用户身份 root 运行进程 , 也要根据进程以及文件或资源的 SELinux 安全性上下文标签来决定是否有权限访问文件。SElinux系统比起平常系统安全性要高得多,每个进程都受到selinux的控制 ,接下来让我们一起来认识一下SElinux。
一、SElinx的个人介绍
传统Linux,一切皆文件,由用户,组,权限控制访问
在SELinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问 , 所有文件和端口资源和进程都具备安全标签:安全上下文(security context)。
安全上下文有五个元素组成: user:role:type:sensitivity:category
- User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于 自由(unconfined)进程
- Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r
- Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于 type实现,多服务共用:public_content_t
- Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified, secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级,s0 最低,Target策略默认使用s0
- Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret, 一 个对象可以有多个categroy, c0-c1023共1024个分类, Target 策略不使用 cartegory
SELinux的状态:
enforcing: 强制,每个受限的进程都必然受限
permissive: 允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
disabled: 禁用
二、SElinux状态查看及相关配置
1、查看当前selinx状态
getenforce 获取selinux当前状态
[[email protected] ~]#getenforce
Enforcing
sestatus 查看selinux状态
[[email protected] ~]#sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
2、设置selinx状态
我们在装系统是默认的selinx都为disabled,就是大部分都是关闭状态,如果想要开启应该修改/etc/selinux/config相关的配置文件,然后重启生效,这是selinux的状态则为开启,可能会导致开机自检时一些应用启动失败,进而导致虚拟机开不起来,我在centos7设置selinux为enforcing状态时就遇到过这种问题,解决办法是在/boot/grub2/grub.cfg文件中,在开头加上一行enforcing=0,默认enforcing值为1,改为1后系统就可以正常开启了。接下来就开始对selinux进行设置了。
3、SELinux安全标签
- 给文件重新打安全标签
chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
-R:递归打标
- 恢复目录或文件默认的安全上下文
restorecon [-R] /path/to/somewhere
- 查看默认的安全上下文
[[email protected] ~]# semanage fcontext –l
- 查看指定目录的期望值
[[email protected] ~]#semanage fcontext -l |grep ‘/var/ftp‘
/var/ftp(/.*)? all files system_u:object_r:public_content_t:s0
/var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0
/var/ftp/etc(/.*)? all files system_u:object_r:etc_t:s0
/var/ftp/lib(64)?(/.*)? all files system_u:object_r:lib_t:s0
/var/ftp/lib(64)?/ld[^/]*.so(.[^/]*)* regular file system_u:object_r:ld_so_t:s0
- 添加安全上下文
[[email protected] ~]# semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.*)?’
- 删除安全上下文
[[email protected] ~]#semanage fcontext -d –t httpd_sys_content_t ‘/testdir(/.*)?’
4、端口标签
- 查看端口标签
[[email protected] ~]#semanage port –l
- 添加端口
[[email protected] ~]# semanage port -a -t port_label -p 9527
- 删除端口
[[email protected] ~]#semanage port -d -t port_label -p tcp 9527
- 修改现有端口为新标签
[[email protected] ~]#semanage port -m -t port_label -p tcp9527
5、布尔值
- 布尔型规则
getsebool
setsebool
- 查看bool命令
[[email protected] ~]#getsebool -a|grep ftp
allow_ftpd_anon_write --> on
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off
- 查看修改过的布尔值
[[email protected] ~]# semanage boolean -l –C
- 设置bool值命令(-p 表示永久生效)
setsebool [-P] boolean value(on,off)
[[email protected] ~]#setsebool -P allow_ftpd_anon_write on
setsebool [-P] Boolean=value(0,1)
[[email protected] ~]#setsebool -P allow_ftpd_anon_write=1
三、selinux相关实验
实验1:配置vsftpd,实现匿名上传。
1. [[email protected] ~]#yum -y install vsftpd
2. [[email protected] ~]#vim/etc/vsftpd/vsftpd.conf 将以下两行注释去掉允许匿名上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[[email protected] ~]#service vsftpd restart 修改文件保存后重启服务
3. [[email protected] ~]#setfacl -m u:ftp:rwx /var/ftp/pub/ 设置ftp服务的acl权限为7有权读写执行
4. [[email protected] ~]#chcon -t public_content_rw_t /var/ftp/pub 设置pub的type类型
5. [[email protected] ~]#setsebool -P allow_ftpd_anon_write on 设置boolean值并永久生效
实验2: 配置httpd开启用户家目录的访问
1.[[email protected] ~]#yum -y install httpd
2. [[email protected] ~]#vim /etc/httpd/conf.d/userdir.conf 设置可以修改目录并指定新值
#UserDir disabled
UserDir public_html
3. [[email protected] ~]#systemctl restart httpd
4. [[email protected] ~]#useradd nanyibo
5. [[email protected] ~]#cd ~wsy
[[email protected] wsy]#mkdir public_html
[[email protected] wsy]#echo hello world > publichtml/index.html
6. [[email protected] wsy]#setfacl -m u:apache:x /home/nanyibo/ 用户家目录只有自己和root能访问,现在设置Apache用户x权限可以抓出文件里的内容
7. [[email protected] wsy]# setsebool -P httpd_enable_homedirs=1 在selinux为开启的状态下别的用户可以进如入
8.找另一台虚拟机测试
curl http://192.168.153.7/~wsy/ 注意最后的/
实验3:修改http端口号为9527
1、修改配置文件
[[email protected] ~]#vim /etc/httpd/conf/httpd.conf
2、增加selinux标签
[[email protected] ~]#semanage port -a -t http_port_t -p tcp 9527
3、重启服务
[[email protected] ~]#service httpd restart
4、查看9527端口是否在监听
[[email protected] ~]#netstat -tnl|grep 9527
tcp 0 0 :::9527 :::* LISTEN
5、端口访问
以上是关于SElinux的主要内容,如果未能解决你的问题,请参考以下文章