ILD

DAC & LSM
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2025-7-15 站点:Inside Linux Development

DAC Discretionary Access Control

传统的Linux安全就是DAC,

Traditional Linux security is based on a Discretionary Access Control (DAC) policy,

Linux文件系统权限检查就是这个DAC。通过uid/gid,文件系统的UGO来检查。


Linux上还有另外一个权限检查,就是Mandatory Access Control (MAC)

LSM Linux Security Modules是的MAC的一个实现。


MAC位于DAC之后,DAC检查通过后,在进行MAC的检查。

SELinux和AppArmor是基于LSM框架实现的一套MAC。


LSM通过一些列内核hook点,来实现功能。比如

int inode_permission(struct mnt_idmap *idmap,
                     struct inode *inode, int mask)
{
    
        retval = do_inode_permission(idmap, inode, mask);
        if (retval)
                return retval;
    return security_inode_permission(inode, mask);
}


security_inode_permission这个就是LSM的一个入口。


static inline int do_inode_permission(struct mnt_idmap *idmap,
                                      struct inode *inode, int mask)
{
        if (unlikely(!(inode->i_opflags & IOP_FASTPERM))) {
                if (likely(inode->i_op->permission))
                        return inode->i_op->permission(idmap, inode, mask);

                /* This gets set once for the inode lifetime */
                spin_lock(&inode->i_lock);
                inode->i_opflags |= IOP_FASTPERM;
                spin_unlock(&inode->i_lock);
        }
        return generic_permission(idmap, inode, mask);
}

int generic_permission(struct mnt_idmap *idmap, struct inode *inode,
                       int mask)
{
        int ret;

        /*
         * Do the basic permission checks.
         */
        ret = acl_permission_check(idmap, inode, mask);
        if (ret != -EACCES)
                return ret;

        if (S_ISDIR(inode->i_mode)) {
                /* DACs are overridable for directories */
                if (!(mask & MAY_WRITE))
                        if (capable_wrt_inode_uidgid(idmap, inode,
                                                     CAP_DAC_READ_SEARCH))


这个genric_permission,就是属于DAC。


LSM的代码全部位于security下面。


参考:


Linux DAC 权限管理详解

https://blog.csdn.net/pwl999/article/details/110878563


7.3 About Discretionary and Mandatory Access Control Policies

https://docs.oracle.com/en/operating-systems/oracle-linux/6/porting/section_jsf_zpm_wm.html


Linux Security Modules

https://en.wikipedia.org/wiki/Linux_Security_Modules


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.