Linux提权基础

news/2025/10/30 23:01:24/文章来源:https://www.cnblogs.com/kudo4869/p/19178324

Linux提权基础

Linux 用户和用户组

用户和用户组的概念:

在 Linux 系统中,用户(User)用户组(Group) 是实现 “多用户权限管理” 的核心机制,目的是隔离不同操作者的资源访问范围,保证系统安全和有序运行。简单来说,用户是 “操作的执行者”,用户组是 “用户的集合”,两者配合实现精细化的权限控制。

这两者的关系属于多对多,如图用户jimmy可以加入用户组A,C。而用户组也可以拥有多个用户,如用户C存在用户jimmy,tom

其实这里的用户和用户组与Shiro中的角色和用户很像本质是为了高效管理用户权限。用户组:具有相同特性用户,可以高效的管理用户权限.

image-20251020193225756

groups:查看当前用户所有的组

groupadd:添加一个组

cat /etc/group:查看当前有哪些组

groupdel:删除某个组

image-20251020195914088

image-20251020195937694

useradd:向组中添加用户

useradd -m -G root,grouptest1 testuser1

-m 参数会在home目录自动创建当前用户的文件夹

-G 可以指定多个组添加

image-20251020200441336

  • uid:User ID(用户 ID),是系统识别用户的 “数字身份证”(用户名只是给人看的)。用户唯一标识

[0]:超级用户,linux系统默认都自动将root创建为超级用户;
[1-999]:虚拟用户,系统保留的uid范围值(不同的版本,可能有不同的范围,如RHEL8中这个范围是1-999)负责某些服务程序的 启动和运行,一般不需要登陆;
[1000-n]:普通用户,当我们创建第一个普通用户时uid默认从1000开始。

  • gid=1003:主组唯一标识,这里特指用户的 “主组”—— 用户创建文件 / 目录时,默认归这个组所有
  • groups:所有所属组,列出用户加入的所有组,包括 “主组” 和 “附加组”

newgrp:切换主组

image-20251020201330916

查看每个文件的权限。

image-20251020203655088

image-20251020203543510

1. File Type(文件类型)

最左侧第一个字符,标识文件的类型:

  • -:表示普通文件(如文本、二进制程序等)。
  • d:表示目录(文件夹)。
  • 其他常见类型还有 l(符号链接,类似快捷方式)、c(字符设备,如终端)、b(块设备,如硬盘)等。

2. Owner(所有者权限)

接下来的 3 个字符,控制文件所有者(创建该文件的用户)的访问权限:

  • r(Read):读权限—— 允许查看文件内容(若为目录,可列出目录内的文件)。
  • w(Write):写权限—— 允许修改文件内容(若为目录,可在目录内创建 / 删除文件)。
  • x(Execute):执行权限—— 允许运行文件(若为程序 / 脚本);若为目录,允许cd进入该目录。

3. Group(所属组权限)

中间的 3 个字符,控制文件所属用户组(与所有者同组的用户)的访问权限,权限含义与 “Owner” 部分一致(r读、w写、x执行)。

4.Other Users(其他用户权限)

最右侧的 3 个字符,控制既非所有者、也非所属组的 “其他所有用户” 的访问权限,权限含义同样为r读、w写、x执行。

修改权限命令:chmod

chmod [选项] 权限设置 文件名/目录名

1.用 3 位数字(0-7)分别对应 u、g、o 的权限,数字由 r(4)、w(2)、x(1) 相加得出。

# 所有者可读/写/执行,所属组可读/执行,其他用户只读
chmod 754 file.txt# 所有用户可读/写/执行(危险!谨慎使用)
chmod 777 data/# 递归修改目录及子文件:所有者读写,组和其他只读
chmod -R 644 docs/

2.通过符号组合 [用户] [操作符] [权限] 来修改,适合 “微调” 权限。

  • 用户u(所有者)、g(组)、o(其他)、a(所有)
  • 操作符+(添加权限)、-(移除权限)、=(设置为指定权限,覆盖原有)
  • 权限rwx
# 给所有者添加执行权限
chmod u+x script.sh# 移除其他用户的写权限
chmod o-w shared.txt# 给所属组设置“读+写”权限(覆盖原有组权限)
chmod g=rw config.ini# 给所有用户添加读权限
chmod a+r report.pdf# 递归给目录的所有用户添加执行权限(允许进入目录)
chmod -R a+x projects/

Linux服务与进程管理

进程

  1. 定义:进程是正在运行的程序,系统会为其分配内存、CPU 等资源,每个进程有唯一的PID(进程 ID)。

例:执行ls命令时,Linux 会生成一个ls进程,执行完后进程自动终止。

2.核心特点

  • 资源独立:每个进程占用独立资源,互不干扰。
  • 分两类:
    • 前台进程:依赖终端(如终端里的python交互模式),关终端则进程停。
    • 后台进程:不依赖终端(如nohup python script.py &),关终端仍运行。

3.常用查看命令

ps aux  # 看所有进程(含PID、占用资源)
top     # 动态监控进程(实时刷新)

前台进程与后台进程

在 Linux 终端中,进程分为前台进程(占据终端,可直接交互)和后台进程(不占用终端,默默运行)。掌握它们的管理命令,能大幅提升终端操作效率。以下是实用命令及示例,适合直接套用。

一、前台进程:直接交互的 “当前任务”

前台进程会占据终端的输入输出,用户可通过键盘直接控制(如输入、终止)。

  1. 启动前台进程(默认方式)

直接执行命令,进程即运行在前台:

# 例1:运行一个Python脚本(前台,终端会显示脚本输出)
python3 test.py# 例2:启动一个交互式程序(如Python解释器,前台可输入代码)
python3

特点:终端会被占用,此时无法输入其他命令,直到进程结束(或被终止)。

2. 终止前台进程

Ctrl + C 发送终止信号,强制结束当前前台进程:

# 假设正在前台运行python3 test.py,按Ctrl+C后:
^C  # 终端显示此符号,进程被终止

二、后台进程:不占终端的 “并行任务”

后台进程在终端后台运行,不影响用户继续输入其他命令,适合耗时任务(如下载、批量处理)。

1. 直接启动后台进程(加&

命令后加 &,进程会直接在后台运行,并返回进程 ID(PID)作业号(如[1]

# 例1:后台运行Python脚本(终端立即返回,可继续输入其他命令)
python3 test.py &
[1] 12345  # [1]是作业号,12345是PID# 例2:后台运行文件下载(wget下载时不占用终端)
wget https://example.com/file.zip &
[2] 12346

2. 将前台进程 “暂停并移到后台”

若前台进程已启动(占用终端),可先暂停再移到后台:

  1. Ctrl + Z 暂停前台进程(终端显示暂停信息);
  2. bg [作业号] 将暂停的进程移到后台继续运行(作业号可通过jobs查看)。
# 步骤1:前台运行脚本,按Ctrl+Z暂停
python3 test.py
^Z  # 按Ctrl+Z
[1]+  已停止               python3 test.py# 步骤2:用bg将暂停的进程移到后台(默认操作最后一个暂停的进程,可加作业号指定)
bg
[1]+ python3 test.py &  # 进程在后台恢复运行

3. 查看后台进程(作业)

jobs 命令查看当前终端的所有后台作业,显示作业号、状态、命令

jobs
[1]-  运行中               python3 test.py &
[2]+  运行中               wget https://example.com/file.zip &
  • + 表示 “当前默认作业”(fg/bg 不加参数时操作此作业);
  • - 表示 “次默认作业”。

4.将后台进程 “调回前台”

fg [作业号] 将后台进程移到前台(需终端交互时用):

# 将作业号1的后台进程调回前台
fg %1
python3 test.py  # 终端被占用,进程回到前台

5.终止后台进程

有两种方式(推荐用作业号,更直观):

  • 通过作业号kill %作业号
  • 通过PIDkill PID(PID 可通过jobs -lps aux查看)
# 例1:通过作业号终止(终止作业1)
kill %1
[1]+  已终止               python3 test.py# 例2:通过PID终止(先查PID,再kill)
jobs -l  # 查看作业的PID(第二列是PID)
[2]+ 12346 运行中               wget https://example.com/file.zip &
kill 12346  # 终止PID=12346的进程

6.后台进程 “防终端关闭终止”(nohup

默认情况下,关闭终端会终止后台进程。用 nohup 可让进程忽略终端关闭信号,持续运行:

# 后台运行脚本,输出重定向到nohup.out(避免终端关闭后终止)
nohup python3 test.py &
nohup: 忽略输入并把输出追加到'nohup.out'  # 提示输出位置

三、命令速查表

操作需求 命令示例
启动前台进程 python3 test.py
启动后台进程 python3 test.py &
暂停前台进程并移到后台 Ctrl + Zbg
查看后台作业 jobs
后台进程调回前台 fg %1(%1 是作业号)
终止后台进程(作业号) kill %1
后台进程防终端关闭 nohup 命令 &

进程相关命令

1.ps [查看进程]

ps(Process Status)用于查看系统中进程的静态快照,适合快速获取进程的 PID、状态、所属用户等信息。

常用参数与示例

  • 查看当前终端的进程

    ps
    

    输出简洁,仅显示当前终端中运行的进程。

  • 查看系统所有进程(最常用)

    ps aux
    
    • a:显示所有用户的进程;
    • u:以 “用户友好格式” 显示(含 CPU、内存占用等详情);
    • x:显示无终端的进程(如后台服务进程)。
  • 筛选特定进程

    结合 grep 过滤进程名,例如查看 nginx 相关进程:

    ps aux | grep nginx
    

2.pstree [查看进程树]

pstree 用于以树状结构显示进程间的父子关系,直观展示 “进程由哪个父进程创建” 的衍生层级。

常用示例:

  • 显示所有进程的树状结构

    pstree
    

    输出类似 systemd─┬─...,清晰体现进程的 “父子传承”。

  • 显示指定进程的树状结构(如查看 ssh 相关进程树):

    pstree -p $(pgrep ssh)
    
    • -p:显示进程 PID,方便精准定位具体进程。

3.top [实时进程动态]

top 用于实时监控进程的资源占用,界面会持续刷新(默认每 3 秒),适合观察 CPU、内存等资源的动态变化。

核心交互操作

  • 直接执行进入监控界面:

    top
    

    界面会显示系统整体负载(如 CPU 使用率、内存占用)、进程列表(默认按 CPU 占用排序)等。

  • 常用交互按键:

    • P:按 CPU 占用排序;
    • M:按内存占用排序;
    • k:输入 PID 后,向指定进程发送终止信号;
    • q:退出 top

4.kill [终止进程]

kill 用于向进程发送信号,从而控制进程(最常用场景是 “终止进程”,默认发送 SIGTERM 信号)。

常用示例

  • 终止指定 PID 的进程(如 PID 为 1234 的进程):

    kill 1234
    

    若进程无法 “优雅终止”,可发送强制终止信号SIGKILL,编号 9):

    kill -9 1234
    
  • 通过进程名终止(结合 pkill 更便捷):

    例如终止所有 firefox 进程:

    pkill firefox
    

5.lsof [端口占用查看进程]

lsof(List Open Files)用于查看系统中被进程打开的文件和网络连接,常用来定位 “哪个进程占用了特定端口”。

常用示例

  • 查看 80 端口被哪个进程占用

    lsof -i:80
    

    输出会显示占用 80 端口的进程 PID、用户、程序名等。

  • 查看指定进程打开的文件(如 PID 为 5678 的进程):

    lsof -p 5678
    

服务

1.定义:服务是长期在后台运行、提供系统功能的特殊进程,通常开机自动启动,用专门工具管理。

2. 核心特点

  • 后台常驻:无终端界面,默默提供功能。
  • 开机自启:默认随系统启动(可手动关闭)。
  • 工具管理:用systemctl操作(而非直接执行程序)。

systemctl [管理服务]

systemctl 是 systemd 系统的核心工具,用于管理系统服务的生命周期和自启动规则。

常用命令示例

  • 查看服务状态(以 firewalld 防火墙服务为例):

    systemctl status firewalld
    

    输出会显示服务是否运行、最近日志、进程 PID 等信息。

  • 启动 / 停止服务

    systemctl start firewalld   # 启动服务
    systemctl stop firewalld    # 停止服务
    
  • 重启 / 重新加载服务

    systemctl restart firewalld  # 完全重启(先停再启)
    systemctl reload firewalld   # 平滑重载(不中断服务,仅刷新配置)
    
  • 设置开机自启 / 禁用自启

    systemctl enable firewalld   # 开机自动启动
    systemctl disable firewalld  # 开机不自动启动
    
  • 查看所有服务状态

    systemctl list-units --type=service
    

特殊文件

/etc/passwd

听到 “passwd”,你可能会以为它存着密码 —— 早年的 Linux 确实这么设计!但后来大家发现:这个文件需要让所有用户可读(比如普通用户要通过它判断 “自己的用户名是否存在”),如果直接存明文密码,风险太高了。于是后来密码被移到了更安全的/etc/shadow,但 “passwd” 这个名字一直沿用至今

cat /etc/passwd命令打开文件,会看到每一行对应一个用户,格式特别规整,用冒号(:) 分成 7 个字段,比如这行典型的普通用户记录:

zhangsan:x:1001:1001:Zhang San,,,:/home/zhangsan:/bin/bash
字段位置 内容示例 含义解释
1 zhangsan 用户名(Username):登录时输入的 “身份标识”,比如 root、你的自定义用户名
2 x 密码占位符:早年存明文密码,现在固定用x代替,真正密码存在/etc/shadow
3 1001 UID(用户 ID):系统识别用户的 “数字身份证”,0=root,1-999 = 系统用户,1000 + 普通用户
4 1001 GID(组 ID):用户默认所属组的 ID,对应/etc/group里的组信息
5 Zhang San,,, 注释信息(GECOS):可选字段,一般存用户全称、电话、邮箱等备注,逗号分隔
6 /home/zhangsan 家目录(Home Directory):用户登录后默认进入的目录,root 的家目录是/root
7 /bin/bash 登录 Shell:用户登录后使用的命令行解释器,/bin/false/sbin/nologin表示 “禁止登录”

关键权限:为什么所有人都能读?

ls -l /etc/passwd看权限,通常是这样的:

-rw-r--r-- 1 root root 1523 Oct 10 14:30 /etc/passwd
  • 所有者(root):可读可写(rw-)
  • 组用户(root 组):只读(r--)
  • 其他用户(所有人):只读(r--)

之所以开放 “所有人可读”,是因为很多系统操作需要依赖它 —— 比如你用ls -l查看文件时,系统要通过passwd里的 “UID→用户名” 映射,把数字 UID 显示成你能看懂的用户名(比如把 1001 显示成 zhangsan)。如果普通用户读不了这个文件,很多命令都会 “乱码”

/etc/shadow

既然/etc/passwd只存 “花名册”,那真正的密码藏在哪儿?答案就是/etc/shadow—— 它是 Linux 系统的 “核心密码库”,专门存储用户的加密密码和密码策略,安全性极高,只有 root 能读写,普通人连看都看不了。

1. 为什么需要单独的 “密码本”?

早年把密码存在/etc/passwd时,一旦文件泄露,所有用户的明文密码都会被窃取。后来 Linux 引入了shadow机制:

  • 把密码从 “公开花名册” 移到 “私密密码本”
  • 密码存储时会经过单向加密(比如 SHA-512 算法),即使shadow文件泄露,黑客也很难反推出明文密码
  • 增加了 “密码过期时间”“锁定策略” 等功能,进一步提升安全

2. 打开看看:/etc/shadow的结构更复杂

因为权限严格,必须用sudo cat /etc/shadow才能打开,每一行对应一个用户,用冒号分成 9 个字段,比如:

zhangsan:$6$xyz123$abc456...:19500:0:99999:7:::

这 9 个字段全是 “密码相关的关键信息”,重点看前 5 个核心字段:

字段位置 内容示例 含义解释
1 zhangsan 用户名:和passwd里的用户名一一对应,关联身份
2 6xyz123$abc456... 加密密码:最核心的字段,格式是$算法$盐值$加密后的密码
3 19500 最后一次修改密码的时间:从 1970 年 1 月 1 日(Unix 纪元)开始算的天数,19500≈2023 年 10 月
4 0 密码最小修改间隔:0 表示 “随时可以改密码”,3 表示 “改完后 3 天内不能再改”
5 99999 密码有效期:99999≈273 年(默认永不过期),改成 30 表示 “30 天后必须改密码”
6 7 密码过期前提醒天数:7 表示 “过期前 7 天,每次登录都会提示改密码”
7 - 密码过期后宽限期:- 表示 “过期立即锁定”,3 表示 “过期后 3 天内还能登录”
8 - 账号失效时间:和字段 3 一样是 “纪元天数”,到点账号直接锁定,- 表示永不过期
9 - 保留字段:预留未来扩展使用

3. 加密密码字段:为什么黑客破解不了?

重点看第 2 个字段$6$xyz123$abc456...,这里藏着 Linux 密码的 “安全核心”:

  • $6$:表示用SHA-512 算法加密(1是 MD5,5是 SHA-256,现在主流用 SHA-512)
  • xyz123盐值(Salt) —— 加密时随机生成的字符串,即使两个用户密码相同,盐值不同,加密结果也不一样,能有效防止 “彩虹表破解”
  • abc456...:最终的加密结果,单向不可逆(只能加密,不能解密),系统验证密码时,会把你输入的密码用同样的盐值和算法加密,再和这个结果对比,一致就登录成功

4. 关键权限:root 专属的 “私密文件”

ls -l /etc/shadow看权限:

-r-------- 1 root root 896 Oct 10 14:30 /etc/shadow

只有 root(所有者)有 “读权限(r--)”,其他用户连读的资格都没有 —— 这是 Linux 系统最严格的权限之一,也是密码安全的最后一道防线。

/etc/sudoers

这个文件是 Linux 中 “权限 delegation(委托)” 的核心,决定了哪些用户可以 “借用 root 权限” 执行命令。

  • 核心作用:定义用户 / 用户组可执行的 sudo 命令范围(如允许 zhangsan 执行/usr/bin/ls,但禁止执行/usr/bin/rm)。

  • 权限特点:默认权限为 r--r-----.,仅 root 可读,且禁止直接用 vim 编辑(无语法检查,写错会导致 sudo 失效),必须用 visudo 命令编辑(自带语法校验)。

  • 典型配置

    :允许 zhangsan 无需输入密码执行所有 root 命令:

    zhangsan ALL=(ALL) NOPASSWD: ALL
    

完整结构拆分:5 个核心部分

这条规则的格式可以简化为:

[用户/组] [允许登录的主机]=(可切换的用户身份) [是否需要密码]: [允许执行的命令]

对应到 zhangsan ALL=(ALL) NOPASSWD: ALL 中,每个部分的含义如下:

1. 第一个字段:zhangsan → 被授权的 “用户或组”

  • 作用:指定这条规则给谁用。
  • 这里是 zhangsan,表示 “对用户 zhangsan 生效”。
  • 若要给用户组授权,需在组名前加 %,例如 %dev ALL=(ALL) ALL 表示对 dev 组的所有用户生效。

2. 第二个字段:ALL → 允许从 “哪些主机” 登录执行 sudo

  • 作用:限制用户只能从指定的主机登录系统后,才能使用 sudo 权限。
  • 这里的 ALL 表示 “不限制主机”—— 无论 zhangsan 是从本地服务器登录,还是通过 SSH 从其他主机远程登录,这条规则都生效。
  • 实际场景中可替换为具体主机名 / IP,例如:
    • zhangsan server01=(ALL) ALL → 仅允许 zhangsan 在主机server01上使用 sudo;
    • zhangsan 192.168.1.0/24=(ALL) ALL → 仅允许从192.168.1.x网段登录时使用 sudo。

3. 第三个字段:(ALL) → 可以 “切换到哪些用户” 的身份执行命令

  • 作用:指定用户执行 sudo 时,能临时切换到哪个用户的权限(默认是切换到 root,但可以限制)。
  • 这里的 (ALL) 表示 “可以切换到系统中任何用户”(包括 root、普通用户、甚至系统服务用户如apache)。
    • zhangsan ALL=(root) ALL → 仅允许 zhangsan 切换到 root 身份执行命令;
    • zhangsan ALL=(mysql) ALL → 仅允许切换到mysql用户身份(适合数据库管理场景,避免过度提权)。

4. 第四个字段:NOPASSWD: → 执行 sudo 时 “是否需要输入密码”

  • 作用:控制用户执行sudo 命令时,是否需要输入自己的登录密码进行验证。

  • 这里的 NOPASSWD: 是一个关键字,表示 “无需输入密码”——zhangsan 执行sudo rm /tmp/file时,直接生效,不用输密码。

  • 若去掉这个关键字(即写成 zhangsan ALL=(ALL) ALL),则执行 sudo 时必须输入 zhangsan 自己的密码(验证身份后才允许提权)。

5. 第五个字段:ALL → 允许执行 “哪些具体命令”

  • 作用:限制用户能用 sudo 执行的命令范围(最核心的安全控制字段)。

  • 这里的 ALL 表示 “允许执行系统中所有命令”(包括rm -rf /这种高危操作)。

    例如:

    • zhangsan ALL=(ALL) /bin/ls, /usr/bin/cp → 仅允许用 sudo 执行lscp命令;
    • zhangsan ALL=(root) /etc/init.d/nginx restart → 仅允许切换到 root 身份重启 nginx 服务。

特殊权限:

SUID

SUID(Set User ID)是给可执行文件加的特殊权限。简单说:当普通用户执行这个文件时,会临时获得文件所有者的权限(执行完就收回),而不是用自己的权限。

举个最经典的例子:passwd命令(修改密码)。

ls -l /usr/bin/passwd
# 输出:-rwsr-xr-x 1 root root 63736 4月  18  2023 /usr/bin/passwd

注意所有者执行位是s(不是x),说明它有 SUID 权限。

  • passwd的所有者是 root,普通用户执行它时,会临时获得 root 权限,才能修改只有 root 能写的/etc/shadow(密码文件)。
  • 如果没有 SUID,普通用户根本改不了自己的密码 —— 这就是 SUID 的核心作用:“临时借权”。

怎么识别 SUID 权限?

SUID 的权限位在 “所有者执行位(x)” 上,表现形式有两种:

  • 小写s:表示文件所有者原本有执行权限(x),且已设置 SUID(有效);
  • 大写S:表示文件所有者原本没有执行权限(-),虽然设置了 SUID,但无效(因为文件都不能执行,借权也没用)。

3怎么设置 / 取消 SUID?

chmod命令,两种方式:

  • 符号法:chmod u+s 文件名(给所有者加 SUID);chmod u-s 文件名(取消)。
  • 数字法:SUID 的数字标识是4,把它加在普通权限前(比如chmod 4755 文件名755是普通权限,4表示 SUID)。

案例:

# 给test.sh设置SUID(假设原权限755)
chmod u+s test.sh  
# 此时权限变为 -rwsr-xr-x# 取消SUID
chmod u-s test.sh  
# 权限变回 -rwxr-xr-x

SUID 虽然方便,但风险极高,必须牢记这几点:

  • 只给可执行文件用:给文本、图片等非可执行文件设置 SUID,完全无效;
  • 绝对不能给 shell 设置:如果给/bin/bash加 SUID,普通用户执行bash会直接获得 root 权限,系统瞬间被攻破;
  • 能不用就不用:只有像passwdping这种系统必须的命令才需要 SUID,自己写的脚本尽量别用。

SGID

SGID(Set Group ID)比 SUID 更灵活 —— 既能给文件加,也能给目录加,作用还不一样。

对可执行文件:临时 “借” 用文件所属组的权限

和 SUID 类似,但借的是 “组权限”。当用户执行带 SGID 的文件时,会临时获得文件所属组的权限。

举例:wall命令(给所有在线用户发广播)。

ls -l /usr/bin/wall
# 输出:-rwxr-sr-x 1 root tty 32184 4月  18  2023 /usr/bin/wall

组执行位是s,说明有 SGID。wall的所属组是tty(终端设备组),普通用户执行它时,会临时获得tty组权限,才能往/dev/tty(终端设备文件)里写消息 —— 否则广播发不出去。

对目录:新文件自动 “继承” 目录的所属组

这是 SGID 最常用的场景!给目录设置 SGID 后,在该目录下新创建的文件 / 子目录,会自动继承目录的所属组(而不是创建者的默认组),完美解决团队共享文件的 “归属混乱” 问题。

案例:

假设团队有个共享目录/project/dev,需要所有人创建的文件都归dev_team组(方便团队协作):

# 1. 创建目录并设置所属组为dev_team
mkdir -p /project/dev
chown root:dev_team /project/dev  # 2. 设置SGID(数字法2+普通权限775)
chmod 2775 /project/dev  # 此时目录权限是 drwxr-sr-x(组执行位是s,SGID生效)

现在,团队成员zhangsan(默认组是zhangsan)在里面创建文件:

touch /project/dev/test.txt
ls -l /project/dev/test.txt
# 输出:-rw-rw-r-- 1 zhangsan dev_team ... test.txt

文件的所属组是dev_team(继承目录的组),而非zhangsan的默认组。这样团队所有成员(只要属于dev_team组)都能按组权限操作文件,不用手动改权限

怎么识别和设置 SGID?

  • 权限位:在 “组执行位(x)” 上,小写s(组有执行权限,有效),大写S(组无执行权限,无效)。
  • 设置 / 取消:
    • 符号法:chmod g+s 目标(加 SGID);chmod g-s 目标(取消)。
    • 数字法:SGID 的数字标识是2,比如chmod 2775 目录名

SGID 的坑点提醒

  • 给目录设置 SGID 后,若目录的组权限有w(写),组内成员能删别人的文件(想阻止?后面讲 SBIT);
  • 对可执行文件设置 SGID 时,确保所属组权限 “最小化”,别让普通用户借组权限干坏事。

SBIT

SBIT(Sticky Bit,粘滞位)是专门给目录加的权限,作用只有一个:保护目录里的文件,防止被非所有者删除

1. 啥场景需要 SBIT?

最典型的就是/tmp目录(系统临时文件目录)。所有人都能在/tmp里创建、修改文件,但不能删别人的文件 —— 这就是 SBIT 的功劳。

ls -ld /tmp
# 输出:drwxrwxrwt 12 root root 4096 10月 27 10:00 /tmp

注意其他人执行位是t(不是x),说明有 SBIT。

2. SBIT 的核心规则

在带 SBIT 的目录里,只有三种角色能删除 / 重命名文件:

  • 文件的所有者;
  • 目录的所有者;
  • root 用户。

哪怕其他用户对目录有写权限(o+w),也删不了别人的文件。

3.怎么设置 / 取消 SBIT?

  • 权限位:在 “其他人执行位(x)” 上,小写t(其他人有执行权限,有效),大写T(其他人无执行权限,无效)。
  • 设置 / 取消:
    • 符号法:chmod o+t 目录名(加 SBIT);chmod o-t 目录名(取消)。
    • 数字法:SBIT 的数字标识是1,比如chmod 1777 目录名777允许所有人读写执行,1表示 SBIT)。

实操案例:创建一个公共目录并加 SBIT

mkdir public
chmod 1777 public  # 1(SBIT)+777(全权限)
ls -ld public
# 输出:drwxrwxrwt ... public(其他人执行位是t)

  • 只对目录有效:给文件加 SBIT 完全没用(早期 Unix 有特殊作用,现在 Linux 已废弃);
  • 目录必须开 “其他人写权限”(o+w):否则本来就删不了,加 SBIT 多此一举;
  • 别乱用:非公共目录(比如个人目录)加 SBIT,可能导致自己删文件都麻烦。

四、一张表分清 SUID、SGID、SBIT

权限 作用对象 核心功能 权限位位置 数字标识 典型例子
SUID 可执行文件 执行时临时获得文件所有者权限(如普通用户改密码) 所有者执行位(x) 4 /usr/bin/passwd
SGID 可执行文件 / 目录 执行文件时临时获组权限;目录新文件继承目录的组(团队共享) 组执行位(x) 2 团队共享目录/project/dev
SBIT 目录 只有文件所有者 / 目录所有者 /root 能删除文件(防删他人文件) 其他人执行位(x) 1 /tmp目录

参考:

【Linux用户、用户组与文件权限管理】https://www.bilibili.com/video/BV1iS421d7Vg?vd_source=2884b80d333f3bfc8048b360e6195550

【9.Linux服务与进程管理】https://www.bilibili.com/video/BV19Y4y197nZ?vd_source=2884b80d333f3bfc8048b360e6195550

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年有实力的GEO优化公司TOP10排行榜:GEO系统、GEO优化排名、GEO优化排名软件公司优选

在当今数字化营销浪潮中,全域GEO搜索排名推广系统等相关产品成为企业提升品牌曝光度、拓展客户群体的关键利器。山东地标数字科技有限公司作为行业佼佼者,在这一领域展现出独特的魅力与实力。然而,不少企业在营销之…

rust学习(一)Windows安装rust环境

Windows下安装Rust考虑到默认安装目录以及文件下载速度,可以提前设置好环境变量1.配置环境变量信息RUSTUP_DIST_SERVER RUSTUP_UPDATE_ROOT RUSTUP_HOME 默认安装位置为C:\User\[用户名]\.rustup CARGO_HOME默认安装位…

第一次小测复习

switch(x) 中的 x 可以是 ** 整型** 或者 字符型 。(PPT里面的整数类型大致是包含这两个吧) 注意 D 是十六进制的 13,`D` 是字符。 看 for 之类的较为复杂的循环时,不要想当然,每一步都要认真验算! 尤其是循环嵌…

10月30日

今完成了MES管理系统的开发实践,深入理解了生产管理系统的业务逻辑和技术实现。通过Servlet和JSP的配合使用,掌握了Web应用的基本架构模式。在开发过程中,特别注重数据验证的重要性,包括生产批次的10位数字格式验证…

2025 年 10 月装修公司权威推荐榜:老房翻新/毛胚房改造/局部翻新/设计施工/水电改造/现代简约/奶油风格/法式风格/全包装修/半包装修公司推荐

2025 年 10 月装修公司权威推荐榜:老房翻新/毛胚房改造/局部翻新/设计施工/水电改造/现代简约/奶油风格/法式风格/全包装修/半包装修公司推荐随着城市化进程的不断推进和居民生活品质的提升,装修行业正迎来新一轮的发…

[AGC007B] Construct Sequences 构造有感

给定\(n\)的排列\(P_n\), 构造\(A_n,B_n\)满足\(A_1<A_2<...<A_n\) \(B_1>B_2>...>B_n\) \(A_{P_1}+B_{P_1}<A_{P_2}+B_{P_2}<...<A_{P_n}+B_{P_n}\) \(1\leq n\leq 2\times 10^4\) \(1\le…

IMO2025 Problem 4

考虑 \(n = p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_k^{\alpha_k}~(p_1 < p_2 < \cdots < p_k)\),由于除自身外还有 \(3\) 个因子,故满足 \(\alpha_1 \ge 2\) 或 \(k \ge 2\)。 考虑最大的真因子一定为 \(\d…

10月30号

今天上了数构和体育

从图像到数据:解密医疗器械经营许可证的自动识别技术与全场景应用

在医疗器械行业,合规是生命线。而《医疗器械经营许可证》则是企业进入市场、开展经营活动的核心“通行证”。随着数字化转型的深入,一种高效、精准的技术——医疗器械经营许可证识别技术应运而生,正深刻地改变着行业…

vllm openwebui

架构 下载模型(modelscope) -> vLLM (推理框架) -> openWeb UI uv python管理工具source .venv/bin/activate (要激活才能够直接当命令行用)这个很重要!!pip install uvuv initsource .venv/bin/activate ex…

48届西安icpc区域赛

题解(qoj)https://qoj.ac/download.php?type=attachments&id=1784&r=1 补题:https://codeforces.com/gym/105471 过的先不写。。 I 这题分为相对独立的两个部分,找到有效的三元组,以及求解二维数点最大值…

任推邦官网

任推帮,任推帮,人推帮,官网任推邦官网 网盘拉新项目概览与收益对比平台名称 官方网站 移动端/PC端拉新奖励 会员分成比例 转存资源收益 (CPA/CPS) 推广渠道 特色/备注1. 夸克网盘 https://pan.quark.cn 移动端 7 /…

信友队 2025CSP-S第二轮(复赛)模拟赛 解题报告

比赛链接 T1 题意关键词:断边连边,求某连通块的a的2^k之和。 做法关键词:线段树分治,并查集,费马小定理,循环节,扩展欧拉定理 打表可知998244353对于任意的a循环节都在50以内。于是我们预处理这些次幂的结果然后…

实验一:AI故事生成平台 调用deepseek大模型

实验一:AI故事生成平台 实验名称: AI故事生成平台 - 核心数据模型与文本生成 核心任务: 构建平台的后端核心,实现基于关键词的自动故事生成。 任务要求: 设计并实现 Story 数据模型,至少包含标题、故事梗概、正文…

矩阵快速幂常用矩阵构造

斐波那契数列: \(F_i = F_{i-1} + F_{i-2}\) \[\begin{bmatrix} F_i \\ F_{i-1} \end{bmatrix}= \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} \times \begin{bmatrix} F_{i-1} \\ F_{i-2} \end{bmatrix} = …

顶级CTF工具与资源大全

精心整理的CTF夺旗赛工具资源集合,包含创建和解题所需的各类框架、库、软件及教程,帮助CTF新手和经验选手一站式找到所需资源,提升竞赛技能。Awesome CTF 一个精心整理的Capture The Flag(CTF)框架、库、资源、软…

第二章 数列极限

第二章 数列极限1 有界序列与无穷小序列1.a 有界序列 1.b 无穷小序列 1.c 有界序列与无穷小序列的性质2 收敛序列2.a 收敛序列的定义 2.b 收敛序列的性质 2.c 收敛序列与不等式3 收敛原理3.a 单调收敛原理 3.b 闭区间套…

小白也能看懂的RL-PPO

原文链接:https://mp.weixin.qq.com/s/cx3qY42Lp0L3RaSOgsH77A 1. 强化学习基本概念 强化学习(Reinforcement Learning, RL)作为机器学习的重要分支,目标是让智能体(agent)与环境(environment)不断交互,学习任…

第二十三天

今日深入学习了线索二叉树,这个数据结构的设计思路让我对“优化”与“权衡”有了更具体的认知。 此前学习普通二叉树时,其空指针域的浪费一直是明显的痛点——n个节点的二叉树有n+1个空指针,这些闲置的存储空间若能…