到现在我还没有看到cred被加入内核的mainline,可惜啊,不过我个人认为它是很不错的,其精髓就是补丁 上的那一句,就是将权力和授权分离,这句话看似有点不知所云,难道权力不就是授权吗?其实是不一样的,权力有一种与生俱来的意思,它是客观的东西,所谓天 赋人权是也,而授权有种主观的意思,它可能是暂时的,就是说为了使得你可以完成某项特定的工作而暂时给你一些权力,然后给你授权的实体还是可以剥夺这种暂 时给你的权力的,与之相反,权力就不能被剥夺,因为它不是别人授予的,而是与生俱来的,如果说可以剥夺或者改变,那也只能是自己来,别人可以影响的只有你 的授权。
     linux的cred补丁就是将一些授权放到了一个struct cred结构体中了,这个结构体是:
struct cred {
    atomic_t        usage;
    uid_t            uid;        //这个就是该cred被授予的uid
    gid_t            gid;        //该cred被授予的gid
    struct rcu_head        exterminate;   
    struct group_info    *group_info;
};
这 个cred叫做什么比较好呢?其实它就是一张认证或者令牌,cred可以被单独制作和分发,比如可以制作一张uid为0,gid为0的root认证的 cred,如果需要检查授权的地方只需要检查这个cred结构体就可以了,此时执行绪本身的uid并没有变,不会因为授权了一个新的uid就可以胡作非为 了,授权给他的这个cred是让它做特定的事情的,其实也仅仅是这个特定的事情才会以这个cred中的uid或者别的字段作为判断权限的依据。这个特性有 什么用呢?想象一下现在的nfs的rpc实现,最后的网络传输和数据读取是靠一个守护进程完成的,普通应用nfs的用户进程只不过是接口vfs而已,底下 就是另外的进程的事情了,于是rpc中有复杂的授权体系,如果按照这个补丁的想法,这将是多么简单,直接将一个cred给了一个底层运用rpc的用户进 程,该cred中有必要的授权。另外再看看文件访问,如今在task_struct中有专门的fsuid字段负责这个授权,虽然没有什么不好,但是想想总 是不是那么直观,我们看一下用cred怎么实现:
void change_fsuid(struct cred *cred, uid_t uid)
{
    cred->uid = uid;
}
然后在访问的时候就在特定的文件系统中判断current的cred中的uid就可以了,而且这个cred随时可以被任何实体更换,任何实体都可以给任何进程任何授权,并且还可以剥夺相应的授权,美妙啊!如果在内核中用上这个特性该有多好。

对struct cred新理解相关推荐

  1. struct cred

    将权力和授权分离,这句话看似有点不知所云,难道权力不就是授权吗?其实是不一样的,权力有一种与生俱来的意思,它是客观的东西,所谓天 赋人权是也,而授权有种主观的意思,它可能是暂时的,就是说为了使得你可以 ...

  2. CFS调度器的思想的新理解

    本文通过详细分析老的调度器来说明cfs的优势.总是新理解新理解的,我怎么这么没完没了啊,其实每隔一段时间我都会在工作之余再读一读linux内核源代码的关键部分,每次读都有新的理解,然后就第一时间将心得 ...

  3. ###关于k-means的新理解

    ###关于k-means的新理解 1.k-means++聚类优化算法 若给定足够的迭代次数,k-means算法就能收敛,但是有可能在局部最小值点收敛.k-means收敛局部极值的原因很可能是初始化簇类 ...

  4. 《新理解矩阵1》:矩阵是什么?

    原文链接:http://spaces.ac.cn/index.php/archives/1765/ 前边我承诺过会写一些关于自己对矩阵的理解.其实孟岩在<理解矩阵>这三篇文章中,已经用一种 ...

  5. python中pack什么意思_Python struct.pack如何理解其原理

    def setUTF(self, value): """ """ tag = '>h' if self.endian == HIGHT ...

  6. 关于 typedef typedef struct typedef union理解 --写给不长脑子的我

    来源: http://zhidao.baidu.com/link?url=qxzkx5gaoCfnHnygYdzaLEWkC45JqNYYUk42eHHjB0yB3ZMgHv6lGjnq3CRfgQw ...

  7. 谷粒商城RabbitMQ锁库存逻辑详解--新理解(长文警告)

    前言 不废话,上来就说,代码我会放挺多,写过这个项目的自然能懂,如果真的像理解的请认真看哦 分析 /*出现的问题:扣减库存成功了,但是由于网络原因超时,出现异常,导致订单事务回滚,库存事务不回滚(解决 ...

  8. 对于函数式编程的新理解

    刚刚在洗澡的时候在想函数式编程的东西,函数式编程不是将函数看成一个对象,函数就是变量,它可以作为参数使用,它既可以作为左值来使用也可以作为右值来使用,函数式编程任何一个函数对于同一个输入,既在函数参数 ...

  9. Adaboost新理解

    Adaboost有几个难点: 1.弱分类器的权重怎么理解? 误差大的弱分类器权重小,误差小的弱分类器权重大.这很好理解.在台湾大学林轩田老师的视频中,推导说,这个权值实际上貌似梯度下降,权值定义成1/ ...

最新文章

  1. 快速排序 java 实现
  2. JVM学习笔记之-对象的实例化,内存布局与访问定位,直接内存(Direct Memory)
  3. SVN的安装笔记和要注意的问题
  4. Oracle不连续的值,如何实现查找上一条、下一条
  5. A.CIMS 计算机集成管理系统,cims系统(smis系统是什么)
  6. 什么是spark的惰性计算?有什么优势?_spark——spark中常说RDD,究竟RDD是什么?
  7. 《大数据》第一届编委会顾问委员会议圆满召开
  8. vuejs模仿实现一个电影分享类网站
  9. PowerShell在SharePoint 2010自动化部署中的应用(1)--代码获取
  10. 数据结构---哈希表的认识
  11. git rebase 和 merge的区别
  12. 不同语言实现两个变量的交换 Python之禅
  13. android系统壁纸下载,提前用上Android 12系统 官方高清壁纸下载
  14. 维基百科公式不显示怎么办 找不到latex公式怎么办?
  15. it行业se是_计算机行业SSE、SE、BSE、PE、PL各自是什么职位意思?
  16. 使用IDEA如何将项目打包成war包
  17. 几种过滤URL和FORM中非法字符的方法
  18. [Mysql] 创建和操纵数据表
  19. 【ps】教你用ps制作木质字母
  20. 一文彻底搞懂MySQL基础:B树和B+树的区别

热门文章

  1. 前台离岗提示语_前台卫生温馨提示语
  2. TinyMce 修改插件 实现多文件/图片上传
  3. 电脑处理器多核心好还是高频率好?
  4. 没有人能比快递员更懂通信协议(sig mesh协议栈之网络架构)
  5. 三角分解(LU分解)
  6. 【漏洞发现-1】操作系统之漏洞探针类型及利用
  7. 通过瀑布流加深对js的理解
  8. eclipse设置炫酷唯美背景图片
  9. 将字符串形式的日期转换成日期对象
  10. 湖南省永州市谷歌高清卫星地图下载