DAC(文件许可权),ACL和MAC(SELinux)在Linux文件安全性中起什么作用?


18

我需要澄清/确认/阐述DAC,ACL和MAC在Linux文件安全性中扮演的不同角色。

经过文档研究后,这就是我对堆栈的理解:

  1. SELinux必须允许您访问文件对象。
  2. 如果该文件的访问控制列表(例如,setfaclgetfacl用于ACL安装)显式地允许/拒绝访问的对象,那么就不需要进一步的处理。
  3. 否则,取决于文件的权限(rwxrwxrwx DAC模型)。

我想念什么吗?在某些情况下不是吗?


2
我认为你是对的。您能发布您遇到的问题吗?
凯文M

对于格式错误的问题,我深表歉意。我觉得,当涉及到这一点时,我会进入“试错”模式。我试图自信地掌握它,并希望有人可以更清晰地了解堆栈中每个部分所扮演的角色。
Belmin Fernandez

编辑了问题,以澄清我在寻找答案。
Belmin Fernandez 2011年

Answers:


19

当进程对文件执行操作时,Linux内核按以下顺序执行检查:

  1. 任意访问控制(DAC)或用户指定的访问控制。这包括经典的UNIX样式权限检查和POSIX访问控制列表(ACL)。传统的UNIX检查将当前进程的UID和GID与正在访问的文件的UID和GID进行比较,以了解已设置的模式(读/写/执行)。访问控制列表扩展了经典的UNIX检查,以允许有关权限控制的更多选项。

  2. 强制访问控制(MAC)或基于策略的访问控制。这是使用Linux安全模块(LSM)来实现的,这些模块不再是真正的模块(以前是,但已被删除)。除了传统的UNIX风格的安全性检查,它们还基于其他模型启用附加检查。所有这些模型都基于描述在哪种情况下针对哪个过程允许什么样的选择的政策。

这是一个i节点访问(包括文件访问)示例,以通过链接到在线Linux Cross Reference的链接来支持我的答案。给出的“ function_name(文件名:行)”是针对Linux内核3.14版本的。

函数inode_permissionfs / namei.c:449)首先检查文件系统本身的读取权限(sb_permissionfs / namei.c:425中),然后调用__inode_permissionfs / namei.c:394)检查读取/写入/执行do_inode_permissionfs / namei.c:368)(DAC)中inode上的权限和POSIX ACL ,然后是security_inode_permissionsecurity / security.c:550)中与LSM相关的权限(MAC )。

此命令只有一个例外(DAC然后是MAC):用于mmap检查。但这已在3.15版本的Linux内核(相关的commit)中修复。


极详细的答案与规范来源。谢谢!
Belmin Fernandez

15

DAC== Discretionary Access Controlhttp://en.wikipedia.org/wiki/Discretionary_access_control
MAC == Mandatory Access Controlhttp://en.wikipedia.org/wiki/Mandatory_access_control
ACL == Access Control Listhttp://en.wikipedia.org/wiki/Access_control_list

用于ACL指定要通过控制方法DAC或进行应用的控件MACMAC是显式的,集中控制的,并且除非有明确的权限,否则不允许用户向对象授予权限,而DAC允许用户向其他用户授予对他们可以访问的对象的访问权限。

MAC ACL始终会首先将s应用于请求,如果访问被拒绝,则处理停止。如果允许访问,则DAC ACL应用,如果拒绝访问,则再次处理停止。只有当MAC和都授予访问权限时DAC ACL,用户才能访问他们请求的对象。

SELinuxMACLinux 的实现(还有其他实现),而传统的rwx文件权限与拥有的用户和组结合在一起构成了完整的DAC ACL。该SELinux“政策”在本质上是MAC ACL


1
文件ACL(例如setfacl)从哪里进入?
Belmin Fernandez

1
setacl扩展了基本文件系统,ACL以允许ACL为文件和目录分配多个用户或组。这也是一种DAC实现,因此在SELinux MAC ACLs 之后应用。
Mike Insch

谢谢迈克。还有一个问题:据我的测试所知,显式设置的setfaclACL会覆盖传统权限。在每种情况下都是这样吗?
Belmin Fernandez

据我所知,是的,setacl/ setfacl ACLs将覆盖ACL文件上传统的“简单” 。
Mike Insch

1
迈克,你的笔记setfacl属于答案。
帕维尔·西默达(PavelŠimerda)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.