权限管理

1233 字
6 分钟
权限管理

1. sudo 命令简介#

  • sudo 用来进行指定的短暂授权。例如安装软件时需要管理员(root)权限,实际上安装的是一份软件,允许大家同时使用。

  • 权限控制如同“白名单”,只有被列入的用户才能执行特定操作。

举例:

Terminal window
whoami
普通用户 -> sudo ls
# 报错
[sudo] password for kiana: is not in the sudoers file. This incident will be reported.

sudo 提示用户是否在 sudoers 文件中,决定是否授权。

Terminal window
-r--r----- root root /etc/sudoers

添加用户权限:

Terminal window
root ALL=(ALL) ALL
whb ALL=(ALL) ALL

2. 权限概述#

权限的本质是:决定用户能做或者不能做什么操作。

权限的两个主要目的

  1. 控制用户行为:防止错误发生。

  2. 理解和管理权限:分配精细的权限,控制访问。

权限 = 角色 + 目标属性#

  • 角色:拥有者(user)、所属组(group)、其他用户(other)。

  • 目标属性:文件的读、写、执行权限。

3. 文件权限#

文件权限组成#

权限由9个字符表示:rwxrwxrwx

  • r = 读权限

  • w = 写权限

  • x = 执行权限

三个为一组 第一组表示拥有者权限,第二组表示所属组权限,第三组表示其他用户权限。

文件权限的数字表示#

  • rwx = 7 (二进制: 111)

  • rw- = 6 (二进制: 110)

  • r-- = 4 (二进制: 100) 例如

Terminal window
-rwxrw-r-- 1 kiana kiana 0 Sep 24 18:51 my.txt
↑ ↑↑↑ ↑↑↑ ↑
│ │││ │││ └── 其他用户权限(r--)
│ │││ └─┴──── 所属组权限(rw-)
│ └┴┴─────── 拥有者权限(rwx)
└─────────── 文件类型(-表示普通文件)

4. chmod 修改文件权限#

  • u:拥有者(user)

  • g:所属组(group)

  • o:其他用户(others)

字符模式

Terminal window
chmod u-r my.txt # 移除拥有者的读权限
chmod u+r my.txt # 恢复拥有者的读权限
chmod u+rwx my.txt # 为拥有者添加读、写、执行权限

数字模式

Terminal window
chmod 644 file # 设置权限为rw-r--r--
chmod 755 file # 设置权限为rwxr-xr-x

修改限制#

  • 用户只能修改自己的文件权限。

  • 修改其他用户的文件权限需要更高权限(如 sudo)。

5. chown更改文件的所有者#

普通用户无法改变其他用户的文件所有者,必须拥有 root 权限。

Terminal window
sudo chown kiana:kiana cmd # 更改文件所有者

没有权限时会遇到什么情况?

系统会拒绝访问:

Terminal window
cat my.txt
# cat: my.txt: Permission denied

6. 目录权限#

目录权限与文件权限有所不同,特别是执行权限在目录中的作用:

  • 读(r):查看目录内容(列出文件)

  • 写(w):在目录中创建、删除、重命名文件

  • 执行(x):进入目录

注意:

  1. 没有读权限:无法查看目录内容

  2. 没有执行权限:无法进入目录

  3. 没有写权限:无法在目录内创建/删除文件

  4. 文件删除权限:取决于所在目录的写权限,而非文件本身权限

权限实例

Terminal window
drwxrwxr-x 2 kiana kiana 4096 Sep 24 20:48 code
  • 目录拥有者和所属组都有完全权限(rwx)

  • 其他用户有读取和进入的权限(r-x),但不能修改目录内容。

7. 粘滞位(Sticky bit)#

  • 作用:用于共享目录,防止非拥有者删除他人文件

  • 设置方法:chmod +t directory 或 chmod 1777 directory

  • 特征:目录权限最后一位变为t,如drwxrwxrwt

  • 效果:用户只能删除自己创建的文件

设置粘滞位:

Terminal window
chmod +t /shared/directory

共享文件一般放在系统文件tmp下

Terminal window
drwxrwxrwt 14 root root 4096 Jan 14 20:31 tmp/

8. 权限掩码 (umask)#

umask:默认的文件权限掩码,控制文件或目录的默认权限。

默认权限#

  • 普通文件的默认权限:666(rw-rw-rw-)(去掉可执行权限)

  • 目录的默认权限:777(rwxrwxrwx)(包含执行权限)

  • umask 会与默认权限进行按位与操作,从而决定最终的权限。

  • 最终权限 = 起始权限 & (~umask)

查看 umask#

Terminal window
umask
0022 #因系统而异
  • 对文件:666 & (~0022) = 648(去掉了其他用户的写权限)

  • 对目录:777 & (~0022) = 753(去掉了其他用户的写权限)

9. 总结#

  • 角色:每个文件都有三个角色权限:拥有者、所属组、其他用户。

  • 角色判定顺序:拥有者 → 所属组 → 其他用户(只判定一次)

  • 权限控制:每个角色可以拥有不同的读、写、执行权限。

  • root用户:不受任何权限限制

  • 修改权限:使用 chmod 修改权限,使用 chown 更改文件所有者。

  • 权限掩码:umask 用于设置默认文件权限,灵活调整。

  • 家目录隔离:默认情况下用户无法访问他人家目录

  • 可执行权限:需要”权限+可执行内容”双重条件

命令功能示例
chmod修改权限chmod 755 file
chown修改拥有者chown user:group file
chgrp修改所属组chgrp group file
umask设置权限掩码umask 022
sudo临时获取root权限sudo apt install package

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
HandlerOne
おかえり
公告
本站已整理 138 篇技术笔记,并按 8 条主线排成学习路线(141 站);站内搜索与桌宠对话均已上线。
分类
标签
最新动态
站点统计
文章
138
分类
12
标签
42
总字数
597,044
站点信息
构建平台
腾讯云 · Nginx
博客版本
v6.16.8
文章目录