搜索
您的当前位置:首页正文

使用 setgid、setuid 、setcap 设置程序权限的比较与分析

来源:尚车旅游网

1. 理解基本原则

  • 用户(owner)权限:文件所有者(如 ubuntu)对文件拥有的权限。
  • 组(group)权限:文件所属组(如 root)对文件的权限。
  • 其他人(others)权限:不属于文件所有者或所属组的用户对文件的权限。

2 setgid 的作用和使用方法

setgid 的作用:当程序设置了 setgid 位时,运行该程序的进程会临时切换到文件所属的组(如 root),而用户仍保持为原运行用户(如 ubuntu)。这使得某些程序可以在运行时具有指定组的权限。

  • 所属组:文件所属的组决定哪些用户组成员对该文件有访问权限。
  • setgid 位:当一个文件或目录设置了 setgid 位:
    • 文件:用户执行该文件时,进程将继承文件所属的组,而不是当前用户的主组。
    • 目录:在目录中创建的文件或子目录将继承该目录的组。

举例:

# 1 将可执行文件(如 ss-redir等)设置为特定组。
chgrp proxy_group /path/to/ss-redir
# 配置 setgid 位,使这些文件启动的进程在运行时自动切换到指定的组。
chmod g+s /path/to/ss-redir
ls -l /path/to/ss-redir
-rwxr-sr-x 1 root proxy_group 12345 Dec 13 12:00 /path/to/ss-redir

运行时效果

  • 用户执行 /path/to/ss-redir 时,启动的进程会自动切换到 proxy_group。

  • 这确保了 ss-redir 进程具有 proxy_group 的权限,而无需修改用户的主组或进程所属组。

  • 对文件:
    设置了 setgid 位的可执行文件,当用户运行该文件时,生成的进程将继承文件所属的组,而不是当前用户的主组。

  • 设置后,用 ls -l 查看权限时,组权限位的执行位(x)会显示为 s

    • 文件:-rwxr-sr-x
    • 目录:drwxr-sr-x

-rwxr-sr-x 的每一部分含义如下:

2.1 组合权限模型

  • 如果用户权限大于组权限,程序的访问权限会受到用户权限的限制。
  • 如果组权限大于用户权限,程序可以依赖组的权限访问相应的资源。

例如用户是ubuntu,组是root

  • 运行程序时的行为

    • 用户 ubuntu 可以直接运行程序,无需 sudo。
    • 程序运行时,进程会切换到 root 组,具有访问 root 组资源的能力。
  • 权限范围

    • 用户仍然是 ubuntu,没有 root 用户的权限。
    • 程序只能以 root 组的身份访问与 root 组相关的文件或资源(如组权限 rwx 的目录)。【核心点在组权限,文件如果组权限没有给root,那也访问不了
    • 如果程序需要真正的 root 权限(如修改系统配置文件绑定低端口),需要使用 sudosetcap

2.2 特别推荐使用在“共享资源”

3 setuid 的作用和使用方法

作用:如果程序需要真正的 root 权限运行,而不希望普通用户每次都使用 sudo。

某些权限可以通过 setuid 位授予用户,允许用户执行程序时临时拥有文件所有者(通常是 root)的权限。

#修改程序的所有者为 root:
sudo chown root:root /path/to/executable
#设置 setuid 位:
sudo chmod u+s /path/to/executable
#验证设置:
ls -l /path/to/executable
输出中应包含 s 位,如:
    -rwsr-xr-x 1 root root 12345 Dec 13 12:00 /path/to/executable

4 setcap 的作用和使用方法

使用 setcap

  • 为程序分配特定的权限(如绑定特权端口):
sudo setcap cap_net_bind_service=e /path/to/program

程序运行时获得精确的能力,而非完全的 root 权限。
可以看看笔记

因篇幅问题不能全部显示,请点此查看更多更全内容

热门图文

Top