CentOS用户提权的技术实现summary

在 CentOS(一种基于Red Hat Enterprise Linux的Linux发行版)中,用户提权是指从一个普通用户的权限升级为超级用户(root)权限的过程。这可以通过不同的方式实现,下面列出了三种常见的用户提权方式以及它们之间的差异:

使用su命令

  • 差异su(Switch User)命令允许普通用户切换到其他用户,通常是root用户。与sudo不同,su命令在执行后会打开一个新的shell会话,该会话具有切换到的用户的权限,包括root。
  • 步骤:用户可以在终端中运行su命令,然后输入root密码(如果有密码)以切换到root用户。

使用sudo命令

  • 差异:在CentOS中,通常会将普通用户添加到sudoers文件中,以便使用sudo命令进行权限提升。sudo(Superuser Do)允许特定用户以root权限执行特定的命令。差异在于,用户只有在执行命令时才会临时获取root权限,而不是持久性地获得全部root权限。
  • 步骤:管理员可以通过编辑/etc/sudoers文件,使用visudo命令来授权普通用户执行特定命令时使用sudo。例如,可以在该文件中添加一行:username ALL=(ALL) NOPASSWD: /path/to/command,其中username是普通用户名,/path/to/command是允许执行的命令路径。

使用setuid、setgid和sticky位

  • 差异:这种方法涉及更改文件或可执行程序的权限位,以便在执行时获得文件所有者或组的权限,而不需要用户提供密码或交互。
  • setuid:如果一个文件的setuid位被设置,那么当普通用户执行该文件时,该文件将以文件所有者的权限(通常是root)运行。这样的文件在执行时暂时获得了文件所有者的权限。
  • setgid:类似于setuid,但是应用于文件的组权限。当一个文件的setgid位被设置,执行该文件的用户将以文件所属组的权限运行。
  • sticky位:主要用于目录,防止普通用户删除其他用户在该目录下创建的文件。
  • 步骤:可以使用chmod命令设置setuid、setgid或sticky位,例如:chmod +s filename

CentOS使用Capability能力来满足场景需求

在传统的Unix权限模型中,进程要么是普通用户,要么是超级用户(root),而超级用户具有系统上所有资源的完全控制权。然而,这种二元的权限模型过于粗糙,可能会导致过多的权限被授予进程。"Capability" 是一种更细粒度的权限控制方式,它允许进程只获得执行特定操作所需的权限,而不需要完整的超级用户权限。

以下是一些常见的"capability"能力以及它们对应的场景和示例:

  1. CAP_NET_BIND_SERVICE:允许进程绑定小于1024的端口,而无需root权限。

    • 场景:Web服务器、数据库服务器、网络服务等。
    • 示例:Apache HTTP服务器绑定80端口。
  2. CAP_SYS_ADMIN:允许执行系统管理任务,但仍受到限制,不同于root权限。

    • 场景:容器管理、挂载文件系统、系统资源管理等。
    • 示例:Docker容器管理,挂载文件系统。
  3. CAP_DAC_OVERRIDE:允许进程忽略文件访问权限限制。

    • 场景:需要特定文件或目录的访问,但不需要完整的root权限。
    • 示例:防火墙配置工具,需要读取/修改网络配置文件。
  4. CAP_SETUIDCAP_SETGID:允许进程使用setuidsetgid权限。

    • 场景:执行特定命令或任务,而不是整个进程都以超级用户运行。
    • 示例:使用ping命令需要CAP_SETUID来设置有效用户ID。
  5. CAP_SYS_NICE:允许进程修改其他进程的优先级。

    • 场景:进程调度控制、任务管理等。
    • 示例:任务管理工具,调整进程优先级。
  6. CAP_SYS_RESOURCE:允许进程管理资源限制,如文件句柄、进程数等。

    • 场景:资源管理、限制。
    • 示例:进程监控工具,资源管理工具。
  7. CAP_NET_RAW:允许进程发送原始网络数据包。

    • 场景:网络嗅探、网络协议开发等。
    • 示例:Wireshark,用于捕获和分析网络数据包。
  8. CAP_IPC_LOCK:允许进程锁定内存页面,以防止被交换到磁盘。

    • 场景:实时系统、内存管理。
    • 示例:实时应用程序,如音频处理应用。
  9. CAP_KILL :终止其他进程。

    场景:

    • 容器管理:在容器环境中,可能需要容器管理器(如Docker)能够终止容器内的进程,以便进行管理和资源释放。

    • 进程监控:监控工具可能需要有能力终止受监控进程,以处理异常情况或资源泄漏。

    • 作业控制:作业控制系统(如调度器)可能需要能够终止作业或任务。

以下是Linux中内核的常用"capability"能力

在使用和实现时需要根据场景甄别。

  1. CAP_CHOWN:更改文件所有者。
  2. CAP_DAC_OVERRIDE:忽略文件权限限制。
  3. CAP_DAC_READ_SEARCH:读取和搜索任何文件,不考虑权限。
  4. CAP_FOWNER:忽略文件的所有权(只适用于文件的所有者)。
  5. CAP_FSETID:忽略文件设置ID位。
  6. CAP_KILL:终止其他进程。
  7. CAP_SETGID:设置进程的有效组ID。
  8. CAP_SETUID:设置进程的有效用户ID。
  9. CAP_SETPCAP:设置其他能力的进程能力。
  10. CAP_LINUX_IMMUTABLE:更改文件的"immutable"标志。
  11. CAP_NET_BIND_SERVICE:绑定小于1024的端口。
  12. CAP_NET_BROADCAST:广播和多播网络数据包。
  13. CAP_NET_ADMIN:进行网络管理操作。
  14. CAP_NET_RAW:发送原始网络数据包。
  15. CAP_IPC_LOCK:锁定内存页面。
  16. CAP_IPC_OWNER:忽略IPC资源的所有权。
  17. CAP_SYS_MODULE:加载和卸载内核模块。
  18. CAP_SYS_RAWIO:执行裸IO操作。
  19. CAP_SYS_CHROOT:更改根文件系统目录。
  20. CAP_SYS_PTRACE:跟踪/调试进程。
  21. CAP_SYS_PACCT:使用进程会计功能。
  22. CAP_SYS_ADMIN:执行系统管理操作。
  23. CAP_SYS_BOOT:重启系统。
  24. CAP_SYS_NICE:修改进程优先级。
  25. CAP_SYS_RESOURCE:操作系统资源管理。
  26. CAP_SYS_TIME:更改系统时间。
  27. CAP_SYS_TTY_CONFIG:更改TTY设备配置。
  28. CAP_MKNOD:创建特殊文件。
  29. CAP_LEASE:创建和删除文件锁定。
  30. CAP_AUDIT_WRITE:写入审计日志。
  31. CAP_AUDIT_CONTROL:审计配置。
  32. CAP_SETFCAP:设置文件的能力。
  33. CAP_MAC_OVERRIDE:覆盖强制访问控制(MAC)。
  34. CAP_MAC_ADMIN:管理强制访问控制(MAC)。
  35. CAP_SYSLOG:使用系统日志。
  36. CAP_WAKE_ALARM:允许使用RTC闹钟。

参考资料:

https://man7.org/linux/man-pages/man7/capabilities.7.html

https://github.com/torvalds/linux/blob/124ea650d3072b005457faed69909221c2905a1f/include/uapi/linux/capability.h

How to start service on the privileged port as a regular user | sleeplessbeastie's notes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值