Linux基础:三分钟带你掌握 Linux 基本权限与特殊权限

在Linux的世界里,权限如同文件和目录的看门人,宛如一套精密的安全系统中的钥匙。这些权限决定谁可以访问、修改或执行资源,确保系统的安全性和协作性。权限被分配给用户和用户组,就像钥匙分发给组织中的个人和团队。每个用户可以属于多个用户组,而加入某个组会赋予额外的访问权限,使其能够对文件和目录执行特定操作。


理解所有权与权限

在Linux中,每个文件和目录都有一个所有者(某个特定用户)并关联到一个用户组。当你创建一个新文件或目录时,它自动归你所有,并与你的主要用户组绑定——类似于职场中项目默认归属你的团队。权限分为三类:所有者、用户组和其他人(除所有者和组成员外的所有人),分别决定是否可以执行读取、写入或执行操作。

例如,运行 ls -l 命令可能显示:

-rwxr-xr-- 1 cry0l1t3 team 0 May 4 22:12 shell

这里,所有者(cry0l1t3)拥有完全权限(rwx——读取、写入、执行),用户组(team)有读取和执行权限(r-x),其他人只能读取(r--)。这展示了Linux如何通过细致规则控制资源访问。

执行权限的独特角色

访问目录内容类似于进入房间前需解锁房门。要“穿越”或进入目录,用户必须拥有目录的执行权限 (x)——这是一把关键的“钥匙”。例如:

drw-rw-r-- 3 cry0l1t3 cry0l1t3 4096 Jan 12 12:30 scripts

若缺少执行权限,尝试访问(ls -al scripts/)会返回:

ls: cannot access 'scripts/': Permission denied

换言之,目录的执行权限就像允许你走进一条走廊,进入其中的房间。它不赋予查看或修改内容的权利,但让你能探索目录结构。没有它,用户将被拒之门外。

需要区分的是,目录的执行权限与文件中文件的执行权限不同。要运行目录中的文件,用户需对该文件本身拥有执行权限;而修改目录内容(创建、删除或重命名文件)则需写入权限 (w)

权限的八进制表示

Linux权限基于八进制系统,分为三种基本类型:

  • 读取 r:值为4
  • 写入 w:值为2
  • 执行 x:值为1

这些权限适用于所有者、用户组和其他人。例如:

-rwxr-xr-- 1 root root 1641 May 4 23:42 /etc/passwd

八进制表示为 754

  • 所有者:rwx = 7 (4+2+1)
  • 用户组:r-x = 5 (4+0+1)
  • 其他人:r-- = 4 (4+0+0)

这种数字表示便于快速理解和调整权限。

修改权限:chmod 命令

使用 chmod 命令可更改权限,支持符号表示法(u 表示所有者,g 表示用户组,o 表示其他人,a 表示所有人)和八进制值。例如,文件 shell 的初始权限为:

-rwxr-x--x 1 cry0l1t3 team 0 May 4 22:12 shell

为所有人添加读取权限:

cry0l1t3@[/]$ chmod a+r shell && ls -l shell
-rwxr-xr-x 1 cry0l1t3 team 0 May 4 22:12 shell

或直接设为 754

cry0l1t3@[/]$ chmod 754 shell && ls -l shell
-rwxr-xr-- 1 cry0l1t3 team 0 May 4 22:12 shell

这体现了权限调整的灵活性。

更改所有者:chown 命令

使用 chown 命令可更改文件或目录的所有者和用户组,语法为:

cry0l1t3@[/]$ chown <用户>:<用户组> <文件/目录>

例如,将 shell 移交 root

cry0l1t3@[/]$ chown root:root shell && ls -l shell
-rwxr-xr-- 1 root root 0 May 4 22:12 shell

特殊权限:SUID、SGID 和 Sticky Bit

Linux 的权限系统不仅有基础的“读写执行”,还提供了一些“特殊通行证”——SUID(设置用户ID)SGID(设置组ID)Sticky Bit。这些权限就像是为特定场景量身定制的“魔法钥匙”,让系统在安全的基础上变得更灵活、更实用。让我们用通俗的语言逐一拆解它们。

SUID 和 SGID:临时的“超能力”借用

SUID 和 SGID 就像是系统发给用户的“临时身份卡”。当某个程序被设置了 SUID 或 SGID 时,普通用户在运行它时,可以暂时“借用”文件所有者或用户组的权限,拥有超越自己身份的“超能力”。这在一些需要更高权限的操作中特别有用,比如修改系统文件或访问受限资源。

SUID:借用所有者的身份

来看一个例子:

  -rwsr-xr-x 1 root root 12345 May 4 22:12 program

这里,权限显示为 rws,那个小写 s 告诉我们:SUID 已开启,而且文件还有执行权限(x)。这意味着,当你运行 program 时,哪怕你只是个普通用户,系统会让你暂时“化身”文件的所有者(这里是 root),拥有 root 的权限去执行任务。任务完成后,这份“超能力”就还回去,你还是那个平凡的你。

但如果执行权限没了呢?比如:

-rwSr-xr-x 1 root root 12345 May 4 22:12 program

注意那个大写 S!它表示 SUID 虽然被设置了,但没有执行权限(x)。这就像给你一张通行证,却忘了给你钥匙——文件没法运行,SUID 自然也成了摆设。设置 SUID 的命令是 chmod u+s 文件,但别忘了检查执行权限,否则就白忙活了。

SGID:借用用户组的力量

SGID 的玩法差不多,只是它让你借用的是文件所属用户组的权限。比如:

  -rwxr-sr-x 1 root users 12345 May 4 22:12 program

用户组权限里的小写 s 表示 SGID 已启用,且有执行权限(x)。运行这个程序时,你会以 users 组的身份行事。如果变成大写 S

 -rwxr-Sr-x 1 root users 12345 May 4 22:12 program

SGID 还在,但执行权限没了,效果同样打折扣。设置 SGID 用的是 chmod g+s 文件,道理和 SUID 一样。

小写 s 是“全套装备”——既有特殊权限,又能执行;大写 S 则是“半吊子”——特殊权限有了,但没法用。这种区别提醒我们,配置时要细心,不然“临时超能力”可能会变成空头支票。常见例子是系统工具像 passwd,它就用 SUID 让普通用户也能修改密码文件。

Sticky Bit:共享空间的“保护锁”

Sticky Bit 则像共享宿舍里的“个人柜锁”。它专门用在目录上,确保大家都能用同一个空间,但不能随便动别人的东西。看看这俩例子:

drw-rw-r-t 3 cry0l1t3 cry0l1t3 4096 Jan 12 12:30 scripts
drw-rw-r-T 3 cry0l1t3 cry0l1t3 4096 Jan 12 12:32 reports
  • 小写 t:开放但有序
    scripts 目录的 t 表示 Sticky Bit 已开启,且有执行权限(x)。这就像一个公共工作间:大家都能进去看看、用用,但里面的文件只能由文件的所有者、目录的所有者或超级管理员 root 删除或改名。其他人哪怕有写入权限,也只能老老实实待着,动不了别人的东西。

  • 大写 T:锁得更严
    reports 目录的 T 则更严格——Sticky Bit 在,但没有执行权限(x)。这意味着外人不仅动不了里面的文件,连看一眼内容的机会都没有。这样的设置常见于需要更高保护的共享区域。

  • 现实中的例子
    Sticky Bit 最经典的应用是 /tmp 目录。系统里每个人都能往 /tmp 扔临时文件,但有了 Sticky Bit(通常是 drwxrwxrwt),你只能删自己的文件,碰不了别人的。这种“保护锁”让共享空间既热闹又安全。

小贴士:

  • SUID/SGID 设置:用 chmod u+schmod g+s,但记得检查执行权限,避免出现无用的 S
  • Sticky Bit 设置:用 chmod +t 目录,适合多人协作的公共目录。
  • 小心安全隐患:SUID 和 SGID 虽好用,但若随便给复杂程序加权限(比如能开 shell 的工具),可能让普通用户意外获得 root 权限,酿成大祸。

总结

Linux 权限管理通过所有权、基本权限和特殊权限,构建了安全高效的协作环境。chmodchown 提供灵活调整,而 SUID、SGID 和 Sticky Bit 的 sStT 大小写则反映权限状态——小写表示完整可用,大写提示配置需完善。掌握这些机制,如同拥有一套精密钥匙,让你在Linux系统中游刃有余地管理资源,确保安全与功能的完美平衡。