国科大操作系统安全实验
——基于PAM的用户权能分配
注意:ubuntu的18和21的版本不同,ping的权限内核设置也不同,导致实验结果不同
——2021届沈计所 Sen.W
简介
- 可拔插验证模块PAM(Pluggable Authentication Modules ),PAM模块通过一套动态链接库和一套统一的API,将系统提供的服务和其认证分离,并将其认证统一托管给PAM模块,来实现更加快捷方便的统一管理不同服务之间的认证机制。
- 实验环境:ubuntu21.04
实验要求及结果
-
指出每个权能对应的系统调用,简要解释功能
- 查找linux路径 /usr/src/linux-headers-5.11.0-46/include/uapi/linux/capability.h 可得到权能对应的系统功能及解释
- 权能和系统调用对照表
权能 系统调用号 解释 CAP_CHOWN 0 允许修改文件所有者的权限 CAP_DAC_OVERRIDE 1 忽略对文件的DAC访问限制 CAP_DAC_READ_SEARCH 2 忽略DAC中对文件和目录的读、搜索的DAC权限 CAP_FOWNER 3 忽略文件属主ID必须和进程用户ID相匹配的限制 CAP_FSETID 4 允许设置文件的setuid位 CAP_KILL 5 允许对不属于自己的进程发送信号 CAP_SETGID 6 允许改变进程的组ID
| CAP_SETPCAP | 8 | 允许向其他进程转移能力以及删除其他进程的能力 |
| CAP_LINUX_IMMUTABLE | 9 | 允许设置文件的不可修改位(IMMUTABLE)和只添加(APPND-ONLY)属性 |
| CAP_NET_BIND_SERVICE | 10 | 允许绑定到小于1024的端口 |
| CAP_NET_BROADCAST | 11 | 允许socket发送监听组播 |
| CAP_NET_ADMIN | 12 | 允许执行网络管理任务 |
| CAP_NET_RAW | 13 | 允许使用原始套接字 |
| CAP_IPC_LOCK | 14 | 允许锁定共享内存片段 |
| CAP_IPC_OWNER | 15 | 忽略IPC所有权检查 |
权能 | 系统调用号 | 解释 |
---|---|---|
CAP_SYS_MOUDLE | 16 | 允许插入和删除内核模块 |
CAP_SYS_RAWIO | 17 | 允许直接访问原始块设备 |
CAP_SYS_CHROOT | 18 | 允许使用chroot()系统调用,即改变程序执行时所参考的根目录位置 |
CAP_SYS_PTRACE | 19 | 允许跟踪任何进程 |
CAP_SYS_PACCT | 20 | 允许执行进程的BSD式审计 |
CAP_SYS_ADMIN | 21 | 允许执行系统管理任务 |
CAP_SYS_BOOT | 22 | 允许重新启动系统 |
CAP_SYS_NICE | 23 | 允许提升优先级以及设置其他进程优先级 |
CAP_SYS_RESOURCE | 24 | 允许忽略资源限制 |
CAP_SYS_TIME | 25 | 允许改变系统时钟 |
CAP_SYS_TTY_CONFIG | 26 | 允许配置TTY设备 |
CAP_MKNOD | 27 | 允许使用mknod()系统调用,创建特殊文件 |
CAP_LEASE | 28 | 允许修改文件锁的FL_LEASE标志 |
CAP_AUDIT_WRITE | 29 | 允许向内核审计日志写记录 |
CAP_AUDIT_CONTROL | 30 | 启用或禁用内核审计,修改审计过滤器规则 |
CAP_SETFCAP | 31 | 设置文件权能 |
CAP_MAC_OVERRIDE | 32 | 允许MAC配置或状态改变,为smack LSM实现 |
CAP_MAC_ADMIN | 33 | 覆盖强制访问控制 |
CAP_SYSLOG | 34(syslog) | 执行特权syslog(2)操作 |
CAP_WAKE_ALARM | 35 | 触发将唤醒系统的东西 |
CAP_BLOCK_SUSPEND | 36(epoll) | 可以阻塞系统挂起的特性 |
CAP_AUDIT_READ | 37 | 允许通过一个多播socket读取审计日志 |
- capability机制打破了UNIX/LINUX操作系统中超级用户/普通用户的概念,由普通用户也可以做只有超级用户才可以完成的工作,即将root的特权分割成不同的能力,每种能力代表一定的特权操作
- 在Capilities中,只有进程和可执行文件才具有能力,每个进程拥有三组能力集
- cap_permitted表示进程所拥有的最大能力集
- cap_effective表示进程当前可用的能力集,可看做是cap_permitted的一个子集
- 而cap_inheitable则表示进程可以传递给其子进程的能力集
- 可执行文件也拥有三组能力集
- cap_allowed表示程序运行时可从原进程的cap_inheritable中集成的能力集
- cap_forced表示运行文件时必须拥有才能完成其服务的能力集
- cap_effective则表示文件开始运行时可以使用的能力。
- 自主访问控制DAC是一种通过主体(用户)的自主控制访问客体(系统资源)的模型,其访问控制是通过
- 文件所有权:在DAC系统中,文件的所有者是创建这个文件(linux中一切皆文件)的计算机的使用者,并由其创建者来决定如何设置和分配权限。所有权高于一切权限,文件所有者即使没有权限也可为自己分配后使用文件。
- 访问权限:文件的所有者拥有访问权限,并且可将访问权限分配给自己及其他用户
- DAC的所有权分类
- 拥有者ower:标记为u,默认情况下,创建文件的用户就是其属主
- 所属组group:标记为g,同组用户对于客体的共有访问权限
- 其他人other:标记为o,除了ower和group外,其他用户对此客体的访问权限
- DAC的权限分类
- 读权限r
- 写权限w
- 执行权限x,
- 普通用户可以文件拥有者的权限执行s/S:置ower的 x 位,原位置有执行权限x,就置为 s,没有x权限为 S
-
基于PAM用户权限设置系统
要求:
(1) 在某用户登录时,规定其只具有某几种权能
(2) 例如,用户A登录,其只具有修改网络相关的权能
(3) 提示:比如,按照权能execve变换规则,根据用户名,登录前设置cap_net_raw,然 后设置相应的ping程序的文件权能
-
创建一个用户
userNetwork
-
以root权限清除ping命令的setuid位和各种权能
setcap -r /bin/ping # 清除附加的DAC权限 chmod u-s /bin/ping # 普通用户执行该程序时无法以文件拥有者的身份来执行 chmod o-x /bin/ping # 让其他用户无法执行
-
切换到usernetwork用户和waterstop用户均无法使用ping权限
-
给ping附加CAP_NET_RAW权能后,普通用户也能使用ping
-
实验问题
-
使用命令
setcap -r /bin/ping
出现如下错误提示:
Failed to set capabilities on file /bin/ping
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file解决方法:
ping本身已经没有该权能了,这是重复使用了该指令导致的错误