selinux是什么?
安全增强型Linux(Security-Enhanced Linux)简称SELinux,它是一个 Linux内核模块,也是Linux的一个安全子系统。
SELinux主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
selinux如何使用?
开启
内核开启selinux
需要加内核参数才能开启。
修改/boot/grub2/grub.cfg
在linux /vmlinuz-xxxxxxxxx
那行最后加上security=selinux selinux=1 enforcing=0
重启。
配置
在配置文件/etc/sysconfig/selinux
中修改SELINUX=permissive
和SELINUXTYPE=targeted
。
这里SELINUX
还可以选enforcing
和disabled
:
- enforcing:强制模式。违反SELinux规则的行为将被阻止并记录到日志中。
- permissive:宽容模式。违反SELinux规则的行为只会记录到日志中。一般为调试用。
- disabled:关闭 SELinux。
这里SELINUXTYPE
还可以选minimum
、ukmls
和ukmcs
: - targeted:对大部分网络服务进程进行管制。
- minimum:以targeted为基础,仅对选定的网络服务进程进行管制。
- ukmls:多级安全保护。
- ukmcs:多类别强制执行模型。
命令
在平时临时开启或关闭:
1 | # setenforce 1 |
1为设置为强制模式,0为设置为允许模式。
使用
安全上下文
传统Linux,一切接文件,由用户,组,权限控制访问。
在Selinux中,一切皆对象(Object),由存放在inode的扩展属性域的安全元素所控制其访问。
- 主体(Subject):可以完全等同于进程。
- 对象(Object):被主体访问的资源。可以是文件、目录、端口、设备等。
所有文件和端口资源和进程都具备安全标签:安全上下文(security context)。
安全上下文有五个元素组成:
1 | user:role:type:sensitivity:category |
- user:root、system_u、user_u
- role:object_r、system_r
- type:主体和目标安全上下文type字段一致才可访问。安全上下文是放置到文件inode内的,和rwx一样。
实际上下文:存放在文件系统中,ls -Z;ps -Z可以查看详细信息。
命令
- 手动修改文件或目录的安全上下文
修改test的安全上下文为aaa_u:bbb_r:ccc_t:s0
。chcon -u aaa_u -r bbb_r -t ccc_t test
- 把文件或目录的安全上下文恢复到默认值
添加一些网页文件到Nginx服务器的目录之后,为这些新文件设置正确的安全上下文。restorecon -R /usr/share/nginx/html/
- 查询系统中的布尔型规则及其状态
查询与httpd有关的布尔型规则。getsebool -a | grep httpd
执行结果:1
2
3
4httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off - 开关一个布尔型规则
开启httpd_anon_write规则。setsebool -P httpd_anon_write on
- 添加目录的默认安全上下文
为Nginx新增一个网站目录/usr/share/nginx/html2
之后,需要为其设置与原目录相同的默认安全上下文。semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
- 添加某类进程允许访问的端口
为Nginx需要使用10080的端口用于HTTP服务。semanage port -a -t http_port_t -p tcp 10080
日志
SELinux违规日志保存在/var/log/audit/audit.log中。
使用sealert分析错误
sealert -a /var/log/audit/audit.log
总结
从前工作上基本都是直接关闭selinux,所以对selinux相当不了解,现在学来也觉得复杂,本文档后期我熟练了再改。