基于安全的一些思考--访问控制
来源:互联网 发布:阿里云 健康管理平台 编辑:程序博客网 时间:2024/06/05 03:12
最为复杂的访问控制模型用于分布式计算体系结构和移动代码系统,如CORBA和Java模式。通常访问控制系统基于很难使用的复杂的数学模型。
接下来介绍传统的UNIX访问控制系统和基于访问控制列表(ACL,Access Control Lists)的Windows模型
在UNIX中,每个用户用一个整数表示,称为用户ID(UID),用户也可以属于“组”,组是允许人们在合作项目上工作的虚拟集合,每个组都有自己的组标识符,称为组ID(GID)。用户可以属于多个组。
UID为0是特殊的情况,这是系统管理员(root)使用的UID,UID为0给系统管理员提供了对整个机器的访问和控制权限。
系统中的所有对象,包括文件、设备、目录,都被分配一个UID和GID。除了所有者标识符,每个对象都有与它关联的访问权限,这个权限指定谁有权读、写和执行这个对象。每个文件有三组“rwx”这样的访问权限。第一组用于文件的拥有者;第二组用于同组的用户,第三组用于系统中的其他用户。UID为0的用户可以对任何对象做任意操作,不受权限控制。
当用户执行一个程序时,执行这个程序的用户的UID被分配给执行中的程序和它所有的子进程。这是UNIX访问控制的基础。对象总是被运行中的进程访问。当试图访问某一对象时,操作系统先检查被分配给当前进程的有限UID(EUID)和有效GID(EGID),然后再查看他们是否有需要的访问权限。
通常UID与进程的真实UID相同,然而有些程序需要对系统资源进行特殊访问,它们能基于一组严格的规则改变进程的EUID。这种程序被称为setuid程序,对于组也有相似的概念,称为setgid编程
用户可以对他拥有的任何文件随意设置权限,root用户可以随意设置所有文件权限。
其他人不能修改文件权限
系统不对root用户做读或写的检查,然而ROOT用户要接受执行权限的检查
Setgid\setuid只对可执行程序起作用,这些权限表示UID\GID\EUID\EGID标识符是否可以被可执行程序修改。举个例子,如果一个文件拥有setuid权限,当它运行时,进程的EUID被设置成文件属主的UID
UNIX shell提供两个基本命令用于修改文件属性:chmod和chown。Chmod设置文件和目录权限,chown修改文件和目录的所有者(所属用户和所属组)
Chmod命令设置时,基本上权限可以被认为是4个八进制数字,每一个权限由单个数字的一个位来表示。八进制的最高位通常是0,最高位的数字编码了setuid,setgid,sticky位。这个数字的最高有效位改变setuid位,最低有效位改变sticky位。第二个有效数字代表文件属主的权限,第三个是组用户权限,最后一个是其他用户权限。对于这三个八进制数字,每个数字的最高有效位表示读权限,第二位表示写权限,最低有效位表示执行权限
文件权限可以通过调用带-l 标识的ls命令查看。在大多数列表中,权限显示在左边第一列上,用10个字符表示。第一个字符指示条目是否是一个目录,如果是目录显示d否则显示一个横杠,剩余9字符被分成3组,第一组代表文件属主权限,第二组代表组用户权限,第三组代表其他用户权限,每组权限按序表示读、写、执行
长目录列表也显示与属主UID相关联的用户名、组名或ID、文件最后的修改时间,以及其他一些注意事项。注意,除非能完全控制系统环境,否则不要相信最后修改时间是准确的,因为这是可以编程控制的,。例如,可用touch 命令随意更改最后修改时间
Chown命令可以改变文件的所有者和组别,通常只有root用户可以使用这个命令
运行程序时,要注意一个重要的程序特征:默认权限掩码umask.umask定义了程序运行过程中所创建文件的默认访问权限。Umask是一个三位的八进制数,表示不允许访问的权限。Umask不会影响特殊访问权限位(setuid,setgid,sticky)。当程序打开一个新文件,设置给新文件的权限会与umask的值合并
基于unix系统只允许root用户使用1024以下的端口
给脚本setuid会带来危险的条件竞争。脚本解释器运行setuid,然后加载脚本。如果攻击者连接到了setuid脚本,攻击者可以在脚本解释器加载的过程中将脚本重新链接到攻击代码,这样攻击代码就可以用脚本拥有者的权限运行了
Windows nt提供了更细粒度的权限,例如,在unix中,拥有对文件所有权转移的权限意味着同时拥有这个文件的所有权,但在NT中,这一权限是作为一个单独的属性来实现的
Windows有几种不同的令牌,最重要的是访问令牌(access token),它是机器持有的一组数据,以确定特定的实体是否经过之前的身份验证。另一重要的令牌就是扮演令牌(impersonation token),这中令牌允许应用程序使用其他用户的安全配置
安全属性通常存储在访问令牌中,指定了在满足符合要求的准则时实体能被授予的特权
Chroot提供了一个标准的分割代码的方法。Chroot()系统调用将改变后续文件操作的根目录,实际上它建立了一个虚拟的根目录。在最好的情况下,即使攻击者破坏了运行中的程序,危害也仅限于虚拟根目录下的那些文件。当运行了chroot()进程后,进程应该立即将EUID和UID设置成更小权限的用户,以消除漏洞空窗期,降低危险性
Chroot不能阻止人们打开套接字或执行与文件系统无关的其他调用
“沙箱”方法:“即时(just-in-time)”访问控制策略
- 基于安全的一些思考--访问控制
- 基于安全的一些思考--缓冲区溢出
- 基于安全的一些思考--总览
- 基于安全的一些思考--竞态条件
- 基于安全的一些思考--随机性与密码学
- 对线程安全的一些思考
- 关于MongoDB安全事件的一些思考
- 基于主体和对象的访问控制--附:计算机安全的层次
- 基于规则的访问控制
- 基于角色的访问控制
- 基于角色的访问控制
- 基于角色的访问控制
- Azure与Scott Guthrie:Azure安全中心和基于角色的访问控制
- 基于BroadCast Receiver的一些思考
- 关于基于成本定价的一些思考
- 信息安全--二:传统的访问控制
- 路由器访问控制的安全配置
- Cisco路由器访问控制的安全配置
- 自定义VIewGroup 实现云标签
- 对图像组成不了解?这样学习Matplotlib必走弯路!
- Spring基础知识汇总——Java开发必看
- 关闭正在使用的端口
- ------------------- java study-----------------------
- 基于安全的一些思考--访问控制
- 为什么要减少操作DOM
- ”because search permissions are missing on a component of the path“
- 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
- 用for双重循环打印100-200之间的质数
- Spring集成redis问题(一)
- Windows静态库和动态库的调用方法汇总
- API文档生成工具——Doxygen
- 基于安全的一些思考--竞态条件