基于PAM的用户权能分配

国科大操作系统安全实验

——基于PAM的用户权能分配

注意:ubuntu的18和21的版本不同,ping的权限内核设置也不同,导致实验结果不同

——2021届沈计所 Sen.W

简介
  1. 可拔插验证模块PAM(Pluggable Authentication Modules ),PAM模块通过一套动态链接库和一套统一的API,将系统提供的服务和其认证分离,并将其认证统一托管给PAM模块,来实现更加快捷方便的统一管理不同服务之间的认证机制。
  2. 实验环境:ubuntu21.04
实验要求及结果
  1. 指出每个权能对应的系统调用,简要解释功能

    • 查找linux路径 /usr/src/linux-headers-5.11.0-46/include/uapi/linux/capability.h 可得到权能对应的系统功能及解释
    • 权能和系统调用对照表
    权能系统调用号解释
    CAP_CHOWN0允许修改文件所有者的权限
    CAP_DAC_OVERRIDE1忽略对文件的DAC访问限制
    CAP_DAC_READ_SEARCH2忽略DAC中对文件和目录的读、搜索的DAC权限
    CAP_FOWNER3忽略文件属主ID必须和进程用户ID相匹配的限制
    CAP_FSETID4允许设置文件的setuid位
    CAP_KILL5允许对不属于自己的进程发送信号
    CAP_SETGID6允许改变进程的组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_MOUDLE16允许插入和删除内核模块
CAP_SYS_RAWIO17允许直接访问原始块设备
CAP_SYS_CHROOT18允许使用chroot()系统调用,即改变程序执行时所参考的根目录位置
CAP_SYS_PTRACE19允许跟踪任何进程
CAP_SYS_PACCT20允许执行进程的BSD式审计
CAP_SYS_ADMIN21允许执行系统管理任务
CAP_SYS_BOOT22允许重新启动系统
CAP_SYS_NICE23允许提升优先级以及设置其他进程优先级
CAP_SYS_RESOURCE24允许忽略资源限制
CAP_SYS_TIME25允许改变系统时钟
CAP_SYS_TTY_CONFIG26允许配置TTY设备
CAP_MKNOD27允许使用mknod()系统调用,创建特殊文件
CAP_LEASE28允许修改文件锁的FL_LEASE标志
CAP_AUDIT_WRITE29允许向内核审计日志写记录
CAP_AUDIT_CONTROL30启用或禁用内核审计,修改审计过滤器规则
CAP_SETFCAP31设置文件权能
CAP_MAC_OVERRIDE32允许MAC配置或状态改变,为smack LSM实现
CAP_MAC_ADMIN33覆盖强制访问控制
CAP_SYSLOG34(syslog)执行特权syslog(2)操作
CAP_WAKE_ALARM35触发将唤醒系统的东西
CAP_BLOCK_SUSPEND36(epoll)可以阻塞系统挂起的特性
CAP_AUDIT_READ37允许通过一个多播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
  1. 基于PAM用户权限设置系统

    要求:

    (1) 在某用户登录时,规定其只具有某几种权能

    (2) 例如,用户A登录,其只具有修改网络相关的权能

    (3) 提示:比如,按照权能execve变换规则,根据用户名,登录前设置cap_net_raw,然 后设置相应的ping程序的文件权能

    • 创建一个用户userNetwork
      image-20220311205744005

    • 以root权限清除ping命令的setuid位和各种权能

      
      setcap -r /bin/ping # 清除附加的DAC权限
      chmod u-s /bin/ping # 普通用户执行该程序时无法以文件拥有者的身份来执行
      chmod o-x /bin/ping # 让其他用户无法执行
      
    • 切换到usernetwork用户和waterstop用户均无法使用ping权限

      image-20220312093948928

    • 给ping附加CAP_NET_RAW权能后,普通用户也能使用ping
      image-20220312153507429

实验问题

  1. 使用命令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本身已经没有该权能了,这是重复使用了该指令导致的错误

参考资料

  1. linux setcap命令详解

  2. 基于PAM的用户权能分配

  3. 闲话Linux系统安全(一)——自主访问控制(DAC)

  4. discuz修改用户uid_基于PAM的用户权能分配

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆羽飘扬

如果有用,请支持一下。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值