Linux下文件权限:ACL与selinux

摘要:
接下来,我们来谈谈Linux下文件权限的设置和原则。Linux下的文件权限主要通过两个方面进行控制,一个是ACL,另一个是selinux。selinux的操作模式:selinux控件的主体是程序,目标是程序可以读取的文件资源。1) 主体:selinux主要用于管理程序;2) 目标:主程序可以访问的目标资源,通常是文件系统;3) 策略:由于程序和文件数量众多,selinux将根据某些服务制定基本的访问安全策略。

经常接触电脑文件的人都会知道在电脑中存在的文件其实是有权限限制的,规定了什么用户拥有什么样的权限;这种设定在Windows和Linux上都可以看到,只是大家经常使用的是win的图像化界面可能感觉不是太明显,如果你经常操作过Linux的命令行界面或者架设网站,可能对文件权限有很深的理解。

接下来,就来说一下在Linux下的文件权限的设定以及原理,Linux下对于文件权限的控制主要是通过两个方面,一个是ACL,另一个就是selinux了。

首先来说一下ACL的控制方式。ACL是通过划分拥有者,群组,以及其它来划分用户权限的,每个档案的权限又分为读,写,执行;如下图所示:

Linux下文件权限:ACL与selinux第1张

建立一个档案或者目录的默认权限与umask有关,umask是指建立一个目录或者档案是的默认值。

Linux下文件权限:ACL与selinux第2张

对于目录和档案的建立时与umask的关系如下:

若使用者建立为『档案』则预讴『没有可执行( x )权限』,就是只有 rw 这两个项目,也就是最大为 666 分,预设权限如下: -rw-rw-rw-
若用户建立为『目录』,则由于 x 与能否进入该目录有关,因此默认为所有权限均开放,即为 777 分,预讴权限如下: drwxrwxrwx
建立一个新的档案或者目录时,就是用上面的权限减去umask的值。如下:

Linux下文件权限:ACL与selinux第3张

在讲到ACL时,其实档案都还有一些默认的权限,这些隐藏的属性对于我们来说有时还是很有用的。接下来会说到连个命令:chattr(配置文件的隐藏属性),lsattr(显示隐藏属性)

1)chattr:配置文件的隐藏属性

 Linux下文件权限:ACL与selinux第4张

Linux下文件权限:ACL与selinux第5张

2)lsattr:显示隐藏属性

档案的特殊权限:SUID,SGID,SBIT

档案的权限我们所知道的一般就是读,写,执行,但是大家看一下下面的图:

Linux下文件权限:ACL与selinux第6张

这边多出了一个S的权限,这个就是档案的特殊权限,就是要说SUID或者SGID

1)SUID

当 s 这个标志出现在档案拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个档案的权限状忞:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 癿特殊权限。 那么SUID癿权限对亍一个档案的特殊功能是什么呢?基本上SUID有这样的限制与功能:
1.SUID 权限仅对二迚制程序(binary program)有效;
2. 执行者对亍该程序需要具有 x 的可执行权限;
3. 本权限仅在执行该程序癿过程中有效 (run-time);
4. 执行者将具有该程序拥有者 (owner) 的权限。

Linux下文件权限:ACL与selinux第7张

Linux下文件权限:ACL与selinux第8张

2)SGID

Linux下文件权限:ACL与selinux第9张

不与SUID 不同的是,SGID 可以针对档案或者目录设定!如果是对档案来说, SGID 有如下的功能:
1.SGID 对二迚制程序有用;
2. 程序执行者对亍该程序来说,需具备 x 的权限;
3. 执行者在执行癿过程中将会获得该程序群组的支持!

除了 binary program 以外,事实上 SGID 也能够用在目录上,这也是非常常见的一种用途! 对一个目录设定了 SGID 癿权限后,他将具有如下的功能:
 用户若对于此目录具有 r 不 x 的权限时,该用户能够迚入此目录;
 用户在此目录下的有效群组(effective group)将会变成该目录癿群组;
 用途:若用户在此目录下具有 w 癿权限(可以新建档案),则使用者所建立的新档案,该新档案的群组与此目录的群组相同。

3)SBIT

这个 Sticky Bit, SBIT 目前只针对目录有效,对亍档案已经没有效果了。 SBIT 对于目录的作用是:
 此用户对此目录具有 w, x 权限,即具有写入的权限时;
 此用户在该目录下建立档案与目录时,仅有自己不 root 才有权力删除该档案

设定特殊权限时:

SUID(4),SGID(2),SBIT(1)

使用chmod时加上相应的权限即可,如chmod 4755 filename

上面我们讲了Linux中传统的权限控制方式,被称作自主式访问控制,基本上,就是依据程序的拥有者与档案资源的rwx权限来决定有无存取能力,不过这种DAC的访问控制有几个困扰那就是:

1)root具有最高权限,如果不小心某支程序被有心人士取得,且该程序具有root的权限,那么这支程序就可以在系统上进行任何资源的存取!

2)用户可以取得程序来变更档案资源的访问权限,如果不小心将某个目录的权限设定为777,由于对任何人的权限都会变成rwx,因此该目录就会被任何人所任意存取。

基于以上的问题,所以提出了一种新的访问控制方式那就是以政策规则制定特定程序读取特定的档案,就是委托式访问控制(MAC),他的具体实现就是我们常说的selinux,接下来就来说一下这个selinux的具体操作。

selinux的运作模式:

selinux控制的主体是程序,而目标则是该程序能否读取的档案资源。

1)主体:selinux主要想要管理的就是程序;

2)目标:主体程序能否存取的目标资源,一般就是文件系统;

3)政策:由于程序和档案数量庞大,因此selinux会依据某些服务来制定基本的存取安全策略。目前提供的主要有两种,分别是:

      targeted:针对网络服务限制较多,针对本机限制较少,是预设的策略

      stict:完整的selinux限制,限制方面较为严格。

建议是有预设的targeted策略即可。

除了上面所说的主体,目标和策略,主体能不能存取目标除了策略制定以外,还与安全性文本的设定有关,主体与目标的安全性文本设定必须一致才能顺利存取,安全性文本就相当于文件系统的rwx的,具体的实现过程如下:

Linux下文件权限:ACL与selinux第10张

 接下来,再来说一下安全性文本,安全性文本存在于主体程序和目标档案中,档案中安全性文本是存在于iNode中的。我们先来看一下档案的安全性文本是什么样子的,我们可以用ls -Z 命令来查看文件的安全性文本。

Linux下文件权限:ACL与selinux第11张

 如上图所示:安全性文本一共分为三个字段,代表的意思分别是身份识别,角色,类型;

      身份识别:相当于账号方面的身份识别,只要的身份识别有以后的三种常见类型:root(表示root的账号身份),system_u(表示系统程序方面的识别,通常就是程序),user_u(代表是一般使用者账号相关的身份)

      角色:通过角色字段我们知道这个数据是属于程序,档案资源还是代表使用者。一般的角色有以下的两种:object_r(代表是档案或目录等档案程序),system_r(代表的就是程序,不过,一般的使用者也会被指定为system_r)

       类型(最重要):上面所说的两个字段基本是不重要的,重要的就是类型这个字段,基本上,一个主体程序能不能读取这个档案,与类型字段有关。而类型字段在档案和主体程序中定义不太相同,在档案中被称为类型(type),在主体程序中被称为领域(domain);domain与type搭配,则该程序才能顺利的读取档案资源。

接下来就来说一下具体是怎么进行控制的,拿httpd这个程序来举例子,首先网页一般都是放置在/var/www/html目录中的,来看一下主体程序和目录的权限:

Linux下文件权限:ACL与selinux第12张

httpd 属亍 httpd_exec_t 这个可以执行的类型,而 /var/www/html 则属于 httpd_sys_content_t 这个可以让 httpd 领域 (domain) 读取的类型。文字看起来太太容易了解了!我们使用图示来说明这两者的关系!

Linux下文件权限:ACL与selinux第13张

上述的流程告诉我们几个重点,第一个是政策内需要制订详细的 domain/type 相关性;第二个是若档案癿的type 设定错误, 那即使权限设定为 rwx 全开的 777 ,该主体程序也无法读取目标档案资源啦!不过如此一来, 也就可以避克用户将他的家目录设定为 777 时所造成的权限困扰。

selinux的启动,关闭与观察

selinux中共分为三个模式分别是enforcing(强制模式,代表selinux运行中),permissive(宽容模式,代表selinux运作中,不过只有警告信息,并不实际限制)domain/type(这种模式作为selinux的debug之用)disable(关闭)。

查看目前的selinux的模式可以通过getenforce来查看

Linux下文件权限:ACL与selinux第14张

查看selinux的政策可以通过sestatus来查看:

Linux下文件权限:ACL与selinux第15张

selinux的配置文件位于/etc/selinux/config,我们来查看一下这个档案

Linux下文件权限:ACL与selinux第16张

Linux下文件权限:ACL与selinux第17张

 要永久改变selinux的模式可以在配置文件中修改并重启,临时修改的话可以通过setenforce[0|1]命令。

Linux下文件权限:ACL与selinux第18张

接下来就用www服务器来看一下selinux的运作方式:

首先用ps aux -Z |grep http 来查看一下httpd程序的安全性文本

Linux下文件权限:ACL与selinux第19张

可以看到程序都是属于httpd_t这个domain的。

接下来建立一个简单的网站首页:

Linux下文件权限:ACL与selinux第20张

在浏览器上访问,可以看到:

Linux下文件权限:ACL与selinux第21张

再来看一下这个档案的安全性文本:

Linux下文件权限:ACL与selinux第22张

如果安全性文本设定了错误,我们可以重设安全性文本:

Linux下文件权限:ACL与selinux第23张

Linux下文件权限:ACL与selinux第24张

把错误的安全性文本修改过来,例如/var/www/html中的文件就是要让Apache读取的,如果不能读取那就是不对的,所以应该修改过来,可以使用下面的命令:

Linux下文件权限:ACL与selinux第25张

监控selinux错误信息的配置,开启以后selinux的错误信息都会写到/var/log/audit/audit.log中:

Linux下文件权限:ACL与selinux第26张

selinux的政策与策略管理

策略查询:

Linux下文件权限:ACL与selinux第27张

Linux下文件权限:ACL与selinux第28张

免责声明:文章转载自《Linux下文件权限:ACL与selinux》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LabVIEW 串口通信JS中常遇到的浏览器兼容问题和解决方法【转】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)Linux网络接口配置文件ifcfg-eth0解析

原文:http://blog.51cto.com/xtbao/1671739 https://www.cnblogs.com/arvintang/p/5990599.html http://blog.csdn.net/jmyue/article/details/17288467 在一个计算机系统中,可以有多个网络接口,分别对应多个网络接口配置文件,在/et...

什么是系统封装

什么是系统封装   系统封装,说简单就是把系统制作成镜像的方法刻录到光盘,用在系统安装上面。系统封装,不同于系统的正常安装。最本质的区别在于 系统封装 是将一个完整的系统以拷贝的形式打包,然后用粘贴的形式安装在另外一个系统盘上,而正常安装则是通过 Setup程序进行安装。 举一个不太贴切的例子,你要铺草坪,你可以在那片土地上撒草籽等待草的长成,也可以直...

MLflow系列3:MLflow项目

英文链接:https://mlflow.org/docs/latest/projects.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11945432.html MLflow项目是一种用于以可复用可复现的方式打包数据科学代码的格式。项目的组件包含了API和命令行工具,可以用来在一个工作流中链接多个项目。 概览...

Linux-(telnet,wget)

telnet命令 telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输...

NFS(网络文件系统)

NFS(网络文件系统) 1.关于NFS介绍 1.1NFS在企业中的应用场景 在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享里,例如:BBS产品的图片,附件,头像(注意网站BBS程序不要放NFS共享里),然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资源。N...

Linux系统学习 十八、VSFTP服务—虚拟用户访问—配置虚拟用户访问

配置虚拟用户访问 首先至少要关闭userlist 改完配置文件是要重启服务来使它生效 其实在刚装好vsftp的时候的配置文件不用修改的情况下配置虚拟用户访问控制是最好的 local_root选项不影响 本地用户登录的目录和虚拟用户登录的目录是不产生影响的 为防止有影响,把chroot也注释了 配置虚拟用户登录的步骤: 1、添加虚拟用户口令文件 2、...