linux下初识selinux

背景:有一天ftp访问某服务器,能看到文件夹就是无法上传文件,最终网上搜索是因为selinux,关闭selinux后可以访问了。(当然可能是其他原因,比如test用户不能操作root用户的文件夹,这个场景除外)

查看SELinux状态

1、/usr/sbin/sestatus -v

SELinux status:      enabled

#SELinux status返回enabled为开启状态

2、getenforce             

##可以用这个命令检查

关闭和打开SELinux

1、临时关闭(不用重启机器),重启机器后恢复。设置SELinux 成为permissive模式,表示SELinux已经启动,但参数不生效,只是会提出警告信息。

setenforce 0

2、临时打开(不用重启机器),重启机器后恢复。设置SELinux 成为enforcing模式,表示SELinux已经启动,且参数生效。

setenforce 1

3、永久性修改,改完配置文件要重启机器

修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled,重启机器即可。

反之则为打开。

简单认识下这个牛逼的selinux

为什么说selinux牛逼呢?关闭selinux后可以访问ftp上传文件了,这个问题折腾我好久。不能好了伤疤忘了疼,是能访问了,但是为啥呢?selinux是何方神圣?

系统资源通过进程来读取更改的,为了保证系统资源的安全,传统的Linux使用用户、文件权限的概念来限制资源的访问,通过对比进程的发起用户和文件权限以此来保证系统资源的安全,这是一种自由访问控制方式(DAC);但是随着系统资源安全性要求提高,出现了在Linux下的一种安全强化机制(SELinux),该机制为进程和文件加入了除权限之外更多的限制来增强访问条件,这种方式为强制访问控制(MAC)。这两种方式最直观的对比就是,采用传统DAC,root可以访问任何文件,而在MAC下,就算是root,也只能访问设定允许的文件。

1) 3种工作模式决定SELinux机制的开和关

enforcing =>强制模式,SELinux已经启动且参数生效

permissive=>宽容模式,SELinux已经启动,但参数不生效,只是会提出警告信息

disabled=>关闭模式,关闭SELinux

2) 4种工作类型(SELinux type) 表示SELinux具体的安全性策略

strict ==>每个进程都受限制(仅在centos5)

targeted==>默认类型为targeted,主要限制网络服务

minimum==>简化版的targetd,限制部分网络服务(centos7)

mls    ==>多级安全限制,较为严格

SELinux下存在不同的规则,SELinux根据不同的工作类型对这些规则打开或关闭(on|off  <布尔值1|0>),然后通过规则的开启与关闭来限制不同进程对文件的读取。

getsebool -a 或者 sestatus -b      # 查看当前工作类型下各个规则的开启与否

setsebool -P  规则名称  [0|1]    # 修改当前工作类型下指定规则的开启关闭,-P表示同时修改文件使永久生效。

3) 安全上下文(security context)

进程必须和文件的安全上下文对应(不是必须一样)才能对其进行访问。

ls -Z 文件名    # 查看文件的安全上下文

ps -eZ          # 查看进程的安全上下文

安全上下文存在于进程与文件中,context随进程一起存入内存中,文件的context存放在其对应的inode中,因此进程在访问文件时,要先读取inode,再判断是否能够访问该文件。

context有5个字段,以:为分割符,分别为user:role:type:sensitivity:category

user为身份识别,unconfined_u不受限的用户或文件,system_u受限的进程或文件

role为文件、进程、用户object_r文件,system_r进程和用户

type为数据类型,何种类型进程访问何种文件

sensitivity安全级别,s0最低,只有在msl下才有意义。

category为划分的不同分类,当它不存在了

chcon命令修改安全上下文security context,格式chcon 选项 目标文件

chcon  # 修改文件的context,-R选项可以递归修改目录,-v选项可以显示context的修改前后的结果

chcon -t  # 修改文件的context的type字段

chcon -u  # 修改文件的context的user字段

chcon -r  # 修改role字段

chcon -l    # 修改安全级别

chcon -h    # 针对软链接文件的修改,不加-h则会修改软链接对应的原文件

semanage修改进程访问的端口号,实际上修改安全上下文的,用semanage工具。

查询某个服务的context type字段,语法:semanage port -l |grep 服务名

添加某个端口为指定服务的访问端口,语法:semanage port -a -t type -p 协议 端口号(不要与常用端口重复)

SElinux的日志

SELinux阻止的进程的日志记录一般存放在/var/log/audit/audit.log文件中。

参考资料

https://blog.51cto.com/13570193/2093299

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容