基于PAM的用户权能分配

Contents

基于 PAM 的用户权能分配

基于PAM的用户权能分配

1.指出每个权能对应的系统调用,简要解释功能

1.1 查询有哪些 capacities

1.1.1 使用 man 命令查询

$ man capabilities

man capabilities

1.1.2 网站在线查询

完整列表如下:https://man7.org/linux/man-pages/man7/capabilities.7.html

网站对应以下内容:
– Capabilities list(本课程实验对应部分)
– Past and current implementation
– Notes to kernel developers
– Thread capability sets
– File capabilities
– File capability extended attribute versioning
– Transformation of capabilities during execve()
– Safety checking for capability-dumb binaries
– Capabilities and execution of programs by root
– Set-user-ID-root programs that have file capabilities
– Capability bounding set
– Effect of user ID changes on capabilities
– Programmatically adjusting capability sets
– The securebits flags: establishing a capabilities-only environment
– Per-user-namespace “set-user-ID-root” programs
– Namespaced file capabilities
– Interaction with user namespaces

man7完整列表

1.2 Capabilities list 内容解释

1.CAP-AUDIT-CONTROL (since Linux 2.6.11)            启用和禁用内核审计;更改审计过滤规则;检索审核状态和过滤规则。

2.CAP-AUDIT-READ (since Linux 3.16)                 允许通过一个多播 netlink socket 读取审计日志

3.CAP-AUDIT-WRITE (since Linux 2.6.11)              允许向内核审计日志写记录

4.CAP-BLOCK-SUSPEND (since Linux 3.5)               系统调用:epoll,可以阻塞系统挂起的特性

5.CAP-BPF (since Linux 5.8)                         使用特权 BPF 操作。 Linux 5.8 中添加了此功能,来将 BPF 功能与重载的 CAP-SYS-ADMIN 功能分开。

6.CAP-CHECKPOINT-RESTORE (since Linux 5.9)          Linux 5.9 中添加了此功能,以将检查点/恢复功能与重载CAP-SYS-ADMIN 功能分离。

7.CAP-CHOWN                                         系统调用:chown,对文件的 UID 和 GID 做任意的修改

8.CAP-DAC-OVERRIDE                                  忽略文件读取、写入和执行权限检查

9.CAP-DAC-READ-SEARCH                               忽略 DAC 中对文件和目录的读、搜索权限

10.CAP-FOWNER                                       忽略忽略进程 UID 与文件 UID 的匹配检查

11.CAP-FSETID                                       文件修改时不清除 setuid 和 setgid 位,不匹配时设置 setgid 位

12.CAP-IPC-LOCK                                     锁定内存;使用大页面分配内存

13.CAP-IPC-OWNER                                    绕过对 System V IPC 对象的操作的权限检查

14.CAP-KILL                                         系统调用:kill,绕过发送信号时的权限检查,允许对不属于自己的进程发送信号

15.CAP-LEASE (since Linux 2.4)                      允许在文件上建立租借锁

16.CAP-LINUX-IMMUTABLE                              设置 FS-APPEND-FL 和 FS-IMMUTABLE-FL inode 标志

17.CAP-MAC-ADMIN (since Linux 2.6.25)               允许 MAC 配置或状态更改。为 Smack Linux 安全模块 (LSM) 实现。

18.CAP-MAC-OVERRIDE (since Linux 2.6.25)            覆盖强制访问控制 ( MAC )。为 Smack LSM 实现。

19.CAP-MKNOD (since Linux 2.4)                      使用 mknod(2) 创建特殊文件

20.CAP-NET-ADMIN                                    允许执行网络管理任务:接口、防火墙和路由等

21.CAP-NET-BIND-SERVICE                             允许绑定到小于 1024 的端口,普通用户不能通过 bind 函数绑定到小于 1024 的端口,而 CAP-NET-BIND-SERVICE 可以让普通用户也可以绑定端口到 1024 以下

22.CAP-NET-BROADCAST                                允许网络广播和多播访问

23.CAP-NET-RAW                                      系统调用:socket,允许使用原始套接字,原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对监控网络流量和分析有很大的作用。

24.CAP-PERFMON (since Linux 5.8)                    采用各种性能监控机制,包括:* call perf-event-open(2);* 采用具有性能影响的各种 BPF 操作。Linux 5.8 中添加了此功能,以将性能监控功能与重载的 CAP-SYS-ADMIN 功能分开。

25.CAP-SETGID                                       系统调用:setgid,设置和管理进程 GID 

26.CAP-SETFCAP (since Linux 2.6.24)                 设置文件权能

27.CAP-SETPCAP                                      系统调用:capset,允许授予或删除其他进程的任何权能,只有 init 进程具有这种能力

28.CAP-SETUID                                       系统调用:setuid,设置和管理进程 UID 

29.CAP-SYS-ADMIN                                    允许执行系统管理任务,如挂载/卸载文件系统,设置磁盘配额,开/关交换设备和文件等

30.CAP-SYS-BOOT                                     系统调用:reboot,允许普通用户重新启动系统

31.CAP-SYS-CHROOT                                   系统调用:chroot,普通用户无法使用 chroot() 系统调用更改程序执行时所参考的根目录位置,而 CAP-SYS-CHROOT 可以给普通用户这个权限。

32.CAP-SYS-MODULE                                   系统调用:init-module,允许普通用户插入和删除内核模块

33.CAP-SYS-NICE                                     系统调用:nice,允许提升优先级,设置其他进程优先级

34.CAP-SYS-PACCT                                    系统调用:acct,允许普通用户配置进程记账

35.CAP-SYS-PTRACE                                   系统调用:ptrace,允许普通用户跟踪任何进程

36.CAP-SYS-RAWIO                                    允许对 ioperm/iopl 的访问

37.CAP-SYS-RESOURCE                                 系统调用:setrlimit,设置资源限制,但是普通用户不能用 setrlimit 来突破 ulimit 的限制

38.CAP-SYS-TIME                                     系统调用:stime,允许改变系统时钟

39.CAP-SYS-TTY-CONFIG                               系统调用:vhangup,允许配置 TTY 设备

40.CAP-SYSLOG (since Linux 2.6.37)                  系统调用:syslog,执行特权 syslog(2) 操作

41.CAP-WAKE-ALARM (since Linux 3.0)                 触发将唤醒系统的东西(设置 CLOCK-REALTIME-ALARM 和 CLOCK-BOOTTIME-ALARM 定时器)

2.基于 PAM 用户权限设置系统

实验环境:

  • Windows 11 Pro
  • WSL2
  • Docker Desktop
  • image: Ubuntu:latest

docker-ubuntu

实验要求:

  • 在某用户登录时,规定其只具有某种权能,例如 ping、passwd 命令。

实验流程:

  • 新建三个用户: os-ping , os-passwd , os-none
  • 运行 auto-del-uid.sh 脚本,找出并清除所有程序的权能
  • 在切换用户登录前运行 login.sh 脚本,实现三个用户登录后只可以执行不同的命令
  • os-ping 用户登录后只可以执行 ping 命令
  • os-passwd 用户登录后只可以执行 passwd 命令
  • os-none 登录后不可以执行任何命令

配置环境(重要)

容器为了最大程度减小镜像的大小,默认没有 ping 命令

root@56c79e554408:/# apt update
root@56c79e554408:/# apt install iputils-ping
# 为新安装的 ping 命令添加 uid 位
root@56c79e554408:/# chmod u+s /usr/bin/ping

# 添加用户
root@56c79e554408:/# useradd os-ping
root@56c79e554408:/# useradd os-passwd
root@56c79e554408:/# useradd os-none

# 选择 no 
root@56c79e554408:/# dpkg-reconfigure dash

root@56c79e554408:/# vim /etc/pam.d/common-session
# 将下面这行命令写入 common-session 文件中
session optional pam-exec.so debug log=/tmp/pam-exec.log seteuid /login.sh

2.1 找出并清除所有程序的权能

2.1.1 找出所有程序的权能

执行 auto-del-uid.sh 脚本,显示出设置了 s 位的程序列表

并将其写入 /tmp/pro-list 文件中

perm-all

查看 /tmp/pro-list 文件中的内容

pro-list

2.1.2 清除所有程序的权能

按任意键继续程序,删除所有具有 uid 程序的权能

del-all-uid

2.2 查看 ping 、 passwd 命令的权能

getcap 命令查看 ping 、 passwd 命令的权能,显示为空

before

2.3 切换用户,自动运行 login.sh ,实现用户登录只能运行特定程序

  • os-ping 用户只能运行 ping 命令
  • os-passwd 用户只能运行 passwd 命令
  • os-none 用户无法运行任何命令

2.3.1 os-ping 用户只能运行 ping 命令

os-ping

2.3.2 os-passwd 用户只能运行 passwd 命令

os-passwd

2.3.3 os-none 用户无法运行任何命令

os-none

3.制作了已经配置好环境的 docker 容器

使用以下命令拉取镜像

docker pull tremb1e/os-sec-experiment:ex1

使用以下命令运行直接镜像

docker run -it tremb1e/os_sec_experiment:ex1 /bin/bash

使用教程如下

3.1 直接运行镜像

使用以下命令直接运行镜像

docker run -it tremb1e/os-sec-experiment:ex1 /bin/bash

docker-run

在当前目录下有两个脚本

ls

3.2 运行脚本

运行后会将拥有 uid 的程序路径写入 /tmp/pro-list 文件中

./auto-del-uid.sh

3.3 切换用户,自动运行 login.sh ,实现用户登录只能运行特定程序

  • os-ping 用户只能运行 ping 命令
  • os-passwd 用户只能运行 passwd 命令
  • os-none 用户无法运行任何命令

3.3.1 os-ping 用户只能运行 ping 命令

os-ping

3.3.2 os-passwd 用户只能运行 passwd 命令

os-passwd

3.3.3 os-none 用户无法运行任何命令

os-none

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
上一篇
下一篇
0
希望看到您的想法,请您发表评论x