扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:赛迪网技术社区 来源:赛迪网技术社区 2007年11月2日
关键字: Linux
下面列出了一个admitted数据结构,这个结构是一个有关于可执行文件的列表和指向一系列setuid程序的数组。Failure数据结构没有在这里列出,它和admitted数据结构差不多,但是它会动态的增长,记录那些非授权的setuid程序的访问。每一个admitted数据结构的元素包括下面三个域:efid,proc_nr和programs. Device 这个是F的文件系统的设备号码;Inode 文件F的inode号码;Size 文件F的字节长度;Modif 这里保存了对文件F的最后修改时间;这里的device和inode能够唯一独立的标明一个系统文件F。size和modif允许来检测非授权的文件内容修改。Proc_nr:这个域来标明程序列表的长度,这个列表是可调用文件F的setuid程序的列表数量。Programs:是一个指向setuid程序的一个指针,每一个元素,叫做suidp_id,包含两个域:comm和count。Comm保存了在setuid程序的名称的一个备份。域count是用来统计和指出在F文件上的调用数量的。
在下面的阶段里,我们描述sys_setuid_aclm,这是个新的系统调用,只能被UID=0和EUID=0的root级进程才可以调用的系统调用。Sys_setuid_aclm的目的是用来实现对存储在ACD里面的信息进行读和修改的功能的。
由于root进程可以访问ACD数据库,这样就会出现冲突。因此我们的定义了一个原始的增强程序来处理这些冲突的程序。一般情况下,一个叫做write_pid来实现这个互斥。为了避免对write_pid自身的竞争,这个变量必须可以检测和自动升级。这个功能可以借助调用atomic_access,这个调用是来实现intel体系结构的自动改变的:xchg。实际上,sys_setuid_aclm系统调用从头到尾经历了六个不同的操作,以下就是对这六个操作的描述:
PUT(exe-file,suid-prog,list)增加(exe-file,suid-prog)组合对到特定的ACD列表中,可能返回的值有:
PUTEP (exe-file,suid-prog)组合对已经成功的加入;
PUTPI exe-file已经在ACD中出现,只有suid-prog被加进ACD中。
PUTAE (exe-file,suid-prog)组合对已经在ACD中出现,没有任何的操作执行。
PUTFULL 数据结构已经满;对NR-SUID-EXE的限制已经溢出,升级终止退出。
PUTBUSY ACD数据库忙,另外一个进程正在升级。
GET(exe-file,suid-prog,param)从param-list中读出(param-file-nr,param-proc-nr)组合对。可能的返回值为。
GETOK 这个对已经成功的读出,并且不是列表中的最后一个。
GETL最后一对组合已经关联文件param.file-nr;
GETLACL最后的在ACD中的对已经读出。
GETOB越出边界,没有这样的组合对(param.file-nr,param.proc-nr);
GETBUSY ACD数据库忙,另外一个升级进程正在运行。
PUTHEADERACL(header-acl)在内核内存区存储ACD的头部。这个对于在补丁安装后系统的第一次启动运行很重要。如果这个服务不可行,就会返回PUTBUSY。
GETHEADERACL(local-header-acl)在内核区域重新找访问控制数据库的头部,并且存储在变量local-header-cal中。
DELETE(exe-file,suid-prog,list)在特定的列表中删除(exe-file,suid-prog)组合对。如果exe-file为NULL,就会删除在(*,suid-prog)中所有的组合对,就是用它来阻止suid-prog执行其他的文件。
PUT-PWD(param)写密码文件param->passwd到内核内存区域。它会删除在内核区域和用户区域的密码拷贝。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。