0
点赞
收藏
分享

微信扫一扫

基于PAM的用户权能分配

腊梅5朵 2022-03-19 阅读 34
linux

国科大操作系统安全实验

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

简介

  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用户权限设置系统

    • 创建一个用户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

参考资料

  1. linux setcap命令详解

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

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

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

举报

相关推荐

0 条评论