linux权限管理机制
包括文件管理机制和进程权限管理机制
RWX 文件权限控制#
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(读取) | 可读取文件内容 | 可列出目录内容 |
w(写入) | 可以修改文件内容 | 可在目录创建、删除文件 |
x(执行) | 可以作为命令执行 | 可访问目录内容 |
1位:文件类型
2-4位:User权限
5-7位:Group权限
8-10位:Other权限
ACL文件权限控制#
是在UGO+RWX权限控制的基础上实现的更灵活的权限管理机制
ACL设置流程
ACL权限检查
进程权限凭证cred#
1 | struct cred { |
1 | 超级用户 root(0) |
cred结构主要为了控制进程权限而存在,这里需要区分一些id:
- uid 是创建进程的用户的id
- euid 是进程运行过程中实时的id(比如有的时候需要暂时切换进入内核态执行,然后再退回用户态)
- suid 是保存的euid切换之前的id
内核中主要有三个用户:uid(实际用户)、euid(有效用户)、suid(保存用户),可通过setuid、seteuid、setreuid系统调用实现用户切换。
setuid规则:
1.当有超级用户权限,修改uid,euid,suid为新用户
2.当没有超级用户权限,新用户id参数等于uid或suid时,修改euid为新用户
两种修改进程cred方式:
内核态任意代码执行:使用
commit_creds(prepare_kernel_cred(0))
,分配新凭证(uid=0,gid=0)给所在进程,从而获取root权限内核态任意地址读写漏洞:爆破内存定位到当前进程的cred位置,将cred结构体的uid~fsgid全部覆写为0(前28字节)
capability 能力#
为了细分root的权限,将root权限分为37种能力,当非root程序进行操作时,会检查进程的能力,判断是否有权限执行某些操作。
man capabilities
capability 名称 | 描述 |
---|---|
CAP_AUDIT_CONTROL | 启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则 |
CAP_AUDIT_READ | 允许通过 multicast netlink 套接字读取审计日志 |
CAP_AUDIT_WRITE | 将记录写入内核审计日志 |
CAP_BLOCK_SUSPEND | 使用可以阻止系统挂起的特性 |
CAP_CHOWN | 修改文件所有者的权限 |
CAP_DAC_OVERRIDE | 忽略文件的 DAC 访问限制 |
CAP_DAC_READ_SEARCH | 忽略文件读及目录搜索的 DAC 访问限制 |
CAP_FOWNER | 忽略文件属主 ID 必须和进程用户 ID 相匹配的限制 |
CAP_FSETID | 允许设置文件的 setuid 位 |
CAP_IPC_LOCK | 允许锁定共享内存片段 |
CAP_IPC_OWNER | 忽略 IPC 所有权检查 |
CAP_KILL | 允许对不属于自己的进程发送信号 |
CAP_LEASE | 允许修改文件锁的 FL_LEASE 标志 |
CAP_LINUX_IMMUTABLE | 允许修改文件的 IMMUTABLE 和 APPEND 属性标志 |
CAP_MAC_ADMIN | 允许 MAC 配置或状态更改 |
CAP_MAC_OVERRIDE | 覆盖 MAC(Mandatory Access Control) |
CAP_MKNOD | 允许使用 mknod() 系统调用 |
CAP_NET_ADMIN | 允许执行网络管理任务 |
CAP_NET_BIND_SERVICE | 允许绑定到小于 1024 的端口 |
CAP_NET_BROADCAST | 允许网络广播和多播访问 |
CAP_NET_RAW | 允许使用原始套接字 |
CAP_SETGID | 允许改变进程的 GID |
CAP_SETFCAP | 允许为文件设置任意的 capabilities |
CAP_SETPCAP | 参考 capabilities man page |
CAP_SETUID | 允许改变进程的 UID |
CAP_SYS_ADMIN | 允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等 |
CAP_SYS_BOOT | 允许重新启动系统 |
CAP_SYS_CHROOT | 允许使用 chroot() 系统调用 |
CAP_SYS_MODULE | 允许插入和删除内核模块 |
CAP_SYS_NICE | 允许提升优先级及设置其他进程的优先级 |
CAP_SYS_PACCT | 允许执行进程的 BSD 式审计 |
CAP_SYS_PTRACE | 允许跟踪任何进程 |
CAP_SYS_RAWIO | 允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备 |
CAP_SYS_RESOURCE | 忽略资源限制 |
CAP_SYS_TIME | 允许改变系统时钟 |
CAP_SYS_TTY_CONFIG | 允许配置 TTY 设备 |
CAP_SYSLOG | 允许使用 syslog() 系统调用 |
CAP_WAKE_ALARM | 允许触发一些能唤醒系统的东西(比如 CLOCK_BOOTTIME_ALARM 计时器) |
参考: